Cocos2D-X рдФрд░ рд╕рднреА рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ рдЗрд╕реЗ рдЖрд╕рд╛рди рдмрдирд╛рддреЗ рд╣реИрдВ

рдХрдИ рд╕рд╛рд▓реЛрдВ рддрдХ рдЙрдиреНрд╣реЛрдВрдиреЗ iOS рдХреЗ рд▓рд┐рдП рдХрд╕реНрдЯрдо рдЦрд┐рд▓реМрдиреЗ рдмрдирд╛рдПред рдРрд╕реА рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдЬрдм рддреЗрдЬ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рджреЗрдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЖрдк Google рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдкреВрдЫреЗрдВред рдЧреВрдЧрд▓ рдХреЛрдбрд┐рдВрдЧред рдЗрд╕рд▓рд┐рдП рднрд╛рдЧреНрдп рдореБрдЭреЗ iPhone рдФрд░ рдПрдХ рдЧрд░реНрдо рдЯреНрдпреВрдм www.raywenderlich.com рдХреЗ рд▓рд┐рдП Cocos2D рдХреЗ рд╕рд╛рде рд▓рд╛рдпрд╛

рдореБрдЭреЗ рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡-рд╕реА рдкрд╕рдВрдж рд╣реИ, рд╕рд╛рде рд╣реА cocos2D рднреАред рдкреНрд▓рд╛рд╕реНрдЯрд┐рд╕рд┐рди рдХреЗ рд░реВрдк рдореЗрдВ рдирд░рдоред рд╕реА ++ рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХреЗ рд╕рднреНрдп рд╡рд░реНрд╖реЛрдВ рдХреЗ рдмрд╛рдж, рдЪреАрдЬреЗрдВ рдереЛрдбрд╝реА рдЖрд╕рд╛рди рд╣реЛ рдЧрдИрдВред рдХрд╛рд╢, рдХреЗрд╡рд▓ iOSред рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ Apportable рджрд┐рдЦрд╛рдИ рджрд┐рдП, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдореИрдВ рдЙрд╕ рддрд░рд╣ рд╕реЗ рдирд╣реАрдВ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореБрдЭреЗ рдПрдХ рд╣реА рдордВрдЪ рд╕реЗ рдердХрд╛рди рдорд╣рд╕реВрд╕ рд╣реБрдИ рдФрд░ рдореИрдВ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдпрд╣ рд╣рд░ рдорд╛рдЗрдХреНрд░реЛрд╡реЗрд╡ рдкрд░ рдЦреЗрд▓рд╛ рдЬрд╛рддрд╛ рдерд╛ред рдПрдХрддрд╛ рдЕрдЪреНрдЫреА рд▓рдЧрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдмрдВрдж рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рдЬрд╛рдирдирд╛ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдпрд╣ рдЕрдВрджрд░ рд╕реЗ рдмрд╛рд╣рд░ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: рд╕рдВрднрд╛рд╡рд┐рдд рд╡рдирд╕реНрдкрддрд┐ рд╡рд┐рдЬреНрдЮрд╛рди рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреБрдЫ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (рдЕрдХреНрд╕рд░ рдЕрднреНрдпрд╛рд╕ рдХреЗ рд▓рд┐рдП рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП), рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕рд┐рд░реНрдл рдХреАрдбрд╝реЗ рдХреЛ рдареАрдХ рдХрд░рдирд╛ рдерд╛ред рд╕рд╛рде рд╣реА, рдореИрдВ рдЕрднреА рдХреБрдЫ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдФрд░ рдЬрдм рд╕реЗ рдореИрдВ iPhone рдирд╛рд░рд┐рдпрд▓ рдореЙрдбрд▓ рд╕реЗ рдмрд╣реБрдд рдкрд░рд┐рдЪрд┐рдд рдерд╛, рддреЛ cocos2D-X рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓рдирд╛ рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╕реА ++ рдореЗрдВ рдПрдХред

рд╡рд╣реА рдмрд╛рддред рдмрд╕ C ++ рдореЗрдВред рд╡рд╣реА рд░рд┐рд▓реАрдЬрд╝ / рд░рд┐рдЯреЗрди (рдирд╡реАрдирддрдо 3.x рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рдХреБрдЫ рдмрд┐рдВрджреБ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрджрд▓ рдЪреБрдХреЗ рд╣реИрдВ), рдиреЛрдбреНрд╕ рд╕реЗ рдПрдХ рд╣реА рдореЙрдбрд▓ред рдореИрдВрдиреЗ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдмреЗрдВрдЪ рдЪрд▓рд╛рдИ (рд╣рдореЗрд╢рд╛, рд╣рдореЗрд╢рд╛ рдЗрдВрдЬрди рдХреЗ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ) - рд╕рдм рдХреБрдЫ рд╕реНрдорд╛рд░реНрдЯ рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рдпрд╛рдж рд╣реИ, рд╣рд╛рд▓рд╛рдБрдХрд┐, рдПрдХ рдЪреАрдЬрд╝ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ - рдЗрд╕рдХреЗ рдХрдИ рд╕реНрдХреНрд░реАрди рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рд╡рд╛рд▓реЗ рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред

рдЬрдм рдореИрдВрдиреЗ iPhones рдХреЗ рд▓рд┐рдП рдЧреЗрдо рдмрдирд╛рдпрд╛, рддреЛ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рдерд╛ред рдпрджрд┐ рд░реЗрдЯрд┐рдирд╛ рд╕рдорд░реНрдерди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА, рддреЛ рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдзреНрд╡рдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдерд╛:

[director enableRetinaDisplay: YES] 

рдФрд░ HD рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдЬреЛрдбрд╝реЗрдВред IPads рдХреЗ рд▓рд┐рдП, рд╕рдм рдХреБрдЫ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рдерд╛: рдЗрд╕рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЗ рдХреБрдЫ рдкреБрдирд░реНрдЧрдгрдирд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рдкрд╛рдВрдЪрд╡реЗрдВ iPhones рдХреЗ рдЖрдЧрдорди рдХреЗ рд╕рд╛рде, рдЪреАрдЬреЗрдВ рдереЛрдбрд╝реА рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реЛ рдЧрдИрдВ, рд▓реЗрдХрд┐рди рдереЛрдбрд╝рд╛ рд╕рд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЬрдм рдЖрдк Android рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рд▓рдЧрднрдЧ рдЕрд╕реАрдорд┐рдд рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╕реНрдХреНрд░реАрди рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдорд╕реНрддрд┐рд╖реНрдХ рдХреЛ рдереЛрдбрд╝рд╛ рдЪрд╛рд▓реВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣рд╛рдВ рд╣рдордиреЗ рд╡рд╣реА рдХрд┐рдпрд╛ рд╣реИред

рд╣рдордиреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЬреЛрдбрд╝реЗред рдЖрдкрдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рд╕рд╛рд░рд╛ рдЬрд╛рджреВ рдХреЛрдХреЛрдирдЯ рд▓рд┐рдкрд┐ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди AppDelegate рд╡рд░реНрдЧ рдореЗрдВ рд╣реЛрдиреЗ рд▓рдЧрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ, рджреГрд╢реНрдп рдХреЛ рд▓реЙрдиреНрдЪ рдФрд░ рд╕рдХреНрд░рд┐рдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

 bool AppDelegate::applicationDidFinishLaunching() { Director *director = Director::getInstance(); EGLView *eglView = EGLView::getInstance(); director->setOpenGLView(eglView); ... Scene *scene = GameScene::scene(); director->runWithScene(scene); return true; } 

рджреГрд╢реНрдп рдореЗрдВ, рдЖрдк рдЕрдкрдиреЗ рд╕реНрдкреНрд░рд╛рдЗрдЯреНрд╕ / рдЕрдиреНрдп рдиреЛрдбреНрд╕ рдХреЛ рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ, рдХрд┐рд╕реА рддрд░рд╣ рдЙрдиреНрд╣реЗрдВ рд╕реНрдерд┐рддрд┐ рджреЗрддреЗ рд╣реИрдВ, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдореЛрдбрд╝ рджреЗрдВред рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддрдВрддреНрд░, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕реНрдкреНрд░рд╛рдЗрдЯ рдмрд╛рд░реАрдХреА рд╕реЗ FileUtils рд╡рд░реНрдЧ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред рдЬрдм рднреА рдЖрдк рдХреБрдЫ рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ:

 Sprite *object = Sprite::create("object.png") 

рд╕реНрдкреНрд░рд╛рдЗрдЯ рд╢реНрд░реЗрдгреА рдХреЗ рдЖрдВрддрд░рд┐рдХ рддрд░реАрдХреЗ (рд╣рд╛рде рдкрд░ рдХреЛрдб рд╣реЛрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реИ) рдлрд╝рд╛рдЗрд▓рдпреВрдЯрд▓ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдЦреЛрдЬ рдкрдереЛрдВ рдХреА рд╕реВрдЪреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реЗрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдРрд╕реА рдХреЛрдИ рдлрд╝рд╛рдЗрд▓ рд╣реИред рд░рд╛рд╕реНрддреЗ рдЦреЛрдЬреЗ? рд╣рд╛рдБ, рдпрд╣ рд╕рд░рд▓ рд╣реИред рдЖрдк рдЗрд╕ рддрд░рд╣ рд╕реНрдкреНрд░рд╛рдЗрдЯ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ:

 Sprite *enemy = Sprite::create("enemies/enemy0.png") 

рд▓реЗрдХрд┐рди рдЖрдк рдирд╛рд░рд┐рдпрд▓ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреБрдЫ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ рд╕реВрдЪреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рддрд▓рд╛рд╢ рд╣реИред рдпрд╣ рдХреНрд░рдорд╢рдГ рд╕реНрдХреНрд░рд╛рдЗрдмрд▓ рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИ, рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рд▓рдЪреАрд▓рд╛рдкрди рджреЗрддрд╛ рд╣реИред рдореИрдВ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рджреВрд╕рд░реЗ рддрд░реАрдХреЗ рд╕реЗ рд╕рдореВрд╣рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ - рдХреГрдкрдпрд╛, рдЬрд┐рд╕ рдХреЛрдб рдореЗрдВ рдЖрдкрдХреЛ "рджреБрд╢реНрдорди /" рдХреЛ рдмрджрд▓рдирд╛ рдирд╣реАрдВ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, "рдСрдмреНрдЬреЗрдХреНрдЯ /"ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рдЖрд╕рд╛рди:

 FileUtils::getInstance()->addSearchPath("fonts"); FileUtils::getInstance()->addSearchPath("objects"); FileUtils::getInstance()->addSearchPath("backgrounds"); ... Sprite *back = Sprite::create("back0.png"); LabelBMFont *label = LabelBMFont::create("an incredible label", "font0.fnt"); 

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рднреА рддрд░рд╣ рдХреЗ рд╕реНрдХреНрд░реАрди рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред Cocos2D-X рдореЗрдВ рдЕрдм рдХреЛрдИ рдирд╣реАрдВ рд╣реИ

 [director enableRetinaDisplay: YES] 

рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдХреБрдЫ рдирдИ рдЪреАрдЬреЗрдВ рджрд┐рдЦрд╛рдИ рджреАрдВред рднреМрддрд┐рдХ рд╕реНрдХреНрд░реАрди рдЖрдХрд╛рд░ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? рдпрд╣ рдХрд░реЗрдВ:

 Size frameSize = Director::getInstance()->getOpenGLView()->getFrameSize(); 

рдореИрдВрдиреЗ рдХреЙрдиреНрдлрд┐рдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рдХреБрдЫ рдХрд╣рд╛ред рдпрд╣ рдПрдХ рд╕рд░рд▓ json рдлрд╝рд╛рдЗрд▓ (рд░реИрдкрд┐рдбреНрд╕рди рдкрд╛рд░реНрд╕рд┐рдо ) рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╣рдордиреЗ рд╕рдВрд╕рд╛рдзрди рдкрде рд╕реЗрдЯ (рдУрд╣, рдпрд╣ рдЕрднрд┐рдпреЛрдЧрд╛рддреНрдордХ рдорд╛рдорд▓рд╛ ) рд▓рд┐рдЦрд╛ рд╣реИ ред рдкреНрд░рддреНрдпреЗрдХ рд╕реЗрдЯ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

 { "width": 960, "height": 640, "designWidth": 480, "designHeight": 320, "paths": [ "Res/960x640/fonts/", "Res/960x640/ui/", "Res/960x640/maps/" ... ] } 

рдпрд╣рд╛рдВ, рдЪреМрдбрд╝рд╛рдИ рдФрд░ рдКрдВрдЪрд╛рдИ рднреМрддрд┐рдХ рдЖрдпрд╛рдореЛрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреА рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдпрд╣ рд╕реЗрдЯ рдЙрдкрдпреБрдХреНрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдореИрдВ рдХреНрдпрд╛ рдкрдХрдбрд╝ рд░рд╣рд╛ рд╣реВрдБ? AppDelegate рдореЗрдВ рдЖрд╡реЗрджрди рд╢реБрд░реВ рдХрд░рддреЗ рд╕рдордп :: applicationDidFinishLaunching рдореИрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд▓реЛрдб рдХрд░рддрд╛ рд╣реВрдВ, рдкрде рдХреЗ рд╕рднреА рд╕реЗрдЯреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рд╛рддрд╛ рд╣реВрдВ рдФрд░ рдирд┐рд░реНрджреЗрд╢рдХ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рднреМрддрд┐рдХ рдЖрдХрд╛рд░ рдХреА рддреБрд▓рдирд╛ рдХрд░рддрд╛ рд╣реВрдВ :: getInstance () -> getOpenGLView () -> getFrameSize () , рдЙрди рдЪреМрдбрд╝рд╛рдИ рдФрд░ рдКрдВрдЪрд╛рдИ рдХреЗ рд╕рд╛рде рдФрд░ рдЖрд╡рд╢реНрдпрдХ рдЖрдХрд╛рд░реЛрдВ рдХреЛ рд▓реЛрдб рдХрд░реЗрдВред рддрд╕реНрд╡реАрд░реЗрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИред

рдЧрд╣рд░реА рд╕рдордЭ рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдВ рдЬрд╛рдПрдВ:
www.cocos2d-x.org/wiki/Multi_resolution_support

рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдирд┐рджреЗрд╢рдХ рд╣реИ :: getInstance () -> getOpenGLView () -> setDesignResolutionSize () , рдЬреЛ рд╕рд╛рдкреЗрдХреНрд╖ рдЖрдХрд╛рд░ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЗ iPhone рдХрд╛ рдЖрдХрд╛рд░ 960x640 рд╣реИ рдФрд░ рд╕реНрдХреНрд░реАрди рдХреЗ рдХреЗрдВрджреНрд░ рдХреЛ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ {480, 320} рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЖрдк рдХрд┐рд╕реА рднреА {96, 64} рдХреЛ setDesignResolutionSize рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдХреЗрдВрджреНрд░ рдХреЛ {48, 32} рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕рд╛рдкреЗрдХреНрд╖ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВ, рдФрд░ рдЙрди рджреЛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реЗ рдбрд┐рдЬрд╝рд╛рдЗрдирд╣рд╛рдЗрдЯ рдиреЗ рдЙрдиреНрд╣реЗрдВ рд╕реЗрдЯ рдХрд┐рдпрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рддреЗ рд╣реИрдВ, рдЖрдХрд╛рд░реЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ, рдЖрд╡рд╢реНрдпрдХ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕рд╣реА рд╕рд╛рдкреЗрдХреНрд╖ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рд▓рдЧрднрдЧ рдлрд┐рдирд┐рд╢ рд▓рд╛рдЗрди рдкрд░ рд╣реИрдВред

рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдЖрдк рдЧреЗрдо рдХреЛ рдПрдХ рд╡рд┐рд╢рд╛рд▓ рд╕реНрдХреНрд░реАрди рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рд╡рд╛рд▓реЗ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕реАрдзреЗ рдкрд┐рдХреНрд╕реЗрд▓ perfec t рдХреЗ рд▓рд┐рдП рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдХреЛрдИ рд╕реЗрдЯ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдареАрдХ рд╣реИ - рд╣рдо рд╕рд┐рд░реНрдл рдирд╛рд░рд┐рдпрд▓ рдХреЛ рддрд╕реНрд╡реАрд░ рдХреЛ рдлреИрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП, рдирд┐рджреЗрд╢рдХ :: getInstance () -> setContentScaleFactor () рд╣реИ , рдЬреЛ рдПрдХ рдлреНрд▓реЛрдЯ рд▓реЗрддрд╛ рд╣реИред рдмрд╕ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░реЗрдВ (рдкреЛрд░реНрдЯреНрд░реЗрдЯ рдЧреЗрдо рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ) рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рд╕реЗ рд▓реЗрдХрд░ рдбрд┐рдЬрд╛рдЗрди рддрдХ рдХреА рдЪреМрдбрд╝рд╛рдИ ред рдЖрдк рд╕рднреА рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░ рдЦреБрд╢ рд╣реЛрдВрдЧреЗред

рдПрдХ рдФрд░ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИ, рдЕрдВрддрд┐рдо рдПрдХ рд╣реИ рд░реЗрдЬреЛрд▓реНрдпреВрд╢рдирдкреЙрд▓рд┐рд╢реА ред рдИрдорд╛рдирджрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рджреЛ рдЙрдкрдпреЛрдЧреА рдЪреАрдЬреЗрдВ рд╣реИрдВ: ResolutionPolicy :: FIXED_WIDTH рдФрд░ ResolutionPolicy :: FIXED_HEIGHT ред рдпрджрд┐ рдЖрдк рдкреЛрд░реНрдЯреНрд░реЗрдЯ рдУрд░рд┐рдПрдВрдЯреЗрд╢рди рдореЗрдВ рдЦреЗрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ - рддреЛ рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рдирдкреЙрд▓рд┐рд╢реА :: FIXED_WIDTH рд╕реЗрдЯ рдХрд░реЗрдВред рдЙрд╕реА рд╕рдордп, рдЪрд┐рддреНрд░ рдХреЛ рдЪреМрдбрд╝рд╛рдИ рдореЗрдВ рдмрдврд╝рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬреИрд╕реЗ рдореЗрд░реЗ рд╣рд▓ рдореА рдЧреЗрдо рдореЗрдВ:



рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде, рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдКрд░реНрдзреНрд╡рд╛рдзрд░ рд╕реНрдерд╛рди рджрд┐рдЦрд╛рдИ рджреЗ рд╕рдХрддрд╛ рд╣реИред рдКрдкрд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдореИрдВрдиреЗ рд╕рд┐рд░реНрдл рдкреГрд╖реНрдарднреВрдорд┐ рдХреЛ рдлреИрд▓рд╛рдпрд╛ рддрд╛рдХрд┐ рдкреВрд░реА рд╕реНрдХреНрд░реАрди рдХреЛ рдЯрд╛рдЗрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдП, рдФрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рддрддреНрд╡реЛрдВ рдХреЛ рдЗрд╕рдХреЗ рдХрд┐рдирд╛рд░реЛрдВ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рд╣рдореЗрд╢рд╛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд▓реИрдВрдбрд╕реНрдХреЗрдк рдУрд░рд┐рдПрдВрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рдореЗрд░реЗ рдЕрдиреНрдп рд░реАрдЯреЗрд▓реНрд╕ рдЧреЗрдо рдореЗрдВ ( рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рдирдкреЙрд▓рд┐рд╢реА :: FIXED_HEIGHT рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рдореИрдВрдиреЗ рд╕реНрдХреНрд░реАрди рдХреЗ рдХрд┐рдирд╛рд░реЛрдВ рдХреЗ рдЖрд╕рдкрд╛рд╕ рджреЛ рд╕реНрдкреНрд░рд╛рдЗрдЯреНрд╕ рдЖрдХрд░реНрд╖рд┐рдд рдХрд┐рдП:



рд╣рдо рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рддреЗ рд╣реИрдВ, рд░рд╛рд╕реНрддреЛрдВ рдХреЗ рд╕реЗрдЯ рдкрдврд╝рддреЗ рд╣реИрдВ, рднреМрддрд┐рдХ рдЖрдпрд╛рдореЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЖрд╡рд╢реНрдпрдХ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ, рд╕рд╣реА рдиреАрддрд┐ рдФрд░ рдЦрд┐рдВрдЪрд╛рд╡ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдореИрдВ рдереЛрдбрд╝рд╛ рдЖрдЧреЗ рдмрдврд╝ рдЧрдпрд╛ - рдореИрдВрдиреЗ рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдкрд░ рд╢рд┐рдХрдВрдЬрд╛ рдХрд╕рд╛ред рдЗрдВрдЬрди рд╕реНрддрд░ рдкрд░ред FileUtils рдХреА рдЦрд╝рд╛рд╕рд┐рдпрдд :: getInstance () -> addSearchPath () рдпрд╣ рд╣реИ рдХрд┐ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдЙрди рд░рд╛рд╕реНрддреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдЦреНрддреА рд╕реЗ рдЦреЛрдЬрд╛ рдЬрд╛рдПрдЧрд╛ рдЬреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдП рдЧрдП рдереЗ, рдФрд░ рдЙрд╕реА рдХреНрд░рдо рдореЗрдВред рдореИрдВрдиреЗ рдЗрд╕реЗ "рдлреЛрдВрдЯ /" рдореЗрдВ рдирд╣реАрдВ рдкрд╛рдпрд╛, рдпрд╣ "ui /" рдореЗрдВ рдЬрд╛рддрд╛ рд╣реИ, рдореБрдЭреЗ рдпрд╣ рд╡рд╣рд╛рдВ рдирд╣реАрдВ рдорд┐рд▓рд╛ - рдпрд╣ "рдирдХреНрд╢реЗ /" рдкрд░ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рд╡рд┐рдлрд▓рддрд╛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдореВрд▓ рдореЗрдВ рджрд┐рдЦрддрд╛ рд╣реИред рдареАрдХред рдЖрдЦрд┐рд░рдХрд╛рд░, рд╣рдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди :: getInstance () -> getCurrentLanguage () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд░реНрддрдорд╛рди рднрд╛рд╖рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкрде рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд╕рдордп, рдкрд╣рд▓реЗ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП рдкрде рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЗрд╕ рдкрде рдХреЛ рд╣реАред рдПрдХ рдмрд╛рд░ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╣реИред рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╣реЛрдЧрд╛:

 FileUtils::getInstance()->addSearchPath("fonts/en"); FileUtils::getInstance()->addSearchPath("fonts"); FileUtils::getInstance()->addSearchPath("objects/en"); FileUtils::getInstance()->addSearchPath("objects"); FileUtils::getInstance()->addSearchPath("backgrounds/en"); FileUtils::getInstance()->addSearchPath("backgrounds"); 

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

 Label::create("This is label", "font.fnt") 

рдмрд╕ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ

 Label::create(Localized::getString("mainMenuCaptionLabel"), "font.fnt") 

рдЖрдк рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рд▓рд┐рдВрдХ рд╕реЗ рд╕реНрдерд╛рдиреАрдпрдХреГрдд рд╡рд░реНрдЧ рдФрд░ рдмрд╣реБрдд рдХреБрдЫ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореБрдЭреЗ рдХреЛрдИ рдЖрдкрддреНрддрд┐ рдирд╣реАрдВ рд╣реИ :)

рдореЗрд░реЗ рд╕рд╛рде рд░рд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдкрд╛рдардХред рдЕрдкрдиреА рдмрд┐рд▓реНрд▓реА рдХреЛ рдЦрд┐рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдордд рднреВрд▓рдирд╛ - рдЙрд╕реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдкрдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдПрдХ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╡рд┐рдиреНрдпрд╛рд╕ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг - pastebin.com/5idCpjYh
рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рд╕рд╛рде рдЙрджрд╛рд╣рд░рдг рдлрд╝рд╛рдЗрд▓ - pastebin.com/LfBxs6dA
Localized.h - pastebin.com/LwNaKrFK
Localized.cpp - pastebin.com/GHVmPvCc
рдбрд╛рдЙрдирд▓реЛрдб рдкрде - pastebin.com/CX8Xma25
рдЗрд╕ рдкреВрд░реА рдЪреАрдЬрд╝ рдХреЛ рдХреИрд╕реЗ рдЪрд▓рд╛рдПрдВ AppDelegate - pastebin.com/dMVtY2Rb рдореЗрдВ

Source: https://habr.com/ru/post/In217387/


All Articles