рдЖрдИрдУрдПрд╕ рдЧреЗрдо рдореЗрдВ рдЧреЗрдо рд╕реЗрдВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдорд▓реНрдЯреАрдкреНрд▓реЗрдпрд░ рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдкрд░ рдПрдХ рдорд╣рд╛рди рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХрд╛ рдЕрдиреБрд╡рд╛рджред рд▓реЗрдЦрдХ рдХреА рд╕рд╛рдЗрдЯ рдореЗрдВ рдиреМрд╕рд┐рдЦрд┐рдпрд╛ рдЧреЗрдо рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреА рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рд╕рдмрдХ рд╣реИрдВредрдЬрд┐рд╕ рдЧреЗрдо рдкрд░ рдЖрдк рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╡рд╣ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рдпрд╣ рдПрдХ рджреМрдбрд╝ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХреБрддреНрддрд╛ рдФрд░ рдмрдЪреНрдЪрд╛ рдкреНрд░рддрд┐рднрд╛рдЧреА рд╣реИрдВред рдЬреАрддрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рддрдиреА рдЬрд▓реНрджреА рд╣реЛ рд╕рдХреЗ рдЯреИрдк рдХрд░реЗрдВ!
рдпрд╣ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ рдЖрдк Cocos2D рдХреА рдореВрд▓ рдмрд╛рддреЗрдВ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВред рдЕрдиреНрдпрдерд╛, рдореИрдВ рдЖрдкрдХреЛ рдЕрдиреНрдп рдХреЛрдХреЛрд╕ 2 рдбреА рдкрд╛рдареЛрдВ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ рдЬреЛ рдЖрдк
рдпрд╣рд╛рдВ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдиреЛрдЯ: рдЖрд╡реЗрджрди рдореЗрдВ рдЧреЗрдо рд╕реЗрдВрдЯрд░ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рдкрдВрдЬреАрдХреГрдд рдЖрдИрдУрдПрд╕ рдбреЗрд╡рд▓рдкрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЖрдкрдХреЛ рдХрдо рд╕реЗ рдХрдо рдПрдХ рднреМрддрд┐рдХ рдЖрдИрдУрдПрд╕ рдбрд┐рд╡рд╛рдЗрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдПрдХ рдкреНрд░рддрд┐ рдХреЗ рд▓рд┐рдП рдФрд░ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдЕрдиреНрдп)ред рдЕрдВрдд рдореЗрдВ, рдЖрдкрдХреЛ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдХрдо рд╕реЗ рдХрдо рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЧреЗрдо рд╕реЗрдВрдЯрд░ рдЦрд╛рддреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ (рдЖрдк рдЪрд┐рдВрддрд╛ рди рдХрд░реЗрдВ, рдЖрдк рдЙрдиреНрд╣реЗрдВ рдореБрдлреНрдд рдореЗрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдХреЗрд╡рд▓ рдЖрдкрдХреЛ рдПрдХ рдЕрд▓рдЧ рдИ-рдореЗрд▓ рдкрддреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)ред
рдХреНрдпрд╛ рдЖрдк рддреИрдпрд╛рд░ рд╣реИрдВ? рдлрд┐рд░ рдЬрд╛рдУ!
рддреЛ рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ
рдпрд╣ рдкрд╛рда рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЧреЗрдо рдореЗрдВ рдорд▓реНрдЯреАрдкреНрд▓реЗрдпрд░ рдШрдЯрдХ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░рддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдЧреЗрдо рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рддрд░реНрдХ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдЗрд╕ рдкрд╛рда рдХреЗ рд▓рдХреНрд╖реНрдп рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИ, рдореИрдВрдиреЗ рдПрдХ
рд░рд┐рдХреНрдд рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЬрд┐рд╕рдореЗрдВ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд┐рдП рдмрд┐рдирд╛ рдЧреЗрдо рдХреЛрдб рд╢рд╛рдорд┐рд▓ рд╣реИред
рдХреЛрдб рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ рдФрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЪрд▓рд╛рдПрдВред рдЖрдкрдХреЛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:

рдЦреЗрд▓ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ рдФрд░ рдХреЛрдб рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЯрд┐рдкреНрдкрдгреА рдХреА рд╣реИред рдЗрд╕реЗ рджреЗрдЦреЗрдВ рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рд╕рдм рдХреБрдЫ рдЖрдкрдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рд╣реИред
рдЧреЗрдо рд╕реЗрдВрдЯрд░ рдЪрд╛рд▓реВ рдХрд░реЗрдВ
рдлрд┐рд▓рд╣рд╛рд▓ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рд╕рд░рд▓ рдЧреЗрдо рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдЦреЗрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдЗрд╕реЗ рдЕрдХреЗрд▓реЗ рдЦреЗрд▓рдирд╛ рдмрд╣реБрдд рдЙрдмрд╛рдК рд╣реИ! рдЧреЗрдо рд╕реЗрдВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛрд╕реНрддреЛрдВ рдХреЛ рдЕрдкрдиреЗ рд╕рд╛рде рдЦреЗрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдордВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдЦреЗрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдЪ рдлрд╛рдЗрдВрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдордЬреЗрджрд╛рд░ рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдЖрдк рдЧреЗрдо рд╕реЗрдВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ, рдЖрдкрдХреЛ рджреЛ рдХрд╛рдо рдХрд░рдиреЗ рд╣реЛрдВрдЧреЗ:
- рдРрдк рдЖрдИрдбреА рдмрдирд╛рдПрдВ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ;
- рдЖрдИрдЯреНрдпреВрдиреНрд╕ рдХрдиреЗрдХреНрдЯ рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВред
рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред
App ID рдмрдирд╛рдПрдВ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ
рдкрд╣рд▓рд╛ рдХрджрдо рдРрдк рдЖрдИрдбреА рдмрдирд╛рдирд╛ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП,
iOS рджреЗрд╡ рдХреЗрдВрджреНрд░ , рдФрд░ рд╡рд╣рд╛рдБ рд╕реЗ, iOS рдкреНрд░реЛрд╡рд┐рдЬрдирд┐рдВрдЧ рдкреЛрд░реНрдЯрд▓ рдкрд░ рд▓реЙрдЧ рдЗрди рдХрд░реЗрдВред рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдХреА рддрд░рд╣ рд╣реА рдРрдк рдЖрдИрдбреА рдЯреИрдм рдЦреЛрд▓реЗрдВ рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдРрдк рдЖрдИрдбреА рдмрдирд╛рдПрдВ:

рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣рд┐рд╕реНрд╕рд╛ рдмрдВрдбрд▓ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдЕрд░реНрдерд╛рдд, рдпрд╣ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛ рд╕рдХрддрд╛ рд╣реИ!) рдПрдХ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реИ рдЕрдкрдиреЗ рдбреЛрдореЗрди рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдирд╛рдо рдорд┐рд▓рд╛рди рд╕реЗ рдмрдЪреЗрдВред
рдЬрдм рдЖрдк рдкреВрд░рд╛ рдХрд░ рд▓реЗрдВ, рддреЛ рд╕рдмрдорд┐рдЯ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рдлрд┐рд░ рдХреИрдЯ рд░реЗрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЦреЛрд▓реЗрдВ, рд╕рдВрд╕рд╛рдзрди \ Info.plist рдЪреБрдиреЗрдВ (
рдзреНрдпрд╛рди рджреЗрдВ: Xcode рдХреЗ рдмрд╛рдж рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдпрд╣ рдлрд╝рд╛рдЗрд▓ рд╕рд╣рд╛рдпрдХ рдлрд╝рд╛рдЗрд▓ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ рдФрд░ рдЗрд╕реЗ% Project_name% -Info.plist рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ) рдФрд░ рдмрдВрдбрд▓ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЛ iOS рдкреНрд░реЛрд╡рд┐рдЬрдирд┐рдВрдЧ рдкреЛрд░реНрдЯрд▓ рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдП рдЧрдП рдПрдХ рдореЗрдВ рдмрджрд▓реЗрдВред рдЬреИрд╕рд╛ рдХрд┐ рдиреАрдЪреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЖрдк рдПрдХ рдЕрд▓рдЧ рдорд╛рди рджрд░реНрдЬ рдХрд░реЗрдВрдЧреЗ):

рдФрд░ рдЖрдЦрд┐рд░реА рдмрд╛рддред Xcode рдХреА рдУрд░ рд╕реЗ рдХрд┐рд╕реА рднреА рдкрд░реЗрд╢рд╛рдиреА рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрди рдЪрд░рдгреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ:
- рдЕрдкрдиреЗ рдбрд┐рд╡рд╛рдЗрд╕ рдпрд╛ рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рд╕реЗ рдЖрд╡реЗрджрди рдХреА рд╕рднреА рдкреНрд░рддрд┐рдпрд╛рдВ рдирд┐рдХрд╛рд▓реЗрдВ;
- рдпрджрд┐ рдпрд╣ рдЪрд▓ рд░рд╣рд╛ рд╣реИ рддреЛ рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВ;
- рд░рди рдкреНрд░реЛрдЬреЗрдХреНрдЯ \ рдХреНрд▓реАрдиред
рдмрдзрд╛рдИ рд╣реЛ, рдЕрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рдРрдк рдХреЗ рд▓рд┐рдП рдРрдк рдЖрдИрдбреА рд╣реИ, рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ! рдЕрдм рдЖрдк рдЖрдИрдЯреНрдпреВрдиреНрд╕ рдХрдиреЗрдХреНрдЯ рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЧреЗрдо рд╕реЗрдВрдЯрд░ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЖрдИрдЯреНрдпреВрдиреНрд╕ рдХрдиреЗрдХреНрдЯ рдореЗрдВ рдЖрд╡реЗрджрди рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░реЗрдВ
рдЕрдЧрд▓рд╛ рдХрджрдо
рдЖрдИрдЯреНрдпреВрдиреНрд╕ рдХрдиреЗрдХреНрдЯ рдореЗрдВ рд▓реЙрдЧ рдЗрди рдХрд░рдирд╛ рдФрд░ рдПрдХ рдирдпрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрдВрдЬреАрдХреГрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдПрдХ рдмрд╛рд░ рдЬрдм рдЖрдк iTunes рдХрдиреЗрдХреНрдЯ рдореЗрдВ рд▓реЙрдЧ рдЗрди рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░реЗрдВ рдЪреБрдиреЗрдВ, рдлрд┐рд░ рдКрдкрд░реА рдмрд╛рдИрдВ рдУрд░ рдиреАрд▓реЗ рдЬреЛрдбрд╝реЗрдВ рдирдП рдРрдк рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдирд╛рдо рджрд░реНрдЬ рдХрд░реЗрдВ, SKU рдирдВрдмрд░ рдФрд░ рдмрдВрдбрд▓ рд╕реИрдВрдкрд▓ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВред

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

рдКрдкрд░реА рджрд╛рдИрдВ рдУрд░ рдиреАрд▓реЗ "рдЧреЗрдо рд╕реЗрдВрдЯрд░ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░реЗрдВ" рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ, рдлрд┐рд░ "рд╕рдХреНрд╖рдо рдХрд░реЗрдВ" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рдЙрд╕рдХреЗ рдмрд╛рдж "Done" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рдпрд╣ рд╕рдм, рдЧреЗрдо рд╕реЗрдВрдЯрд░ рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рд╢рд╛рдорд┐рд▓ рд╣реИ, рдФрд░ рдЖрдк рдХреЛрдб рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ!
рд╡реИрд╕реЗ, "рдЧреЗрдо рд╕реЗрдВрдЯрд░ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░реЗрдВ" рдЕрдиреБрднрд╛рдЧ рдореЗрдВ, рдЖрдк рд▓реАрдбрд░рдмреЛрд░реНрдб рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЙрдкрд▓рдмреНрдзрд┐рдпреЛрдВ рдХрд╛ рдкреНрд░рдмрдВрдзрди рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдкрд╛рда рдореЗрдВ рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдкрд░ рдЪрд░реНрдЪрд╛ рдирд╣реАрдВ рдХреА рдЬрд╛рдПрдЧреАред
рд╕реНрдерд╛рдиреАрдп рдЦрд┐рд▓рд╛рдбрд╝реА рдкреНрд░рд╛рдзрд┐рдХрд░рдг: рд╕рд┐рджреНрдзрд╛рдВрдд
рдЬрдм рдЦреЗрд▓ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдкрд╣рд▓рд╛ рдХрджрдо рд╕реНрдерд╛рдиреАрдп рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЛ рдЕрдзрд┐рдХреГрдд рдХрд░рдирд╛ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдкреНрд░рдорд╛рдгрд┐рдХрддрд╛ рдХреЗ рд╕рд╛рде рдХреЙрд▓ рдХрд░рдирд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЪрд╛рд╣реЗрдВ, рддреЛ рдЖрдк рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рдХреЛрдб рдХрд╛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдмреНрд▓реЙрдХ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд▓реЗрдХрд┐рди рдПрдХ рддрд░рдХреАрдм рд╣реИред рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХрд╛ рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЧреЗрдо рд╕реЗрдВрдЯрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд░ рдЬрд╛рдПрдВ, рд╡рд╣рд╛рдВ рд╕реЗ рд▓реЙрдЧ рдЗрди рдХрд░реЗрдВ рдФрд░ рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВред
рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреА рд╕реНрдерд┐рддрд┐ рдХрдм рдмрджрд▓рддреА рд╣реИред рдЖрдк "рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдкрд░рд┐рд╡рд░реНрддрд┐рдд" рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдХреЗ рд▓рд┐рдП рдкрдВрдЬреАрдХрд░рдг рдХрд░рдХреЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рддреЛ, рдПрдХ рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЛ рдЕрдзрд┐рдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рд╕рдХреА рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
- рдЧреЗрдо рд╕реЗрдВрдЯрд░ рдХреЛрдб рдХреЛ рдПрдХ рд╕реНрдерд╛рди рдкрд░ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд┐рдВрдЧрд▓рдЯрди рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ ( рд▓рдЧрднрдЧред рдЕрдиреБрд╡рд╛рдж: рд╕рд┐рдВрдЧрд▓рдЯрди рдПрдХ рдбрд┐рдЬрд╝рд╛рдЗрди рдкреИрдЯрд░реНрди рд╣реИ рдЬреЛ рдЗрд╕ рдмрд╛рдд рдХреА рдЧрд╛рд░рдВрдЯреА рджреЗрддрд╛ рд╣реИ рдХрд┐ рдХреНрд▓рд╛рд╕ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдЙрджрд╛рд╣рд░рдг рд╣реИ рдФрд░ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЛ рд╡реИрд╢реНрд╡рд┐рдХ рдПрдХреНрд╕реЗрд╕ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ);
- рдЬрдм рд╕рд┐рдВрдЧрд▓рдЯрди рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ "рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдкрд░рд┐рд╡рд░реНрддрд┐рдд" рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрдВрдЬреАрдХреГрдд рд╣реЛрдЧрд╛;
- рдЦреЗрд▓ рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЛ рдЕрдзрд┐рдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рдВрдЧрд▓рдЯрди рдСрдмреНрдЬреЗрдХреНрдЯ рд╡рд┐рдзрд┐ рдХреЛ рдмреБрд▓рд╛рдПрдЧрд╛;
- рдЬрдм рдХреЛрдИ рдЦрд┐рд▓рд╛рдбрд╝реА рд▓реЙрдЧ рдЗрди рдХрд░рддрд╛ рд╣реИ рдпрд╛ рд▓реЙрдЧ рдЖрдЙрдЯ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдСрдереЗрдВрдЯрд┐рдХреЗрд╢рди рдмрджрд▓реЗ рд╣реБрдП рдлрдВрдХреНрд╢рди рдореЗрдВ рдХреЙрд▓рдмреИрдХ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛;
- рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдЯреНрд░реИрдХ рдХрд░реЗрдЧрд╛ рдпрджрд┐ рдЦрд┐рд▓рд╛рдбрд╝реА рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд▓реЙрдЧ рдЗрди рд╣реИред
рд╕реНрдерд╛рдиреАрдп рдЦрд┐рд▓рд╛рдбрд╝реА рдкреНрд░рд╛рдзрд┐рдХрд░рдг: рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рдХреИрдЯ рд░реЗрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ, рдПрдХ рдирдИ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдВ, iOS \ рдХреЛрдХреЛ рдЯрдЪ \ Objective-C рд╡рд░реНрдЧ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ, рдФрд░ рдЕрдЧрд▓рд╛ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рдЙрдкрд╡рд░реНрдЧ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ NSObject рджрд░реНрдЬ рдХрд░реЗрдВ, рдЕрдЧрд▓рд╛ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░ рдирдП рд╡рд░реНрдЧ рдХреЛ GCHelper рдирд╛рдо рджреЗрдВ, рд╕рдорд╛рдкреНрдд рдХрд░реЗрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рдЕрдЧрд▓рд╛, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЗ рд╕рд╛рде GCHelper.h рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:
#import <Foundation/Foundation.h> #import <GameKit/GameKit.h> @interface GCHelper : NSObject { BOOL gameCenterAvailable; BOOL userAuthenticated; } @property (assign, readonly) BOOL gameCenterAvailable; + (GCHelper *)sharedInstance; - (void)authenticateLocalUser; @end
рдпрд╣ рдХреЛрдб GameKit рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЖрдпрд╛рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рджреЛ рдмреВрд▓рд┐рдпрди рдЪрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддрд╛ рд╣реИред рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдЧреЗрдо рд╕реЗрдВрдЯрд░ рдХреА рдЙрдкрд▓рдмреНрдзрддрд╛ рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЦрд┐рд▓рд╛рдбрд╝реА рдХрдм рдЕрдзрд┐рдХреГрдд рд╣реИред
рдпрд╣ рднреА рдмрдирд╛рддрд╛ рд╣реИ: рдПрдХ рд╕рдВрдкрддреНрддрд┐ рддрд╛рдХрд┐ рдЧреЗрдо рд░рд┐рдкреЛрд░реНрдЯ рдХрд░ рд╕рдХреЗ рдХрд┐ рдЧреЗрдо рд╕реЗрдВрдЯрд░ рдЙрдкрд▓рдмреНрдз рд╣реИ; рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреА рдЖрд╡реГрддреНрддрд┐ рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдерд┐рд░ рд╡рд┐рдзрд┐ рдФрд░ рд╕реНрдерд╛рдиреАрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЕрдзрд┐рдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреНрдп рд╡рд┐рдзрд┐ (рдЬреЛ рдХрд┐ рдЖрд╡реЗрджрди рд╢реБрд░реВ рд╣реЛрдиреЗ рдкрд░ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛)ред
рдЗрд╕рдХреЗ рдмрд╛рдж, GCHelper.m рдкрд░ рдЬрд╛рдПрдВ рдФрд░ @implementation рдХреЗ рдЕрдВрджрд░ рдирд┐рдореНрди рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ:
@synthesize gameCenterAvailable; #pragma mark Initialization static GCHelper *sharedHelper = nil; + (GCHelper *) sharedInstance { if (!sharedHelper) { sharedHelper = [[GCHelper alloc] init]; } return sharedHelper; }
рдпрд╣ рдЧреЗрдордХреЗрдВрдЯрд░ рдПрд╡рд▓реЗрдмрд▓ рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЛ рд╕рдВрд╢реНрд▓реЗрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдХреНрд▓рд╛рд╕ рдХреЗ рдПрдХ рдПрдХрд▓ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдзрд┐ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рд╕рд┐рдВрдЧрд▓рдЯрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рдХрдИ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИ рдЬрдм рдЖрдкрдХреЛ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдПрдХ рд╕рд┐рдВрдЧрд▓рдЯрди рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрдИ рдереНрд░реЗрдбреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рдЗрд╕рдХреЗ рдмрд╛рдж, рд╕рд╛рдЭрд╛рдХрд░рдг рд╡рд┐рдзрд┐ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рдирд┐рдореНрди рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реЗрдВ:
- (BOOL)isGameCenterAvailable {
рдпрд╣ рддрд░реАрдХрд╛ рд╕реАрдзреЗ
рдРрдкреНрдкрд▓ рдХреЗ рдЧрд╛рдЗрдб рд╕реЗ рдЧреЗрдо рдХрд┐рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╣ рд╡рд┐рдзрд┐ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдЧреЗрдо рдХрд┐рдЯ рдХреА рдЙрдкрд▓рдмреНрдзрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреА рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдПрдкреНрд▓рд┐рдХреЗрд╢рди iOS 4.0 рдпрд╛ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ (рдХреЗрд╡рд▓ рдорд▓реНрдЯреАрдкреНрд▓реЗрдпрд░ рдХреЗ рдмрд┐рдирд╛) рдкрд░ рдЪрд▓рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛ред
рдЕрдЧрд▓рд╛, рдкрд┐рдЫрд▓реА рд╡рд┐рдзрд┐ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рдирд┐рдореНрди рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ:
- (id)init { if ((self = [super init])) { gameCenterAvailable = [self isGameCenterAvailable]; if (gameCenterAvailable) { NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; [nc addObserver:self selector:@selector(authenticationChanged) name:GKPlayerAuthenticationDidChangeNotificationName object:nil]; } } return self; } - (void)authenticationChanged { if ([GKLocalPlayer localPlayer].isAuthenticated && !userAuthenticated) { NSLog(@"Authentication changed: player authenticated."); userAuthenticated = TRUE; } else if (![GKLocalPlayer localPlayer].isAuthenticated && userAuthenticated) { NSLog(@"Authentication changed: player not authenticated"); userAuthenticated = FALSE; } }
рдпрд╣ рдЗрдирд┐рдЯ рд╡рд┐рдзрд┐ рдЧреЗрдо рд╕реЗрдВрдЯрд░ рдХреА рдЙрдкрд▓рдмреНрдзрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреА рд╣реИ, рдФрд░ рдПрдХ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдкрд░рд┐рдгрд╛рдо рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ "рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдмрджрд▓ рдЧрдпрд╛" рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдХреЗ рд▓рд┐рдП рдкрдВрдЬреАрдХреГрдд рд╣реИред рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЕрдзрд┐рдХреГрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдХреЗ рд▓рд┐рдП рдЖрд╡реЗрджрди рдкрдВрдЬреАрдХреГрдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдкреНрд░рдорд╛рдгреАрдХрд░рдгрдЪреИрди рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ: рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд░рд╛рдЬреНрдп рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рджреМрд░рд╛рди рдЕрдзрд┐рдХреГрдд рдерд╛, рдФрд░ рддрджрдиреБрд╕рд╛рд░ рдзреНрд╡рдЬ рдХреЛ рдмрджрд▓рддрд╛ рд╣реИред
рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рдкреНрд░рдпреЛрдЬрдиреЛрдВ рдХреЗ рд▓рд┐рдП, рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЕрдзрд┐рдХреГрдд рдХрд░рдиреЗ рдпрд╛ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдХрдИ рдмрд╛рд░ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдХрд┐ рдпреВрдЬрд╝рд░рдЕрдереЗрдВрдЯреЗрдб рдзреНрд╡рдЬ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рд╕реЗ рдЕрд▓рдЧ рд╣реИ, рдФрд░ рдХреЗрд╡рд▓ рдпрд╣ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рд╕рдордп рдмрд╛рдж рдкрд░рд┐рд╡рд░реНрддрди рд╣реБрдП рд╣реИрдВ рдпрд╛ рдирд╣реАрдВред
рдЕрдВрдд рдореЗрдВ, рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╡рд┐рдзрд┐ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рд╕реНрдерд╛рдиреАрдп рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЛ рдЕрдзрд┐рдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реЗрдВ:
#pragma mark User functions - (void)authenticateLocalUser { if (!gameCenterAvailable) return; NSLog(@"Authenticating local user..."); if ([GKLocalPlayer localPlayer].authenticated == NO) { [[GKLocalPlayer localPlayer] authenticateWithCompletionHandler:nil]; } else { NSLog(@"Already authenticated!"); } }
рдпрд╣ рдкреНрд░рдорд╛рдгрд┐рдХрддрд╛ рдХреЗ рд╕рд╛рде рдХрд╣рддрд╛ рд╣реИрдХрдВрдкреНрд▓реАрдореЗрдВрдЯрд╣реИрдВрдбрд▓рд░ рд╡рд┐рдзрд┐, рдЬрд┐рд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдмрд╛рдж рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЛ рдЕрдзрд┐рдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЧреЗрдо рдХрд┐рдЯ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдкреВрд░рд╛ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдЖрдкрдиреЗ "рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдкрд░рд┐рд╡рд░реНрддрд┐рдд" рд╕реВрдЪрдирд╛рдПрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрдВрдЬреАрдХрд░рдг рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИред
рдареАрдХ рд╣реИ, рдЕрдм GCHelper рдореЗрдВ рдПрдХ рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЛ рдЕрдзрд┐рдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рднреА рдХреЛрдб рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЕрдм рдЖрдкрдХреЛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛! AppDelegate.m рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдВ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░рд┐рд╡рд░реНрддрди рдХрд░реЗрдВ:
рдпрд╣ рдПрдХ рдПрдХрд▓ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдПрдЧрд╛ (рдЬреЛ рдЖрд░рдВрднреАрдХрд░рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рджреМрд░рд╛рди "рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдкрд░рд┐рд╡рд░реНрддрд┐рдд" рдХреЙрд▓рдмреИрдХ рдХреЗ рд▓рд┐рдП рдкрдВрдЬреАрдХрд░рдг рдХрд░реЗрдЧрд╛), рдлрд┐рд░ рдкреНрд░рдорд╛рдгрд┐рдХLocalUser рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВред
рд▓рдЧрднрдЧ рдХрд┐рдпрд╛! рдЕрдВрддрд┐рдо рдХрджрдо рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдЧреЗрдо рдХрд┐рдЯ рдврд╛рдВрдЪреЗ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рдореВрд╣ рдФрд░ рдлрд╝рд╛рдЗрд▓реЗрдВ рдЯреИрдм рдХреЗ рдКрдкрд░реА рдмрд╛рдПрдБ рдореЗрдВ рдХреИрдЯ рд░реЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ, рдмрд┐рд▓реНрдб рдЪрд░рдгреЛрдВ рдкрд░ рдЬрд╛рдПрдВ, "рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рд╛рде рд▓рд┐рдВрдХ рдмрд╛рдЗрдирд░реА" рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВ рдФрд░ "+" рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред GameKit.framework рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдФрд░ рдЬреЛрдбрд╝реЗрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рдЖрд╡рд╢реНрдпрдХ рд╕реЗ рд╡реИрдХрд▓реНрдкрд┐рдХ рдореЗрдВ рдкреНрд░рдХрд╛рд░ рдмрджрд▓реЗрдВ, рдФрд░ рдЖрдкрдХреА рд╕реНрдХреНрд░реАрди рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреА рддрд░рд╣ рджрд┐рдЦрдиреА рдЪрд╛рд╣рд┐рдП:

рддреБрдордиреЗ рдХрд░ рджрд┐рдпрд╛! рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ рдФрд░ рдЪрд▓рд╛рдПрдВ, рдФрд░ рдпрджрд┐ рдЖрдк рдЧреЗрдо рд╕реЗрдВрдЯрд░ рдореЗрдВ рд▓реЙрдЧ рдЗрди рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:

рдЕрдм рдЬрдм рдЖрдкрдиреЗ рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЛ рдЕрдзрд┐рдХреГрдд рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ, рддреЛ рдЖрдк рдорд╕реНрддреА рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд┐рд╕реА рдХреЛ рдЦреЗрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП!
рдЧреЗрдо рд╕реЗрдВрдЯрд░, рдЧреЗрдо рд╕реЗрдВрдЯрд░, рдореБрдЭреЗ рдПрдХ рдореИрдЪ рдмрдирд╛рдУ
рдЧреЗрдо рд╕реЗрдВрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рд╕реА рдХреЛ рдЦреЗрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреЛрдЬрдиреЗ рдХреЗ рджреЛ рддрд░реАрдХреЗ рд╣реИрдВред рдпрд╣ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕рд░реНрдЪ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╣реИ рдпрд╛ рдмрд┐рд▓реНрдЯ-рдЗрди рдореИрдЪрдореЗрдХрд┐рдВрдЧ рдЗрдВрдЯрд░рдлреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИред
рдЗрд╕ рдкрд╛рда рдореЗрдВ, рдЖрдк рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдореИрдЪрдореЗрдХрд┐рдВрдЧ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реАрдЦреЗрдВрдЧреЗред рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рдЖрдк рдПрдХ рдореИрдЪ рдвреВрдВрдврдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк GKMatchRequest рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдкреИрд░рд╛рдореАрдЯрд░ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рдлрд┐рд░ GKMatchmakerViewController рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдПрдВ рдФрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВред
рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, CGHelper.h рдореЗрдВ рдХреБрдЫ рдмрджрд▓рд╛рд╡ рдХрд░реЗрдВ:
рдЖрдЗрдП рдЬрд▓реНрджреА рд╕реЗ рдЗрд╕ рдХреЛрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рддреЗ рд╣реИрдВред
- рдЖрдк GCHelperDelegate рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдШрдЯрдирд╛рдУрдВ рдХреА рдПрдХ рдЕрдиреНрдп рд╡рд╕реНрддреБ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреИрд╕реЗ: рдПрдХ рдореИрдЪ рдХреА рд╢реБрд░реБрдЖрдд, рдбреЗрдЯрд╛ рдХреА рд╕рдорд╛рдкреНрддрд┐ рдпрд╛ рдкреНрд░рд╛рдкреНрддрд┐ред рдЗрд╕ рдЧреЗрдо рдореЗрдВ, рдЖрдкрдХреА Cocos2D рдкрд░рдд рдЗрд╕ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдЧреА;
- GCHelper рдСрдмреНрдЬреЗрдХреНрдЯ рджреЛ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдкрд╣рд▓рд╛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдореИрдЪ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рдХреЛрдИ рдореИрдЪ рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдФрд░ рджреВрд╕рд░рд╛ - рддрд╛рдХрд┐ рдЧреЗрдо рд╕реЗрдВрдЯрд░ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рдкрд░ рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░ рд╕рдХреЗ рдпрд╛ рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд┐рддрд┐ рдмрджрд▓ рдЧрдИ рд╣реЛ;
- рд╡реНрдпреВ рдХрдВрдЯреНрд░реЛрд▓рд░ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирдП рдЙрджрд╛рд╣рд░рдг рдЪрд░ рдФрд░ рдЧреБрдг рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЬреЛ рдореИрдЪрдореЗрдХрд┐рдВрдЧ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛ред рд╕рд╛рде рд╣реА рдореИрдЪ рдХреА рдПрдХ рдХрдбрд╝реА, рдПрдХ рдЪрд░ рдЬреЛ рдЖрдкрдХреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдореИрдЪ рд╢реБрд░реВ рд╣реБрдЖ рд╣реИ рдпрд╛ рдирд╣реАрдВ рдФрд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐;
- рдПрдХ рдирдИ рд╡рд┐рдзрд┐ рдмрдирд╛рдИ рдЬрд╛ рд░рд╣реА рд╣реИ рддрд╛рдХрд┐ Cocos2D рдкрд░рдд рдХрд┐рд╕реА рдХреЗ рд╕рд╛рде рдЦреЗрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдорд┐рд▓ рд╕рдХреЗред
рдЕрдм GCHelper.m рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдВ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдмрджрд▓рд╛рд╡ рдХрд░реЗрдВ:
рдпрд╣ рд╡рд┐рдзрд┐, рдЬрд┐рд╕реЗ рдПрдХ рдореИрдЪ рдХреА рдЦреЛрдЬ рдХреЗ рд▓рд┐рдП Cocos2D рдкрд░рдд рджреНрд╡рд╛рд░рд╛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрджрд┐ рдЧреЗрдо рд╕реЗрдВрдЯрд░ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ рд╡рд┐рдзрд┐ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рддреА рд╣реИред
рд╡рд╣ рдореИрдЪ рдХреА рд╢реБрд░реБрдЖрдд рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЕрднреА рддрдХ рд╢реБрд░реБрдЖрдд рдирд╣реАрдВ рд╣реБрдИ рд╣реИ рдФрд░ рдореИрдЪ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рд╢реВрдиреНрдп рд╣реИред рдпрд╣ рднрд╡рд┐рд╖реНрдп рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рджреГрд╢реНрдп рдирд┐рдпрдВрддреНрд░рдХ рдФрд░ рдмрд╛рд╣рд░ рд╕реЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЛ рдмрдЪрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдореМрдЬреВрдж рдХрд┐рд╕реА рднреА рджреГрд╢реНрдп рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рд░рджреНрдж рдХрд░ рджреЗрддрд╛ рд╣реИ (рд╡рд░реНрддрдорд╛рди рдореЗрдВ GKMatchmakerViewController рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг)ред
рдлрд┐рд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣рд┐рд╕реНрд╕рд╛ рдЖрддрд╛ рд╣реИред GKMatchRequest рдСрдмреНрдЬреЗрдХреНрдЯ рдЖрдкрдХреЛ рдЙрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдореИрдЪ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЖрдк рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рдиреНрдпреВрдирддрдо рдФрд░ рдЕрдзрд┐рдХрддрдо рдЦрд┐рд▓рд╛рдбрд╝реАред рдпрд╣ рд╡рд┐рдзрд┐ рдЙрдиреНрд╣реЗрдВ рд╕реЗрдЯ рдХрд░рддреА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЙрдиреНрд╣реЗрдВ рдЗрд╕рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (рдЗрд╕ рдЦреЗрд▓ рдХреЗ рд▓рд┐рдП рдХрдо рд╕реЗ рдХрдо 2 рдЦрд┐рд▓рд╛рдбрд╝реА, рдЕрдзрд┐рдХрддрдо 2 рдЦрд┐рд▓рд╛рдбрд╝реА рднреА)ред
рдлрд┐рд░ рд╡рд╣ рдкреНрд░рд╛рдкреНрдд рдЕрдиреБрд░реЛрдз (
рд▓рдЧрднрдЧ рдЕрдиреБрд╡рд╛рджред GKMatchRequest рдЙрджрд╛рд╣рд░рдг) рдХреЗ рд╕рд╛рде GKMatchmakerViewController рдХрд╛ рдПрдХ рдирдпрд╛ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рддрд╛ рд╣реИ, рдПрдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЗ рд░реВрдк рдореЗрдВ GCHelper рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕реНрдХреНрд░реАрди рдкрд░ рдкреНрд░реЗрд╖рд┐рдд рджреГрд╢реНрдп рдирд┐рдпрдВрддреНрд░рдХ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред
рдЗрд╕ рдХреНрд╖рдг рд╕реЗ, рдирд┐рдпрдВрддреНрд░рдг GKMatchmakerViewController рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЦрд┐рд▓рд╛рдбрд╝реА рдЦреЛрдЬрдиреЗ рдФрд░ рдЦреЗрд▓ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЙрд╕рдХреЗ рдмрд╛рдж, рдХреБрдЫ рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╣рд▓рд╛рдПрдВрдЧреЗ, рддреЛ рдЪрд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:
#pragma mark GKMatchmakerViewControllerDelegate // - (void)matchmakerViewControllerWasCancelled:(GKMatchmakerViewController *)viewController { [presentingViewController dismissModalViewControllerAnimated:YES]; } // - (void)matchmakerViewController:(GKMatchmakerViewController *)viewController didFailWithError:(NSError *)error { [presentingViewController dismissModalViewControllerAnimated:YES]; NSLog(@"Error finding match: %@", error.localizedDescription); } // , - (void)matchmakerViewController:(GKMatchmakerViewController *)viewController didFindMatch:(GKMatch *)theMatch { [presentingViewController dismissModalViewControllerAnimated:YES]; self.match = theMatch; match.delegate = self; if (!matchStarted && match.expectedPlayerCount == 0) { NSLog(@"Ready to start match!"); } }
рдпрджрд┐ рдЦрд┐рд▓рд╛рдбрд╝реА рдореИрдЪ рдЦреЛрдЬ рдХреЛ рд░рджреНрдж рдХрд░ рджреЗрддрд╛ рд╣реИ, рдпрд╛ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИ, рддреЛ рдореИрдЪ рдирд┐рд░реНрдорд╛рдг рджреГрд╢реНрдп рдмрд╕ рдмрдВрдж рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
рдФрд░ рдЕрдЧрд░ рдПрдХ рдореИрдЪ рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдореИрдЪ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдмрдЪрд╛рдПрдЧрд╛ рдФрд░ рдореИрдЪ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЗ рд░реВрдк рдореЗрдВ GCHelper рд╕реЗрдЯ рдХрд░реЗрдЧрд╛, рддрд╛рдХрд┐ рдЗрд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛ рдФрд░ рдХрдиреЗрдХреНрд╢рди рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реВрдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред
рд╡рд╣ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдореИрдЪ рд╢реБрд░реВ рд╣реЛрдиреЗ рдХрд╛ рд╕рдордп рд╣реИред рдорд╛рдЪрд┐рд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдЕрдкреЗрдХреНрд╖рд┐рдд рдкреНрд▓реЗрдпрд░реНрд╕рдХрд╛рдЙрдВрдЯрд░ рдЪрд░ рдореЗрдВ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЦрд┐рд▓рд╛рдбрд╝рд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ 0 рд╣реИ, рддреЛ рд╣рд░ рдХреЛрдИ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИред рдЕрдм рд╣рдо рдЗрд╕реЗ рдХреЗрд╡рд▓ рд▓реЙрдЧ рдЖрдЙрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдмрд╛рдж рдореЗрдВ рд╣рдо рдпрд╣рд╛рдВ рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рдХрд░реЗрдВрдЧреЗред
рдЕрдЧрд▓рд╛, GKMatchDelegate рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЬреЛрдбрд╝реЗрдВ:
#pragma mark GKMatchDelegate // - (void)match:(GKMatch *)theMatch didReceiveData:(NSData *)data fromPlayer:(NSString *)playerID { if (match != theMatch) return; [delegate match:theMatch didReceiveData:data fromPlayer:playerID]; } // (, , ) - (void)match:(GKMatch *)theMatch player:(NSString *)playerID didChangeState:(GKPlayerConnectionState)state { if (match != theMatch) return; switch (state) { case GKPlayerStateConnected: // handle a new player connection. NSLog(@"Player connected!"); if (!matchStarted && theMatch.expectedPlayerCount == 0) { NSLog(@"Ready to start match!"); } break; case GKPlayerStateDisconnected: // a player just disconnected. NSLog(@"Player disconnected!"); matchStarted = NO; [delegate matchEnded]; break; } } // - - (void)match:(GKMatch *)theMatch connectionWithPlayerFailed:(NSString *)playerID withError:(NSError *)error { if (match != theMatch) return; NSLog(@"Failed to connect to player with error: %@", error.localizedDescription); matchStarted = NO; [delegate matchEnded]; } // - - (void)match:(GKMatch *)theMatch didFailWithError:(NSError *)error { if (match != theMatch) return; NSLog(@"Match failed with error: %@", error.localizedDescription); matchStarted = NO; [delegate matchEnded]; }
рдореИрдЪ: didReceiveData: fromPlayer рддрдм рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдХреЛрдИ рдЕрдиреНрдп рдЦрд┐рд▓рд╛рдбрд╝реА рдЖрдкрдХреЛ рдбреЗрдЯрд╛ рднреЗрдЬрддрд╛ рд╣реИред рдпрд╣ рд╡рд┐рдзрд┐ рдХреЗрд╡рд▓ рдбреЗрдЯрд╛ рдХреЛ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЛ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рддреА рд╣реИ (рдЗрд╕ рдЦреЗрд▓ рдореЗрдВ рдпрд╣ Cocos2D рдкрд░рдд рд╣реЛрдЧреА), рдЗрд╕рд▓рд┐рдП рдЦреЗрд▓ рдЗрдВрдЬрди рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдореИрдЪ: рдЦрд┐рд▓рд╛рдбрд╝реА: didChangState рдХрд╛ рдЙрдкрдпреЛрдЧ рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рдЬрд╛рдВрдЪрд╛ рдЬрд╛ рд╕рдХреЗ рдХрд┐ рд╕рднреА рдЦрд┐рд▓рд╛рдбрд╝реА рдЬреБрдбрд╝реЗ рд╣реБрдП рд╣реИрдВ рддрд╛рдХрд┐ рдореИрдЪ рд╢реБрд░реВ рд╣реЛ рд╕рдХреЗред рдЕрдиреНрдпрдерд╛, рдпрджрд┐ рдЦрд┐рд▓рд╛рдбрд╝реА рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдореИрдЪ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЛ рднреЗрдЬреА рдЬрд╛рддреА рд╣реИред
рдареАрдХ рд╣реИ, рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдореИрдЪ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рд╣реИ, рдЪрд▓реЛ рдЗрд╕реЗ рд╣рдорд╛рд░реЗ HelloWorldLayer рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред HelloWorldLayer.h рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдВ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░рд┐рд╡рд░реНрддрди рдХрд░реЗрдВ:
рдЕрдм HelloWorldLayer.m рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдВ рдФрд░ рдпреЗ рд╕реБрдзрд╛рд░ рдХрд░реЗрдВ:
рдпрд╣рд╛рдВ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣рд┐рд╕реНрд╕рд╛ рдЗрдирд┐рдЯ рд╡рд┐рдзрд┐ рд╣реИред рдпрд╣ App рдкреНрд░рддрд┐рдирд┐рдзрд┐ рд╕реЗ RootViewController рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡реНрдпреВ рдХрдВрдЯреНрд░реЛрд▓рд░ рдореИрдЪ рдмрдирд╛рдиреЗ рд╡рд╛рд▓реЗ рд╡реНрдпреВ рдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛ред рдЗрд╕рдХреЗ рдмрд╛рдж, рдПрдХ рд╡рд┐рдзрд┐ рдХреЛ рдореИрдЪ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реНрдпреВ рдХрдВрдЯреНрд░реЛрд▓рд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдХреЗ рдореИрдЪ рдХреА рдЦреЛрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╡рд╣ рд╡рд┐рдзрд┐ рд╣реИ рдЬреЛ рдЖрдкрдиреЗ рдЕрднреА GCHelper рдореЗрдВ рд▓рд┐рдЦреА рд╣реИред
рдЕрдЧрд▓рд╛ рдореИрдЪреЛрдВ рдХреЗ рдЖрд░рдВрдн рдпрд╛ рдЕрдВрдд рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдЖрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЖрдк рдмрд╛рдж рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред
рдЖрдЦрд┐рд░реА рдмрд╛рддред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, Cocos2D рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ App рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдореЗрдВ RootViewController рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЗрд╕реЗ рдЪреБрдирдирд╛ рдЪрд╛рд╣рд┐рдПред AppDelegate.h рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдВ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬреЛрдбрд╝реЗрдВ:
@property (nonatomic, retain) RootViewController *viewController;
AppDelegate.m рдореЗрдВ рдЗрд╕рдХрд╛ рд╕рдВрд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВ:
@synthesize viewController;
рд╣реЛ рдЧрдпрд╛! рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдПрдВ рдФрд░ рдЪрд▓рд╛рдПрдВ, рдФрд░ рдЖрдкрдХреЛ рдпрд╣ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдореИрдЪ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реНрдпреВ рдХрдВрдЯреНрд░реЛрд▓рд░ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:

рдЕрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдЪрд▓рд╛рдПрдВ рддрд╛рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рджреЛ рдЪрд▓рдиреЗ рд╡рд╛рд▓реА рдкреНрд░рддрд┐рдпрд╛рдВ рд╣реЛрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдПрдХ рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдФрд░ рдЖрдкрдХрд╛ рдЖрдИрдлреЛрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)ред
рдорд╣рддреНрд╡рдкреВрд░реНрдг: рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рд╡рд┐рднрд┐рдиреНрди рдЧреЗрдо рд╕реЗрдВрдЯрд░ рдЦрд╛рддреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЕрдиреНрдпрдерд╛ рдХреБрдЫ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред
рджреЛрдиреЛрдВ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ "Play Now" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░ рдХреБрдЫ рд╕рдордп рдмрд╛рдж, рдореИрдЪ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реНрдпреВ рдХрдВрдЯреНрд░реЛрд▓рд░ рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдЖрдкрдХреЛ рд▓реЙрдЧ рдореЗрдВ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:
CatRace[16440:207] Authentication changed: player authenticated. CatRace[16440:207] Player connected! CatRace[16440:207] Ready to start match!
рдмрдзрд╛рдИ! рдЖрдкрдиреЗ рджреЛ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рдмреАрдЪ рдПрдХ рдореЗрд▓ рдмрдирд╛рдпрд╛ рд╣реИ! рдЕрдм рдЖрдк рдСрдирд▓рд╛рдЗрди рдЧреЗрдо рдмрдирд╛рдиреЗ рдХреА рд░рд╛рд╣ рдкрд░ рд╣реИрдВ!
рд▓реИрдВрдбрд╕реНрдХреЗрдк рдУрд░рд┐рдПрдВрдЯреЗрд╢рди рдФрд░ GKMatchmakerViewController
рдЖрдкрдиреЗ рджреЗрдЦрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, GKMatchmakerViewController рдкреЛрд░реНрдЯреЗрдЯ рдУрд░рд┐рдПрдВрдЯреЗрд╢рди рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдпрд╣ рдмрд╣реБрдд рдХрд╖реНрдЯрдкреНрд░рдж рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкрд░рд┐рджреГрд╢реНрдп рдореЗрдВ рдпрд╣ Cocos2D рдЦреЗрд▓ рд╣реИ!
рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдЖрдк рдХреЗрд╡рд▓ рдкрд░рд┐рджреГрд╢реНрдп рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП GKMatchmakerViewController рдордЬрдмреВрд░ рдХрд░рдХреЗ рдЗрд╕реЗ рдареАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдирдИ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдВ, iOS \ рдХреЛрдХреЛ рдЯрдЪ \ рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡-рд╕реА рдХреНрд▓рд╛рд╕ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ, рдФрд░ GKMatchmakerViewController-рд▓реИрдВрдбрд╕реНрдХреЗрдкрдСрдирд▓реА рдирд╛рдо рдХреЗ рддрд╣рдд NSObject рдХреЛ рдЙрдк-рдХрд░реЗрдВред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЗ рд╕рд╛рде GKMatchmakerViewController-рд▓реИрдВрдбрд╕реНрдХреЗрдкрдСрди рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдмрджрд▓реЗрдВ:
#import <Foundation/Foundation.h> #import <GameKit/GameKit.h> @interface GKMatchmakerViewController(LandscapeOnly) - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation; @end
рдФрд░ рдлрд┐рд░ GKMatchmakerViewController-LandsOnly.m рдХреА рд╕рд╛рдордЧреНрд░реА:
#import "GKMatchmakerViewController-LandscapeOnly.h" @implementation GKMatchmakerViewController (LandscapeOnly) - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { return ( UIInterfaceOrientationIsLandscape( interfaceOrientation ) ); } @end
рдФрд░ рд╡рд╣ рдпрд╣ рд╣реИ! рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдПрдВ рдФрд░ рдЙрд╕реЗ рдЪрд▓рд╛рдПрдВред рдЕрдм рджреГрд╢реНрдп рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рдкрд░рд┐рджреГрд╢реНрдп рджреГрд╢реНрдп рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:

рдЖрдЧреЗ рдХреНрдпрд╛?
рдпрд╣рд╛рдВ рд╕рднреА рдХреЛрдб рдХреЗ рд╕рд╛рде
рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИ
рдЬреЛ рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХреА рдЧрдИ рдереАред
рджреВрд╕рд░реЗ рднрд╛рдЧ рдореЗрдВ рд╣рдо рд╕реАрдЦреЗрдВрдЧреЗ рдХрд┐ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рдмреАрдЪ рдбреЗрдЯрд╛ рдХреЛ рдХреИрд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП, рдФрд░ рдЦреЗрд▓ рдХреЛ рдПрдХ рдЕрджреНрднреБрдд рдмрд┐рд▓реНрд▓реА рдмрдирд╛рдо рдмрдЪреНрдЪреЗ рдХреА рджреМрдбрд╝ рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рдП!