рд╕реИрдкрд░: рд░реЙрдпрд▓ рдЗрдВрдЬреАрдирд┐рдпрд░

рд╣рдмрд░рдЬрд░рд╛рдмреЛрддрдЪрд┐рдХреА, рд╕реНрд╡рд╛рдЧрдд рд╣реИ!



рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ рдореИрдВ рд╣рдорд╛рд░реЗ рдкрд╣рд▓реЗ рдЧреЗрдо рдХреЗ рд╡рд┐рдХрд╛рд╕ рдФрд░ рдкреНрд░рдХрд╛рд╢рди рдХреЗ "рдЗрддрд┐рд╣рд╛рд╕" рдХреЛ рдмрддрд╛рдКрдВрдЧрд╛: рдХреИрд╕реЗ рдбрд┐рдЬрд╛рдЗрди рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЙрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЙрдиреНрд╣реЗрдВ рдХрд┐рди рдХрдард┐рдирд╛рдЗрдпреЛрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛, рдХреНрдпреЛрдВ рд╕реНрдЯреИрдХрдСрд╡рд░рдлреНрд▓реЛ Apple рджреЗрд╡ рдлрд╝реЛрд░рдо, рдЖрджрд┐ рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИред

рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдЦреЗрд▓реЛрдВ рдкрд░ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдмрд╛рдж рдХреЗ рддреНрд╡рд░рдг рдХреЗ рд▓рд┐рдП, рдбрд┐рдЬрд╛рдЗрдирд░ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХреЗ рддрдВрддреНрд░ рдмрдирд╛рдиреЗ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рд╕реЗ рдЦреЗрд▓ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рд╕рдЦреНрддреА рд╕реЗ (рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ) рдЬрдЬ рдХрд░реЗрдВред



рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрд┐рддреНрд░:

рдЫрд╡рд┐рдЫрд╡рд┐



рдЫрд╡рд┐рдЫрд╡рд┐







рдпрд╣ рд╕рдм рдХреИрд╕реЗ рд╢реБрд░реВ рд╣реБрдЖ?



рдРрд╕рд╛ рд╣реБрдЖ рдХрд┐ рдПрдХ рдирдИ рдиреМрдХрд░реА рдореЗрдВ, рдХреБрдЫ рдХрд╛рд░рдгреЛрдВ рд╕реЗ, рдореБрдЭреЗ рдорд╢реАрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЧреЗрдо рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдореИрдВрдиреЗ рдПрдХ рдкреНрд░рддрд┐рднрд╛рд╢рд╛рд▓реА рдбрд┐рдЬрд╛рдЗрдирд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд┐рдпрд╛ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреАрд╕реА (рдПрдХреНрд╕рдмреЙрдХреНрд╕, рдЖрджрд┐) рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рдЧреЗрдо (рдореЛрдмрд╛рдЗрд▓ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░) рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рдЙрд╕реА рд╕рдордп рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рд╕рд╛рде рд╣реА рд╕рд╛рде рдпрд╣ рдЗрддрдирд╛ рдЬрдЯрд┐рд▓ рднреА рдирд╣реАрдВ рдерд╛ рдХрд┐ рд╣рдорд╛рд░рд╛ рд╡рд┐рдХрд╛рд╕ 4-5-6 рдорд╣реАрдиреЛрдВ рддрдХ рдирд╣реАрдВ рдЪрд▓рддрд╛ред рди рддреЛ рдореИрдВ рдФрд░ рди рд╣реА рд╡рд╣ рдЗрддрдиреА рд▓рдВрдмреА рдЫрд▓рд╛рдВрдЧ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдереЗред



рдорд╛рдЗрдирд╕реНрд╡реАрдкрд░ рд╡рд╣ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдерд╛ рдЬрд┐рд╕реЗ рд╣рдо рд╢реБрд░реВ рд╕реЗ рд╣реА рдЙрдард╛рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗред



рдпрд╣рд╛рдБ рд╡рд╣реА рд╣реИ рдЬреЛ рд╣рдо рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдмрд╣реБрдд рдЦреБрд╢реА рд╣реИ рдХрд┐ рд╣рдордиреЗ рд╕рдордп рдкрд░ рдЕрдкрдиреА рд╕реЗрдирд╛рдУрдВ рдХрд╛ рд╕рд╣реА рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд┐рдпрд╛:



рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ
рдЫрд╡рд┐



рдЫрд╡рд┐



рдЫрд╡рд┐



рдЫрд╡рд┐





рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рдПрдХ рдРрд╕рд╛ рдЦреЗрд▓ рдирд╣реАрдВ рд▓реЗрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдЬреЛ рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЕрднреА рддрдХ рд╕реНрдкреНрд░рд╛рдЗрдЯрд┐рдЯ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛ рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдмреАрдЪ рдореЗрдВ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдФрд░ рдпрд╣ рд╕рдордЭрддрд╛ рдерд╛ рдХрд┐ рдХреЗрд╡рд▓ рд╕реНрдЯрдВрдк рдбреЗрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреБрдЫ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред



StackOverflow рдореЗрдВ рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ Cocos2D рдХреЛ рд▓реЗрдЦрдХ (LearnCocos2D) рджреНрд╡рд╛рд░рд╛ рдмрд╣реБрдд рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ Apple рдХреА рдкреНрд░рд╕реНрддреБрддрд┐ рдФрд░ рд╕рд╛рд╣рд╕рд┐рдХ рдЦреЗрд▓ рдХреЗ рдмрд╛рдж рд╕реНрдкреНрд░рд┐рдЯрдХрд┐рдЯ рдЖрдЬрдорд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рд╕рдЪреНрдЪрд╛рдИ рдиреЗ рдореБрдЭреЗ рдЗрд╕ рддрдереНрдп рд╕реЗ рджреБрдЦреА рдХрд┐рдпрд╛ рдХрд┐ Xcode рдореЗрдВ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрдг рджреГрд╢реНрдп рд╣реИ, рдФрд░ рдореИрдВ Xcode рдХреЛ рдХрдо рдмрд╛рд░ рдЦреЛрд▓рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред



рдЙрдкрдХрд░рдг



рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЪрд░рдгреЛрдВ рдореЗрдВ, Xcode + AppCode, рдлрд╝реЛрдЯреЛрд╢реЙрдк рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ред

рддрдм рдХреЗрд╡рд▓ AppCode рдФрд░ рдлрд╝реЛрдЯреЛрд╢реЙрдкред



рд╕реНрдкреНрд░рд╛рдЗрдЯрдХрд┐рдЯ рдХреЛ рдпрд╣рд╛рдБ рдпрд╛ рдпрд╣рд╛рдБ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред



рдбрд┐рдЬрд╝рд╛рдЗрди (рд░реЗрдЯрд┐рдирд╛, рд░реЗрдЯрд┐рдирд╛ рдирд╣реАрдВ, 4 рдФрд░ 5 iPhone)



рдореИрдВ рддреБрд░рдВрдд рдЗрд╕ рддрдереНрдп рдХреЗ рд▓рд┐рдП рдерд╛ рдХрд┐ рд╣рдордиреЗ 4 рдЖрдИрдлрд╝реЛрди рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛ рдФрд░ рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рдПрдХ рд╕рдореВрд╣ рдХреЗ рд╕рд╛рде рднрд╛рдк рд╕реНрдирд╛рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛, рдЬреЛ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЖрд╡реЗрджрди рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдХреА рдЦрд╝рд╛рд╕рд┐рдпрдд рдХреЗ рдХрд╛рд░рдг рдкрд░реНрдпрд╛рдкреНрдд рдерд╛ред рдПрдХ рдмрд╛рд░ рдЬрдм рдЙрдиреНрд╣реЛрдВрдиреЗ 4 рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдФрд░ рд╡рд╣ рд╕рдм рдХрдо рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рд░реЗрдЯрд┐рдирд╛ рдХреЗ рдиреАрдЪреЗ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рдорд╣рд╛рди!



рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдБ рд╣рдорд╛рд░рд╛ рдкрд╣рд▓рд╛ рд╡рд┐рдХрд▓реНрдк рдХреНрдпрд╛ рд╣реИ:



рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ










рдЖрдЧреЗ рд╣рдордиреЗ рдРрд╕реЗ рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреВрдЫрд╛:





рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреЗ рдереЗ:



рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ














рдбрд┐рдЬрд╛рдЗрдирд░ рд╕реНрд╡рддрдВрддреНрд░рддрд╛ рджреЗрдВ, рд▓реЗрдХрд┐рди рдирд┐рдпрдВрддреНрд░рдгред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЬрд┐рд╕ рдлреЙрдиреНрдЯ рдХреЛ рд╡рд╣ рд╕рдордп рдмрд┐рддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рддрд╛ рдерд╛ рдФрд░ рдХреНрд╖реЗрддреНрд░ рдкрд░ рдмрдореЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдорд╛рдирдХ рд╕реВрдЪреА рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рджреЗрдЦрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ, рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЕрднреА рднреА _ font_ рдлрд╝реЙрдиреНрдЯ рдЦреЛрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕ рддрдереНрдп рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рдХрд┐ рд╢рд┐рд▓рд╛рд▓реЗрдЦ рдХреЗ рдкреАрдЫреЗ рдЙрдирдХреЗ рдмреАрдЪ рдХреБрдЫ рджреВрд░реА рдХреЗ рд╕рд╛рде 4 рдЧреНрд░реЗ рдЕрдВрдХреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдкреГрд╖реНрдарднреВрдорд┐ рдЫрд╡рд┐ рд╣реИ, рдФрд░ рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╣рдореЗрдВ рдЗрд╕ рддрдереНрдп рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ рдХрд┐ "рд╕реЗ рд╢рд┐рд▓рд╛рд▓реЗрдЦ рдмрджрд▓рддреЗ рд╕рдордп" 111 "рд╕реЗ" 888 "рдкрд╛рда рд▓реЗрдмрд▓ рдХреА рдЪреМрдбрд╝рд╛рдИ (UILabel) рдмрджрд▓ рдЧрдИ рд╣реИ рдФрд░ рдкрд╛рддреНрд░реЛрдВ рдХреЗ рдмреАрдЪ рдХреА рджреВрд░реА рдмрджрд▓ рдЧрдИ рд╣реИ, рдЬреЛ рд╣рдореЗрдВ рд╕реВрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ ... рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡рд╛рдВрдЫрд┐рдд рдлрд╝реЙрдиреНрдЯ рдорд┐рд▓рд╛ рдерд╛, рднрдЧрд╡рд╛рди рдХрд╛ рд╢реБрдХреНрд░ рд╣реИ, рдЕрдиреНрдпрдерд╛ 10 рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдмрдирд╛рдпрд╛, рддреИрдирд╛рдд рдФрд░ рдЕрджреНрдпрддрди рдХрд╛рдЙрдВрдЯрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдлрд╝реЙрдиреНрдЯ, рд▓реЗрдХрд┐рди рдЕрдлрд╕реЛрд╕, рдЗрддрдирд╛ рд╕рд░рд▓ рдирд╣реАрдВ рд╣реИ ("рд╡рд┐рдХрд╛рд╕" рдЦрдВрдб рдореЗрдВ рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдЗрд╕ рдлрд╝реЙрдиреНрдЯ рдХреЗ рд╕рд╛рде рдФрд░ рдХреНрдпрд╛ рджрд┐рд▓рдЪрд╕реНрдк рдерд╛)ред



рд╕реНрдкреНрд░рд╛рдЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рдереАред рд╣рдо рд╕рднреА рдиреЗ рдЗрд╕ рд╕реНрд╡рд┐рдЪ рдХрд╛ рдЖрдирдВрдж рд▓рд┐рдпрд╛:







рдбрд┐рдЬрд╛рдЗрдирд░ рдиреЗ рддреАрди рд╕рдмрд╕реЗ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдХрд╛рдо рдХрд┐рдпрд╛:





рдмрдо рд╡рд┐рд╕реНрдлреЛрдЯ рдПрдиреАрдореЗрд╢рди рдореЗрдВ рд▓рдЧрднрдЧ 40 рдлреНрд░реЗрдо рд╣реЛрддреЗ рд╣реИрдВ (рдиреАрдЪреЗ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдореЗрдВ рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡рд┐рд╕реНрдлреЛрдЯ рд╣реЛрддреЗ рд╣реИрдВ)ред







рдбрд┐рдЬрд╛рдЗрдирд░ рдФрд░ рдореБрдЭреЗ рдПрдХ рдФрд░ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ - рд╕реНрдерд┐рддрд┐ рддрддреНрд╡реЛрдВ рдФрд░ рд╕реНрдерд┐рддрд┐ рдХрд╛ рд╕рдВрдХреЗрддред рдЙрд╕рдХреЗ рд▓рд┐рдП, рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдорд╣рддреНрд╡рд╣реАрди рд╣реИ, рдмрд╛рдИрдВ рдУрд░ рдПрдХ рдкрд┐рдХреНрд╕реЗрд▓, рджрд╛рдИрдВ рдУрд░ рдПрдХ рдкрд┐рдХреНрд╕реЗрд▓ - рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ ... рд╡рд╣ рд╢рд╛рд╕рдХреЛрдВ рдХреЗ рдмрд┐рдирд╛ рд╕рдм рдХреБрдЫ рдЦреАрдВрдЪрддрд╛ рд╣реИ, рдРрд╕реЗ рд░рдЪрдирд╛рддреНрдордХ рд╡реНрдпрдХреНрддрд┐ :)

рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдиреЗ рдореБрдЭреЗ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдХрд┐рд╕реА рддрд░рд╣ рдЗрд╕реЗ рд╕реНрдерд╛рди рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдореБрдЭреЗ рдХрдо рд╕реЗ рдХрдо рдХреБрдЫ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ / рдЖрдХрд╛рд░реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред



рдпрд╣ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдирд┐рдХрд▓рд╛:







рдпрд╣ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдХреБрдЫ рдЧрд▓рдд рд╣реИ, рдРрд╕реА рднрд╛рд╡рдирд╛ рдореБрдЭреЗ рдирд╣реАрдВ рдЫреЛрдбрд╝рддреА рд╣реИред



рдЖрд╡рд╛рдЬрд╝





рдбрд┐рдЬрд╛рдЗрдирд░ рдХреЛ рдзреНрд╡рдирд┐рдпреЛрдВ рд╕реЗ рднреА рдирд┐рдкрдЯрдирд╛ рдкрдбрд╝рд╛ред рд╣рдореЗрдВ рдПрдХ рдЙрдкрдпреБрдХреНрдд рд╕рд╛рдЗрдЯ рдорд┐рд▓реА www.freesound.org рдФрд░ рдХреБрдЫ рдзреНрд╡рдирд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ (рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ - рдХреНрд░реЙрдкрд┐рдВрдЧ, рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ:







рдбрд┐рдЬрд╝рд╛рдЗрди





рдпрд╣ рд╕рдм рд╕реНрдЯреЛрд░реАрдмреЛрд░реНрдб рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реБрдЖ:







рдпрд╣ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛:







рдбрд┐рдЬрд╛рдЗрди, рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ, рдбрд┐рдЬрд╛рдЗрди ... рдкреВрд░рд╛ рдХрдЪрд░рд╛ред рдЖрдк рдПрдХ рд╡рд╛рдпрд░рдлреНрд░реЗрдо рдмрдирд╛рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЖрдк рдЗрд╕реЗ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛, рддрд░реНрдХ, рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдЖрджрд┐ рдХреЛ рдЪрд╛рд▓реВ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рд╡рд┐рдХрд╛рд╕ рдХреА рд╢реБрд░реБрдЖрдд рд╕реЗ рдЕрдВрдд рддрдХ, рдореЗрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рдВрд░рдЪрдирд╛ рдирд╣реАрдВ рдмрджрд▓реА рд╣реИ, рд▓реЗрдХрд┐рди рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХреА рд╕рд╣рднрд╛рдЧрд┐рддрд╛ рдпреЛрдЬрдирд╛рдПрдВ рдФрд░ рддрд░реНрдХ рдХрдИ рдмрд╛рд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред



рдЪрд▓рд┐рдП рдореБрдЦреНрдп рд╕реНрдХреНрд░реАрди рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рджреЛ рдмрдЯрди, рдЯреИрдкреВ рдЧреЗрдо рд╕реНрдХреНрд░реАрди рдФрд░ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВред рдбреНрд░рдо рд░реЛрд▓ ... рд╕рд╛рдЙрдВрдб рдЕрднреА рднреА рдЯреИрдк рдкрд░ рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рдпрд╛ рддреЛ SystemSound рдпрд╛ AVAudioPlayer (рдпрд╛ рдХреБрдЫ рдФрд░) рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдкреНрд░реАрд▓реЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдХреБрдЫ рдЕрдиреНрдп рд╡рд░реНрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рд╕рднреА рдзреНрд╡рдирд┐рдпреЛрдВ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реЛрдЧрд╛ред рдФрд░ рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╣реБрдЖ - BGAudioPreloaderред



@interface BGResourcePreloader : NSObject <AVAudioPlayerDelegate> + (instancetype)shared; //         - (void)preloadAudioResource:(NSString *)name; //         name  //  type // nil -    - (AVAudioPlayer *)playerFromGameConfigForResource:(NSString *)name; //         name  //  type.      - (AVAudioPlayer *)playerForResource:(NSString *)name; @end
      
      







рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

 // // BGResourcePreloader.m // Miner // // Created by AndrewShmig on 4/5/14. // Copyright (c) 2014 Bleeding Games. All rights reserved. // #import "BGResourcePreloader.h" #import "BGSettingsManager.h" @implementation BGResourcePreloader { NSMutableDictionary *_data; } #pragma mark - Class methods static BGResourcePreloader *shared; + (instancetype)shared { static dispatch_once_t once; dispatch_once(&once, ^{ shared = [[self alloc] init]; shared->_data = [[NSMutableDictionary alloc] init]; }); return shared; } #pragma mark - Instance methods - (void)preloadAudioResource:(NSString *)name { dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ NSString *soundPath = [[NSBundle mainBundle] pathForResource:name ofType:nil]; NSURL *soundURL = [NSURL fileURLWithPath:soundPath]; AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithContentsOfURL:soundURL error:nil]; [player prepareToPlay]; _data[name] = player; }); } - (AVAudioPlayer *)playerFromGameConfigForResource:(NSString *)name { //   if ([BGSettingsManager sharedManager].soundStatus == BGMinerSoundStatusOff) return nil; return [self BGPrivate_playerForResource:name]; } - (AVAudioPlayer *)playerForResource:(NSString *)name { return [self BGPrivate_playerForResource:name]; } #pragma mark - AVAudioDelegate - (void)audioPlayerBeginInterruption:(AVAudioPlayer *)player { [player stop]; player.currentTime = 0.0; } #pragma mark - Private method - (AVAudioPlayer *)BGPrivate_playerForResource:(NSString *)name { return (AVAudioPlayer *) _data[name]; } @end
      
      







рдореБрдЦреНрдп рд╕реНрдХреНрд░реАрди рдкрд░ рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИред



рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╕реНрдХреНрд░реАрди рдкрд░ рдЬрд╛рдПрдВред



рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рддреБрд░рдВрдд рдПрдХ UISegmentedControl (рд╕рдорд╛рди) рдФрд░ рдПрдХ рд╕реНрд╡рд┐рдЪ (UIButton) рд╣реИред

рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ UISegmentedControl рдХреЗ рд╕рд╛рде рдПрдХ рдмрд╛рдЗрдХ рд▓рд┐рдЦрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ рдмрд╣реБрдд рдзреНрдпрд╛рди рд╕реЗ StackOverflow рдХреЛ рдЕрдлрд╡рд╛рд╣ рдмрддрд╛рдпрд╛ рдФрд░ рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рдХрд┐ рдпрд╣ рдмреЗрд╣рддрд░ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдм рдХреЗ рдмрд╛рдж рдПрдХ рдмрд╛рдЗрдХ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП ... рдХреБрдЫ рднреА рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдЫ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ (рд╕реНрд╡рд┐рдЪ рдХрд╛ рддрдВрддреНрд░ рдРрд╕рд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдкрд░ рдЕрдкрдиреА рдЙрдВрдЧрд▓рд┐рдпрд╛рдВ рднреА рд╣рд┐рд▓рд╛рдПрдВ рд╕рдХреНрд░рд┐рдп рд╡рд┐рдХрд▓реНрдк рдмрджрд▓рддрд╛ рд╣реИ рдФрд░ рди рдХреЗрд╡рд▓ рдЙрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЖрдкрдиреЗ рдЕрдкрдиреА рдЙрдВрдЧрд▓реА рдЙрдард╛рдИ рдереА, рдмрд▓реНрдХрд┐ рдпрд╣ рднреА рдХрд┐ рдЖрдкрдХреА рдЙрдВрдЧрд▓реА рдЕрдм рдХрд╣рд╛рдВ рд╣реИ)ред



рдореБрдЦреНрдп рд╕реНрд╡рд┐рдЪ рд░рд╛рдЬреНрдп рдкрд░рд┐рд╡рд░реНрддрди рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ:



 #pragma mark - Touches - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { [self updateSegmentedControlUsingTouches:touches]; } - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { [self updateSegmentedControlUsingTouches:touches]; } - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { [self updateSegmentedControlUsingTouches:touches]; } #pragma mark - Private method - (void)updateSegmentedControlUsingTouches:(NSSet *)touches { UITouch *touch = [touches anyObject]; CGPoint touchPoint = [touch locationInView:self]; for (NSUInteger i = 0; i < _selectedSegments.count; i++) { CGRect rect = ((UIImageView *) _selectedSegments[i]).frame; if (CGRectContainsPoint(rect, touchPoint)) { if (self.selectedSegmentIndex != i) { //    -      //  [[[BGResourcePreloader shared] playerFromGameConfigForResource:@"buttonTap.mp3"] play]; } self.selectedSegmentIndex = i; break; } } [_target performSelector:_action withObject:@(_selectedSegmentIndex)]; }
      
      







рдХреЛрдИ рд╕рд╡рд╛рд▓ рдирд╣реАрдВ рд╣реИред



рд╣рдорд╛рд░рд╛ рдкрд╕рдВрджреАрджрд╛ рддрддреНрд╡ рд╕реНрд╡рд┐рдЪ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдПрдХ рдирд┐рдпрдорд┐рдд рдмрдЯрди рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЗрд╕рдиреЗ рдореБрдЭреЗ рд▓рдЧрд╛рддрд╛рд░ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рд╕рдВрд╡реЗрджрдирд╛рдПрдВ рд╕рдорд╛рди рдирд╣реАрдВ рдереАрдВ рдФрд░ рдореИрдВ рдпрд╣ рдорд╣рд╕реВрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдерд╛ рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред



рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдореБрдЭреЗ рд░рд╛рдЬреНрдпреЛрдВ рдХреЗ рдмреАрдЪ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрди рдХреЛрдб рдкреНрд░рд╛рдкреНрдд рд╣реБрдЖ:

 #pragma mark - Touches - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { //      } - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { BGLog(); [self updateActiveRegionUsingTouches:touches]; if ((self.isOn && self.activeRegion == BGUISwitchLeftRegion) || (!self.isOn && self.activeRegion == BGUISwitchRightRegion)) { [super touchesMoved:touches withEvent:event]; [self playSwitchSound]; [_target performSelector:_action withObject:self]; self.on = !self.on; } } - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { BGLog(); [self updateActiveRegionUsingTouches:touches]; if ((self.isOn && self.activeRegion == BGUISwitchLeftRegion) || (!self.isOn && self.activeRegion == BGUISwitchRightRegion)) { [super touchesEnded:touches withEvent:event]; [self playSwitchSound]; [_target performSelector:_action withObject:self]; self.on = !self.on; } } - (void)updateActiveRegionUsingTouches:(NSSet *)touches { UITouch *touch = [touches anyObject]; CGPoint touchPoint = [touch locationInView:self]; CGRect leftRect = CGRectMake(0, 0, self.bounds.size.width / 2, self.bounds.size.height); CGRect rightRect = CGRectMake(self.bounds.size.width / 2, 0, self.bounds.size.width / 2, self.bounds.size.height); if (CGRectContainsPoint(leftRect, touchPoint)) { _activeRegion = BGUISwitchLeftRegion; } else if (CGRectContainsPoint(rightRect, touchPoint)) { _activeRegion = BGUISwitchRightRegion; } else { _activeRegion = BGUISwitchNoneRegion; } }
      
      







рд╣рд░ рдмрд╛рд░ рдЬрдм рд╕реНрдерд┐рддрд┐ рдмрджрд▓рддреА рд╣реИ, рддреЛ рд╣рдо рд╕реЗрдЯрд┐рдВрдЧ рдкреНрд░рдмрдВрдзрдХ рдореЗрдВ рдирдП рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдорд╛рди рдХреЛ рд╕рд╣реЗрдЬрддреЗ рд╣реИрдВред рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдкреНрд░рдмрдВрдзрдХ (рдЬреЛ рдПрдХ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд╣реИ) рдЪрдордХрджрд╛рд░ рдирд┐рдХрд▓рд╛, рдлрд┐рд░ рдореИрдВрдиреЗ рдПрдХ рдирдпрд╛ рд▓рд┐рдЦрд╛, рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ рдЗрд╕реЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред



рдпрд╣рд╛рдБ рдирдИ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдкреНрд░рдмрдВрдзрдХ рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдХреЛрдб рд╣реИ:

 static NSString* const kBGSettingManagerUserDefaultsStoreKeyForMainSettings = @"kBGSettingsManagerUserDefaultsStoreKeyForMainSettings"; static NSString* const kBGSettingManagerUserDefaultsStoreKeyForDefaultSettings = @"kBGSettingsManagerUserDefaultsStoreKeyForDefaultSettings"; // Class allows to work with app settings in a simple and flexible way. @interface BGSettingsManager : NSObject // Delimiters for setting paths. Defaults to "." (dot) character. @property (nonatomic, readwrite, strong) NSCharacterSet *pathDelimiters; // Boolean value which specifies if exception should be thrown if settings path // doesn't exist or they are incorrect. Defaults to YES. @property (nonatomic, readwrite, assign) BOOL throwExceptionForUnknownPath; + (instancetype)shared; // creates default settings which are not used as main settings until // resetToDefaultSettings method is called // example: [[BGSettingsManager shared] createDefaultSettingsFromDictionary:@{@"user":@{@"login":@"Andrew", @"password":@"1234"}}] - (void)createDefaultSettingsFromDictionary:(NSDictionary *)settings; // resets main settings to default settings - (void)resetToDefaultSettings; // clears/removes all settings - main and default - (void)clear; // adding new setting value for settingPath // example: [... setValue:@YES forSettingsPath:@"user.personalInfo.married"]; - (void)setValue:(id)value forSettingsPath:(NSString *)settingPath; // return setting value with specified type - (id)valueForSettingsPath:(NSString *)settingsPath; - (BOOL)boolValueForSettingsPath:(NSString *)settingsPath; - (NSInteger)integerValueForSettingsPath:(NSString *)settingsPath; - (NSUInteger)unsignedIntegerValueForSettingsPath:(NSString *)settingsPath; - (CGFloat)floatValueForSettingsPath:(NSString *)settingsPath; - (NSString *)stringValueForSettingsPath:(NSString *)settingsPath; - (NSArray *)arrayValueForSettingsPath:(NSString *)settingsPath; - (NSDictionary *)dictionaryValueForSettingsPath:(NSString *)settingsPath; - (NSData *)dataValueForSettingsPath:(NSString *)settingsPath; @end
      
      







рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рд╣рд┐рд╕реНрд╕рд╛:

 // // Copyright (C) 4/27/14 Andrew Shmig ( andrewshmig@yandex.ru ) // Russian Bleeding Games. All rights reserved. // // Permission is hereby granted, free of charge, to any person // obtaining a copy of this software and associated documentation // files (the "Software"), to deal in the Software without // restriction, including without limitation the rights to use, // copy, modify, merge, publish, distribute, sublicense, and/or // sell copies of the Software, and to permit persons to whom the // Software is furnished to do so, subject to the following // conditions: // // The above copyright notice and this permission notice shall be // included in all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES // OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. // IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE // FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN // CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. // #import "BGSettingsManager.h" @implementation BGSettingsManager { NSMutableDictionary *_defaultSettings; NSMutableDictionary *_settings; } #pragma mark - Class methods + (instancetype)shared { static dispatch_once_t once; static BGSettingsManager *shared; dispatch_once(&once, ^{ shared = [[self alloc] init]; shared->_pathDelimiters = [NSCharacterSet characterSetWithCharactersInString:@"."]; shared->_throwExceptionForUnknownPath = YES; [shared BGPrivateMethod_loadExistingSettings]; }); return shared; } #pragma mark - Instance methods - (void)createDefaultSettingsFromDictionary:(NSDictionary *)settings { _defaultSettings = [self BGPrivateMethod_deepMutableCopy:settings]; [self BGPrivateMethod_saveSettings]; } - (void)resetToDefaultSettings { _settings = [_defaultSettings mutableCopy]; [self BGPrivateMethod_saveSettings]; } - (void)clear { _settings = [NSMutableDictionary new]; _defaultSettings = [NSMutableDictionary new]; [self BGPrivateMethod_saveSettings]; } - (void)setValue:(id)value forSettingsPath:(NSString *)settingPath { NSArray *settingsPathComponents = [settingPath componentsSeparatedByCharactersInSet:self .pathDelimiters]; __block id currentNode = _settings; [settingsPathComponents enumerateObjectsUsingBlock:^(id pathComponent, NSUInteger idx, BOOL *stop) { id nextNode = currentNode[pathComponent]; BOOL nextNodeIsNil = (nextNode == nil); BOOL nextNodeIsDictionary = [nextNode isKindOfClass:[NSMutableDictionary class]]; BOOL lastPathComponent = (idx == [settingsPathComponents count] - 1); if ((nextNodeIsNil || !nextNodeIsDictionary) && !lastPathComponent) { [currentNode setObject:[NSMutableDictionary new] forKey:pathComponent]; } else if (idx == [settingsPathComponents count] - 1) { if ([value isKindOfClass:[NSNumber class]]) currentNode[pathComponent] = [value copy]; else currentNode[pathComponent] = [value mutableCopy]; } currentNode = currentNode[pathComponent]; }]; [self BGPrivateMethod_saveSettings]; } - (id)valueForSettingsPath:(NSString *)settingsPath { NSArray *settingsPathComponents = [settingsPath componentsSeparatedByCharactersInSet:self .pathDelimiters]; __block id currentNode = _settings; __block id valueForSettingsPath = nil; [settingsPathComponents enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { // we have a nil node for a path component which is not the last one // or a node which is not a leaf node if ((nil == currentNode && idx != [settingsPathComponents count]) || (currentNode != nil && ![currentNode isKindOfClass:[NSDictionary class]])) { [self BGPrivateMethod_throwExceptionForInvalidSettingsPath]; } NSString *key = obj; id nextNode = currentNode[key]; if (nil == nextNode) { *stop = YES; } else { if (![nextNode isKindOfClass:[NSMutableDictionary class]]) valueForSettingsPath = nextNode; } currentNode = nextNode; }]; return valueForSettingsPath; } - (BOOL)boolValueForSettingsPath:(NSString *)settingsPath { return [[self valueForSettingsPath:settingsPath] boolValue]; } - (NSInteger)integerValueForSettingsPath:(NSString *)settingsPath { return [[self valueForSettingsPath:settingsPath] integerValue]; } - (NSUInteger)unsignedIntegerValueForSettingsPath:(NSString *)settingsPath { return (NSUInteger) [[self valueForSettingsPath:settingsPath] integerValue]; } - (CGFloat)floatValueForSettingsPath:(NSString *)settingsPath { return [[self valueForSettingsPath:settingsPath] floatValue]; } - (NSString *)stringValueForSettingsPath:(NSString *)settingsPath { return (NSString *) [self valueForSettingsPath:settingsPath]; } - (NSArray *)arrayValueForSettingsPath:(NSString *)settingsPath { return (NSArray *) [self valueForSettingsPath:settingsPath]; } - (NSDictionary *)dictionaryValueForSettingsPath:(NSString *)settingsPath { return (NSDictionary *) [self valueForSettingsPath:settingsPath]; } - (NSData *)dataValueForSettingsPath:(NSString *)settingsPath { return (NSData *) [self valueForSettingsPath:settingsPath]; } - (NSString *)description { return [_settings description]; } #pragma mark - Private methods - (void)BGPrivateMethod_saveSettings { [[NSUserDefaults standardUserDefaults] setValue:_settings forKey:kBGSettingManagerUserDefaultsStoreKeyForMainSettings]; [[NSUserDefaults standardUserDefaults] setValue:_defaultSettings forKey:kBGSettingManagerUserDefaultsStoreKeyForDefaultSettings]; [[NSUserDefaults standardUserDefaults] synchronize]; } - (void)BGPrivateMethod_loadExistingSettings { id settings = [[NSUserDefaults standardUserDefaults] valueForKey:kBGSettingManagerUserDefaultsStoreKeyForMainSettings]; id defaultSettings = [[NSUserDefaults standardUserDefaults] valueForKey:kBGSettingManagerUserDefaultsStoreKeyForDefaultSettings]; _settings = (settings ? settings : [NSMutableDictionary new]); _defaultSettings = (defaultSettings ? defaultSettings : [NSMutableDictionary new]); } - (NSMutableDictionary *)BGPrivateMethod_deepMutableCopy:(NSDictionary *)settings { NSMutableDictionary *deepMutableCopy = [settings mutableCopy]; [settings enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { if ([obj isKindOfClass:[NSDictionary class]]) deepMutableCopy[key] = [self BGPrivateMethod_deepMutableCopy:obj]; else deepMutableCopy[key] = obj; }]; return deepMutableCopy; } - (void)BGPrivateMethod_throwExceptionForInvalidSettingsPath { if (self.throwExceptionForUnknownPath) [NSException raise:@"Invalid settings path." format:@"Some of your setting path components may intersect incorrectly or they don't exist."]; } @end
      
      







рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ рдФрд░, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдмрд╛рдж рдореЗрдВ рдкрд╛рдпрд╛ рдФрд░ рд╕рдордЭрд╛, рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ:

 // CODE -- begin BGSettingsManager *settingsManager = [BGSettingsManager shared]; [settingsManager createDefaultSettingsFromDictionary:@{ @"user": @{ @"info":@{ @"name": @"Andrew", @"surname": @"Shmig", @"age": @22 } } }]; [settingsManager resetToDefaultSettings]; [settingsManager setValue:@"+7 920 930 87 56" forSettingsPath:@"user.info.contacts.phone"]; NSLog(@"%@", settingsManager); [settingsManager clear]; NSLog(@"%@", settingsManager); // CODE - end
      
      







рдХрдВрд╕реЛрд▓ рдореЗрдВ рд╣рдореЗрдВ рдирд┐рдореНрди рдЖрдЙрдЯрдкреБрдЯ рдорд┐рд▓рддреЗ рд╣реИрдВ:



 2014-04-30 23:45:03.842 BGUtilityLibrary[13730:70b] { user = { info = { age = 22; contacts = { phone = "+7 920 930 87 56"; }; name = Andrew; surname = Shmig; }; }; } 2014-04-30 23:45:03.847 BGUtilityLibrary[13730:70b] { }
      
      







рдЧреЗрдо рд╕реНрдХреНрд░реАрди рдкрд░ рдЬрд╛рдПрдВред рдпрд╣ рд╕реНрдХреНрд░реАрди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореЗрд░реЗ рд▓рд┐рдП "рдЦреВрдиреА" рдмрди рдЧрдИ ... рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдмрд╣реБрдд рд╢реБрд░реБрдЖрдд рдореЗрдВ, рдЬрдм рдореИрдВрдиреЗ "рдкреНрд▓реЗ" рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд┐рдпрд╛ рдерд╛, рддреЛ рдЧреЗрдо рд╕реНрдХреНрд░реАрди рдкрд░ рдФрд░ рд╡рд╣рд╛рдБ рдПрдХ рджреГрд╢реНрдп рд╕рдВрдХреНрд░рдордг рд╣реЛ рдЧрдпрд╛ рдерд╛, рд╡реНрдпреВрдбрд╛рд▓реЙрдб рд╡рд┐рдзрд┐ рдореЗрдВ, рдПрдХ рдлрд╝реАрд▓реНрдб (SKSEN) рдЙрддреНрдкрдиреНрди рдФрд░ рднрд░рд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рджреЗрд░реА рдЗрддрдирд╛ рдмрдбрд╝рд╛ рдерд╛ рдХрд┐ рдореБрдЭреЗ рд╕рд╡рд╛рд▓ рдкреВрдЫрдирд╛ рдерд╛:







рджреЛрдиреЛрдВ рдкреНрд░рд╢реНрдиреЛрдВ рдХрд╛ рдЙрддреНрддрд░ "рдирд╣реАрдВ" рд╣реИред рдкрд╣рд▓рд╛ рд╕рд╡рд╛рд▓ рджреВрд╕рд░реЗ рдХреЗ рдмрд╛рдж рдЖрддрд╛ рд╣реИ ... рдкреВрд░реА рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ addChild: рд╡рд┐рдзрд┐ рдмреЗрд╣рдж рдзреАрдореА рдЧрддрд┐ рд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИ, рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдордВрдЪ рдкрд░ рдпрдерд╛рд╕рдВрднрд╡ рдХрдо рдиреЛрдбреНрд╕ рд░рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред рдПрдлрдкреАрдПрд╕, рд╡реИрд╕реЗ, рдореЗрд░реЗ рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдкрд░ 30 рд╕реЗ рдЕрдзрд┐рдХ рдХреЗ рд▓рд┐рдП рдКрдкрд░ рдирд╣реАрдВ рдЧрдпрд╛, рдбрд┐рд╡рд╛рдЗрд╕ рдиреЗ рд╕рд╛рдл 60 рджрд┐рдпрд╛ред



рд╡реИрдЬреНрдЮрд╛рдирд┐рдХ рдкреНрд░рд╣рд╛рд░ рд╡рд┐рдзрд┐ рдФрд░ SO рдкрд░ рдкреНрд░рд╢реНрди:

1. SKSpriteNode рдХреЛ рдмрдирд╛рд╡рдЯ рд╕реЗ рдирд┐рд░реНрдорд┐рдд рд╣реЛрдиреЗ рдореЗрдВ рдмрд╣реБрдд рд╕рдордп рд▓рдЧрддрд╛ рд╣реИ

2. рдЕрдЬреАрдм рдмрд╛рдд рдкрд╛рд░рджрд░реНрд╢реА рд╕реАрдорд╛рдУрдВ рдХреЗ рд╕рд╛рде SKSpriteNode рдХреЗ рд╕рд╛рде рд╣реЛрддрд╛ рд╣реИ (рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдХрд╛рдлреА рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдПрдХ рдмрд╣реБрдд рд╣реА рджрд┐рд▓рдЪрд╕реНрдк рдмрд┐рдВрджреБ)



рдореИрдВ рдЗрд╕ рддрдереНрдп рдкрд░ рдЖрдпрд╛ рдХрд┐ рдореИрдВрдиреЗ рдПрдХ рд╕рд┐рдВрдЧрд▓рдЯрди рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдЧреЗрдо рд╕реНрдХреНрд░реАрди рдмрдирд╛рдИ рд╣реИ, рдЬрд┐рд╕реЗ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдЖрд╡реЗрджрди рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдореИрджрд╛рди рдХреЗрд╡рд▓ рдШрд╛рд╕ рд╕реЗ рднрд░рд╛ рд╣реЛрддрд╛ рд╣реИ (рдиреАрдЪреЗ рдХреА рдкрд░рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдХрд┐рд╕реА рд╕реЗрд▓ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╣реА рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИ ... рдпрд╣ рдирд┐рд░реНрдгрдп рдкрд╣рд▓реЗ рд╕реЗ рднреА рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЦрджрд╛рди рдХреЛ рдирд╣реАрдВ рдорд╛рд░рдирд╛ рдЪрд╛рд╣рд┐рдП)ред

рд╕рднреА рд╕реНрдкреНрд░рд╛рдЗрдЯ рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдлрд┐рд░ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдлрд┐рд░ рд╕реЗ рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдореЗрдореЛрд░реА рдореЗрдВ рд▓реЛрдб рдХреА рдЧрдИ рдмрдирд╛рд╡рдЯ рдХреЗ рд╕рд╛рде рд╕реНрдкреНрд░рд╛рдЗрдЯ рдмрдирд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдмрд╣реБрдд рдзреАрдореА рд╣реЛ рдЧрдИ рд╣реИ рдФрд░ рд╕рд░рд▓ рдХреЙрдкреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреЛ рджреЗрддрд╛ рд╣реИред

рдЬрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рддреЛ рдзреНрд╡рдирд┐рдпрд╛рдБ рднреА рднрд░реА рдЬрд╛рддреА рд╣реИрдВ:

 //         NSArray *audioResources = @[@"switchON.mp3", @"switchOFF.mp3", @"flagTapOn.mp3", @"grassTap.mp3", @"buttonTap.mp3", @"flagTapOff.mp3", @"explosion.wav"]; for (NSString *audioName in audioResources) { [[BGResourcePreloader shared] preloadAudioResource:audioName]; }
      
      







рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдмрд╛рдж, рдХреНрд╖реЗрддреНрд░ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рд╕реНрдкреНрд░рд╛рдЗрдЯ рд╕реЗ рднрд░рд╛ рдФрд░ рднрд░рд╛ рд╣реБрдЖ рд╣реИ) рддрд╛рдХрд┐ рддреЗрдЬреА рд╕реЗ рд╕рдВрдХреНрд░рдордг рдХреЗ рджреМрд░рд╛рди рдХреЛрдИ рджреЗрд░реА рди рд╣реЛред



рдбрд┐рдЬрд╛рдЗрди рдЕрдиреБрднрд╛рдЧ рдореЗрдВ, рдореИрдВрдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдХрд┐ рдХрд╕реНрдЯрдо рдлреЛрдВрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЕрднреА рднреА рдордЬреЗрджрд╛рд░ рд╣реИ - рдпрд╣ рд╣реИред рди рдХреЗрд╡рд▓ рдлрд╝реЙрдиреНрдЯ рдирд╛рдо! = рдлрд╝реЙрдиреНрдЯ рдХреЗ рд╕рд╛рде рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо, рдлрд╝реЙрдиреНрдЯ рдХреЛ рдкреНрд░реАрд▓реЛрдб рдХрд┐рдП рдмрд┐рдирд╛ рднреА рдпрд╣ рд╕рдВрдХреНрд░рдордг рдХрд╛рдлреА рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдзреАрдорд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ (рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЗрдВрд╕реНрдЯреНрд░реВрдореЗрдВрдЯреНрд╕ рд╕реЗ рд╕рднреА рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рд╣рдЯрд╛ рджрд┐рдП рдЧрдП рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдЬрд╛рдВрдЪрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реЛрдЧрд╛)ред



рдореЗрд░рд╛ рдХреНрд╖реЗрддреНрд░ рдЗрд╕ рддрд░рд╣ рднрд░рд╛ (рдЙрддреНрдкрдиреНрди) рд╣реИ:

 - (void)generateFieldWithExcludedCellInCol:(NSUInteger)cellCol row:(NSUInteger)cellRow { BGLog(); //   NSMutableArray *cells = [NSMutableArray new]; //     _field = [NSMutableArray new]; for (NSUInteger i = 0; i < self.cols; i++) { [_field addObject:[NSMutableArray new]]; for (NSUInteger j = 0; j < self.rows; j++) { [_field[i] addObject:@(BGFieldEmpty)]; //    ,    "" if (!(i == cellCol && j == cellRow)) [cells addObject:@(i * kBGPrime + j)]; } } //      sranddev(); for (NSUInteger i = 0; i < self.bombs; i++) { NSUInteger index = arc4random() % [cells count]; NSUInteger randomCell = [cells[index] unsignedIntegerValue]; NSUInteger col = randomCell / kBGPrime; NSUInteger row = randomCell % kBGPrime; _field[col][row] = @(BGFieldBomb); //    [cells removeObjectAtIndex:index]; } //   _x = @[@0, @1, @1, @1, @0, @(-1), @(-1), @(-1)]; _y = @[@(-1), @(-1), @0, @1, @1, @1, @0, @(-1)]; for (NSUInteger i = 0; i < self.cols; i++) { for (NSUInteger j = 0; j < self.rows; j++) { NSInteger cellValue = [_field[i][j] integerValue]; NSInteger count = 0; if (cellValue == BGFieldEmpty) { for (NSUInteger k = 0; k < _x.count; k++) { NSInteger newY = i + [_x[k] integerValue]; NSInteger newX = j + [_y[k] integerValue]; if (newX >= 0 && newY >= 0 && newX < self.rows && newY < self.cols) { if ([_field[(NSUInteger) newY][(NSUInteger) newX] integerValue] == BGFieldBomb) { count++; } } } _field[i][j] = @(count); } } } }
      
      







рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, SKAction рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд╡рд┐рд╡рд░рдг рдереЗ, рдЬреЛ рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд▓рдЧ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рд╕реИрдкрд░ рдореЗрдВ рдореБрдЭреЗ рдкрдардиреАрдп рдХреЛрдб рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛, рд▓реЗрдХрд┐рди рдЕрдлрд╕реЛрд╕ ... рдпрд╣ рдмрдбрд╝реА рдореБрд╢реНрдХрд┐рд▓ рд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ред



рдРрдк рд╕реНрдЯреЛрд░



рд▓рдШреБ рдФрд░ рд╕реНрдкрд╖реНрдЯ:







рдЕрдВрдд



рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рд╕рднреА рдХрд╛ рдзрдиреНрдпрд╡рд╛рджред



рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдХреЛрдИ рднреА рдкреНрд░рд╢реНрди рдФрд░ рдореБрдЭреЗ рдЙрдирдХрд╛ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред рдпрджрд┐ рдЖрдк рд▓реЗрдЦ рдореЗрдВ рдЗрдВрдЧрд┐рдд рдХрд░рдирд╛ рднреВрд▓ рдЧрдП - рд▓рд┐рдЦрдирд╛ред



рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдореИрдВ рдкреВрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЦреЛрд▓рдиреЗ рдФрд░ рдЗрд╕реЗ GitHub рдкрд░ рдбрд╛рд▓рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рдЪреАрдЬреЛрдВ рдХреЛ рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред



All Articles