1.ã¯ããã«
ãã®èšäºã§ã¯ã
Cocos2d-xã䜿çšããAndroid / Linuxçšã®ãããã¿ã€ãã²ãŒã ã®éçºã«çŠç¹ãåœãŠãŸãã Cocos2d-xã¯ã2次å
ã®ã²ãŒã ããã®ä»ã®ã°ã©ãã£ãã¯ã¢ããªã±ãŒã·ã§ã³ãäœæããããã®ã¯ãã¹ãã©ãããã©ãŒã ãã¬ãŒã ã¯ãŒã¯ã§ãã cocos2d
-iphoneã«åºã¥ããŠããŸããã
Cocos2d- xã¯Objective-Cã®ä»£ããã«C ++ã䜿çšããŸãã ã¢ããªã±ãŒã·ã§ã³ã¯ãiOSãAndroidãWindows PhoneãOS XãWindowsãLinuxã®ãã©ãããã©ãŒã ã§å®è¡ã§ããŸãã
ãã®èšäºã¯Android / Linuxçšã®ã¢ããªã±ãŒã·ã§ã³ã®éçºã«é¢ãããã®ã§ãéçºãã©ãããã©ãŒã ã¯Ubuntuã§ãã
æ®å¿µãªãããCocos IDEã¯WindowãšMacã«ã®ã¿ååšããLinuxã«ã¯æåŸ
ãããããŒãžã§ã³ã¯ãããŸããããUbuntuãæ¬åœã«å¥œãã§ããããæ¯æ¥äœæ¥ãããã©ãããã©ãŒã ã§ããããã
Clionãéçºã«äœ¿çšããŠããŸãã
ãã®èšäºã®äžéšã¯ãããã¥ã¡ã³ãã®é¢é£éšåã®ç¿»èš³ã§ãïŒ
http://www.cocos2d-x.org/wiki ïŒã
ãã®èšäºã¯ãCocos2d-xã«ç²Ÿéãã人ã察象ãšããŠããŸãã ãã®äžã§ãã¹ãã©ã€ããã·ãŒã³ã䜿çšããæãåçŽãªã¢ããªã±ãŒã·ã§ã³ã®äœææ¹æ³ãããã³å é床èšã®äœ¿çšæ¹æ³ã«ã€ããŠèª¬æããŸãã ããã¯ãå°æ¥ããã«é²ãã§Cocos2d-x APIãæãäžããäœããã®çš®é¡ã®éå§ãããããŸããã
2.èŠä»¶
å¿
èŠãªããŒã«ã®ã»ãããå®çŸ©ããŸãã
Ubuntu 14.04-éçºãã©ãããã©ãŒã
Cocos2d-x v3.8.1- https: //cocos2d-x.org/download
CMake 2.8+
JDK 1.6以é
Android SDK
Android NDK r9d +
Apache Ant-Androidãã«ãããã«ãããŸã
Python 2.7.5
Clion 1.1-www.jetbrains.com/clion3. Cocos2d-x
Cocos2d-xã¯2010幎ã«ç»å Žãã
MITã©ã€ã»ã³ã¹ã®äžã§é
åžããããªãŒãã³ãœãŒã¹ãããžã§ã¯ãã§ãã Cocos2d-xã§ã¯ãC ++ãLuaãJavascriptãªã©ã®èšèªã§èšè¿°ã§ããŸãã Cocos2d-xã¯é«éã§ã·ã³ãã«ã§åŒ·åã§ãã çŸåšããã®ãã¬ãŒã ã¯ãŒã¯ã䜿çšããŠèšè¿°ãããå€ãã®ã²ãŒã ã¯ãAppStoreãšGoogle Playã®ãããã«ãããŸãã
Zynga ã
Wooga ã
Glu ã
Big Fish Games ã
Konamiãªã©ã®
倧ç©ã¯ ãCocos2d-xã䜿çšããŠã²ãŒã ãéçºããŠããŸãã
ããã§å°ãäœè«ãããªããã°ãªããŸããã å®éã«ã¯ãCocos2d-xã䜿çšãããšãC ++ã䜿çšããŠã³ãŒããèšè¿°ã§ããŸãããããã¯ãã¹ãŠãAndroidããã³Linuxã§ãã«ããããŸãã Cocos2d-JSã䜿çšããŠããå ŽåãJavascriptã§èšè¿°ã§ããŸãã Linux / Ubuntuåãã®ã¢ã»ã³ããªã®å Žåãã³ãŒãã¯C ++ã§ç¿»èš³ãããã³ã³ãã€ã«ãããŸãã ããã«ã¯ããŸããŸãªåé¡ã䌎ããŸãïŒããšãã°ããµãŒãããŒãã£ã®ã©ã€ãã©ãªã§ã®äœæ¥ãè€éã«ãªããŸãïŒã Webã®å Žåãjava-scriptãå®è¡ãããŸãïŒãšããã§ããã®å Žåã®ãã«ãæéã¯ãŒãã§ããããã¯æªããããŸããïŒã
Cocos2d-xã䜿çšããå ŽåãWebã§ã¯æ©èœããŸããããLinuxããã³Androidã§ã¯ã³ãŒãã¯çŽæ¥ã³ã³ãã€ã«ãããŸãã ãã¡ãããAndroidã«ã¯Android NDKã䜿çšãããŸãã
äž»ãªæ©èœïŒ
- Opengl
- ã·ãŒã³ç®¡ç
- ã·ãŒã³ãã§ã³ãžãšãã§ã¯ã
- ã¹ãã©ã€ã
- èŠèŠå¹æ
- 移åãã¹ã±ãŒãªã³ã°ãã¿ãŒã³ãªã©ã®ããŸããŸãªã¢ã¯ã·ã§ã³
- ã¢ã¯ã·ã§ã³ã®çµã¿åãã
- ã¡ãã¥ãŒãšãã¿ã³
- ã¢ãã€ã«ããã€ã¹ã§ã®ã¿ããåŠç
- ãµãŠã³ããµããŒã
- ã¬ã€ã¢ãŠã
- ListViewãPageViewãScrollView
- ãã¿ã³ããã§ãã¯ããã¯ã¹ãããŒãã£ã³ã°ããŒãã¹ã©ã€ããŒãããã¹ããã£ãŒã«ã
åç
§ïŒ
http://www.cocos2d-x.org/wiki/Cocos2d-xhttp://www.cocos2d-x.org/wiki/About_Cocos2d-x4.ã¢ããªã±ãŒã·ã§ã³ãã€ã³ã¹ããŒã«ããŠèµ·åããŸã
èšäºã®ãã®éšåã§ã¯ãæåã®ã¢ããªã±ãŒã·ã§ã³ãäœæããŠå®è¡ããæ¹æ³ã瀺ããŸãã
å§ããã«ã¯ã
Cocos2d-xã
ããŠã³ããŒãããŠè§£åããå¿
èŠããã
ãŸã ã ãŸãã¯ããªããžããªããææ°ããŒãžã§ã³ã䜿çšã§ããŸãã
git clone https://github.com/cocos2d/cocos2d-x.git
ãã¹ãŠãæ£åžžã«ããŠã³ããŒãããããããã¹ãŠã®äŸåé¢ä¿ãã€ã³ã¹ããŒã«ããå¿
èŠããããŸãã ãããè¡ãã«ã¯ãã¹ã¯ãªãã*ãå®è¡ã§ããŸãã
~/work/cocos/cocos2d-x-3.8.1/build/install-deps-linux.sh
*以éãcocos2d-x-3.8.1ã¯ã/ work / cocos / cocos2d-x-3.8.1ãã£ã¬ã¯ããªã«å±éãããŠãããšæ³å®ããŠããŸãããŸãã¯ãæåã§ã€ã³ã¹ããŒã«ããŸãã
ãªã¹ãlibx11-dev
libxmu-dev
libglu1-mesa-dev
libgl2ps-dev
libxi-dev
g +±4.9
libzip-dev
libpng12-dev
libcurl4-gnutls-dev
libfontconfig1-dev
libsqlite3-dev
libglew-dev
libssl-dev
glfw3
glfw3ãã€ã³ã¹ããŒã«ããã«ã¯ãå¥ã®ã¹ã¯ãªãããå®è¡ããå¿
èŠããããŸãã
~/work/cocos/cocos2d-x-3.8.1$ tools/travis-scripts/install_glfw.sh
ãã®åŸãã€ã³ã¹ããŒã«ãå®è¡ããŸãã
~/work/cocos/cocos2d-x-3.8.1$ ./setup.py
cmakeãå®è¡ããŠãã¡ã€ã¯ãã¡ã€ã«ãäœæããŸãã
cd ~/work/cocos/cocos2d-x-3.8.1/build mkdir linux-build cd linux-build cmake ../..
ããã§ããã¹ãã¢ããªã±ãŒã·ã§ã³ãå®è¡ã§ããŸãã
make cd bin/cpp-tests/ ./cpp-tests
ããã ãã§ã ãã¹ãŠãããŸãããã°ããã¢çã®ãããªãã¹ãã¢ããªã±ãŒã·ã§ã³ã衚瀺ãããã¯ãã§ãã ãã¹ãŠãããŸãããã°ãããã«å
ãžé²ãããšãã§ããŸãã ãããžã§ã¯ããäœæããå¿
èŠããããŸãã
ã¢ããªã±ãŒã·ã§ã³ãäœæããã«ã¯ã次ãå®è¡ããŸãã
cocos new MyGame -p com.your_company.mygame -l cpp -d NEW_PROJECTS_DIR
MyGameã¯ååãcppã¯èšèªã§ãã jsãŸãã¯luaãæå®ã§ããŸãã ãã ããcppãæå®ããŸãã
ããã§ãããžã§ã¯ããäœæãããŸãããåŒãç¶ãäœæ¥ãç¶ããŸãã 空ã®ãããžã§ã¯ãã«ã¯ãã©ãã«ãšç»åãå«ãŸããŠããŸãã ããã«ãããèŠãããšãã§ããŸãïŒ
cocos run -s ~/work/cocos/MyCompany/MyGame/ -p android
ãŸãã¯
cd ~/work/cocos/MyCompany/MyGame cocos run -p linux
å®éãããã¯æ©èœãå§ããŸãã
5.ã¯ã©ã€ãªã³
ãã§ã«æžããããã«ãCocos IDEã¯Ubuntuåãã§ã¯ãããŸããããã¡ã¢åž³ã§ã³ãŒããæžãæ°ã¯ãããŸãããïŒ å¹žããªããšã«ããžã§ãããã¬ã€ã³ã®ã¯ãªãªã³ãããŸãã
Clionã¯cmakeããµããŒãããŠããŸããã€ãŸããMyGameãããžã§ã¯ããç°¡åã«ã€ã³ããŒãã§ããã³ãŒããäœæã§ããŸãã æžãã ãã§ãªãããããã°ããŠãã ããïŒ ç¢ºãã«ãããã¯ãã¹ãŠLinuxã§å®è¡ãããŸãã ããããæåã¯ããã§ååã ãšæããŸãã ãããã°åŸãAndroidã¢ããªã±ãŒã·ã§ã³ã¯ãã€ã§ãã³ã³ãœãŒã«ããæ§ç¯ã§ããŸãã
Clionã®è©³çŽ°ïŒ
http :
//habrahabr.ru/company/JetBrains/blog/255723/6.åºæ¬
ããã§ãCocos2d-xãããŠã³ããŒããããã¹ãŠã®ããŒã«ãã€ã³ã¹ããŒã«ãããããžã§ã¯ããClionã«ã€ã³ããŒããããããèµ·åããŠãã...ãããŠä»ãäœãäœã§ããããç解ããæã§ãã å§ããŸãããã
Cocos2d-xã¯ãã¯ãã¹ãã©ãããã©ãŒã ã²ãŒã ãšã³ãžã³ã§ãã ããããã²ãŒã ãšã³ãžã³ãšã¯äœã§ããïŒ ã²ãŒã ãšã³ãžã³ã¯ããã¹ãŠã®ã²ãŒã ã«å¿
èŠãªäžè¬çãªæ©èœãæäŸããŸãã äžç·ã«éçºãé«éåããã³ã³ããŒãã³ããå«ãŸããŠããŸãã ããšãã°ãã¬ã³ãã©ãŒïŒèšäºã®äžéšã®çšèªã¯äžè¬çã«åãå
¥ããããŠãããã翻蚳ããŠããŸããããã¢ã¯ãã£ããã£ããšããåèªã䜿çšããŸããïŒãã°ã©ãã£ãã¯ã¹ãè¡çªæ€åºãç©çåŠããµãŠã³ããã¢ãã¡ãŒã·ã§ã³ã Cocos2d-xã¯ãã¯ãã¹ãã©ãããã©ãŒã ã¢ããªã±ãŒã·ã§ã³ãéçºããããã®ã·ã³ãã«ãªAPIãæäŸããŸãïŒãŸãã¯ãç°ãªããã©ãããã©ãŒã çšã®ã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ã§ããŸãïŒã
Cocos2d-xã¯ãã·ãŒã³ããã©ã³ãžã·ã§ã³ãã¹ãã©ã€ããã¡ãã¥ãŒãSprite3DããªãŒãã£ãªãªã©ã®ãªããžã§ã¯ããæäŸããŸãã
äž»ãªã³ã³ããŒãã³ã
æåã¯ãã®ããã«èŠããªããããããŸããããå®éã«ã¯Cocos2d-xã®äœ¿çšãéå§ããã®ã¯éåžžã«ç°¡åã§ãã Cocos2d-xã®ã³ã¢ã¯ãã·ãŒã³ãããŒããã¹ãã©ã€ããããã³ã¢ã¯ã·ã§ã³ã§ãã 圌ãã®äœãèŠãŠã¿ãŸãããã
ã»ãšãã©ã®ã²ãŒã ã¯æ¬¡ã®ããã«ãªããŸãã
ãããã®ã³ã³ããŒãã³ãã¯ãã¹ãŠæ¬¡ã®ãšããã§ãã
ç£ç£
Cocos2d-xã®ãã£ã¬ã¯ã¿ãŒã¯ãã»ããã®ãã£ã¬ã¯ã¿ãŒã®ãããªãã®ã§ãã 圌ã¯ãã¹ãŠã®ãªããžã§ã¯ããå¶åŸ¡ãããããã«äœããã¹ãããäŒããŸãã ãã£ã¬ã¯ã¿ãŒã¯ã·ãŒã³ãšãã©ã³ãžã·ã§ã³ãšãã§ã¯ãã®å€æŽãå¶åŸ¡ããŸããã圌ã¯ã·ã³ã°ã«ãã³ã§ãããã©ãã§ãå©çšã§ããŸãïŒãã ããæ ç»ã§ã¯ããããããã§ã¯ãããŸããïŒã
ã·ãŒã³
ã»ãšãã©ã®å Žåãã²ãŒã ã«ã¯ã¡ãã¥ãŒãããã€ãã®ã¬ãã«ãããã«ããã€ãã®ç»é¢ããããŸãïŒãYou lostïŒãïŒã ãã®ãããªç»é¢ã¯ããããã·ãŒã³ïŒã·ãŒã³ïŒã§ãã ç¹°ãè¿ããŸãããæ ç»ã®ããã«ã åæ ç»ã¯ã·ãŒã³ã«åå²ãããŸã-1ã€ã®ã¹ããŒãªãŒã®å¥ã
ã®éšåã ã·ãŒã³ã¯Rendererãªããžã§ã¯ãã«ãã£ãŠæç»ãããŸãã ã¬ã³ãã©ãŒã¯ãã¹ãã©ã€ãããã®ä»ã®ã·ãŒã³ãªããžã§ã¯ãã®ã¬ã³ããªã³ã°ãæ
åœããŸãã ãã®ããã»ã¹ãããããç解ããããã«ãã·ãŒã³ã°ã©ãã«ã€ããŠè©±ããŸãããã
ã·ãŒã³ã°ã©ã
ã·ãŒã³ã°ã©ãã¯ãã·ãŒã³ã§äœ¿çšãããããŒã¿æ§é ã§ãã ã·ãŒã³ã°ã©ãã«ã¯ããŒãïŒããŒãïŒãå«ãŸããŸãã ã¡ãªã¿ã«ãã·ãŒã³ã°ã©ãã¯ã·ãŒã³ã°ã©ããšåŒã°ããŸãããå®éã«ã¯ããªãŒã§ãã
ãã§ã«å°ãè€éã«èŠããŸãã æåçãªäººãå¿
èŠãªå ŽåãSceneãå
éšã«ã©ã®ããã«é
眮ãããŠããããç¥ãå¿
èŠããããŸããïŒ ããã¯ãã·ãŒã³ã®ã¬ã³ããªã³ã°æ¹æ³ãç解ããããã«éèŠã§ãã ã¹ãã©ã€ããšã¢ãã¡ãŒã·ã§ã³ãã²ãŒã ã«è¿œå ãããšãã¯ãç®çã®çµæãåŸãããããšã確èªããå¿
èŠããããŸãã
Cocos2d-xã¯ã察称ããªãŒãã©ããŒãµã«ãå®è¡ããŸãïŒå·ŠåŽã®ãµãããªãŒãæåã«ã¢ã¯ã»ã¹ããã次ã«ããŒãã次ã«å³åŽã®ãµãããªãŒãã¢ã¯ã»ã¹ãããŸãïŒã ããã¯ãããªãŒã®å³åŽãæåŸã«ã¬ã³ããªã³ã°ãããããšãæå³ãããäžããã衚瀺ãããããšãæå³ããŸãïŒã€ãŸããèŠèŠçã«æ®ãã¯äžã«ãããŸãïŒã
ããã説æããã®ã¯éåžžã«ç°¡åã§ãããã®ã·ãŒã³ãèŠãŠã¿ãŸãããã
ç°¡ç¥åããããã®ïŒãªããžã§ã¯ãã®äžéšã¯ã·ãŒãã§ã¯ãªãããã©ã³ãã§ãïŒã¯ããªãŒã®åœ¢ã§è¡šãããšãã§ããŸãïŒ
ãªãŒããŒã«é¢é£ä»ããããŠããå±æ§ã¯zãªãŒããŒã§ãã ããªãŒã®å·ŠåŽã¯è² ã®zãªãŒããŒã§ãå³åŽã¯æ£ã§ãã ããã念é ã«çœ®ããŠãééããé¿ããããšãã§ããŸãã ããã«ãæå®ãããzãªãŒããŒã䜿çšããŠä»»æã®é åºã§èŠçŽ ãè¿œå ã§ããèŠçŽ ã¯èªåçã«ãœãŒããããŸãã
Sceneã¯ãªããžã§ã¯ãã®ã³ã¬ã¯ã·ã§ã³ïŒããŒãïŒãšèããããšãã§ããŸãã äžèšã®ã·ãŒã³ãåå²ããŠãã·ãŒã³ã°ã©ãã衚瀺ããŸãã
å·ŠåŽã®ã·ãŒã³ã¯ãæç»ãããé åºã決å®ããããŸããŸãªzãªãŒããŒãšãšãã«ã¹ã¿ãã¯ãããããŒãïŒããŒãïŒã§ãã
APIãåŒã³åºãããšã«ãããã·ãŒã³ã«èŠçŽ ãè¿œå ã§ããŸãã
// z-order â2, // scene->addChild(title_node, â2); // z-order , â 0 scene->addChild(label_node); // z-order 1, // scene->addChild(sprite_node, 1);
ã¹ãã©ã€ã
ãã¹ãŠã®ã²ãŒã ã¯ã¹ãã©ã€ãã䜿çšããŸãã ãããã¯ãç»é¢äžã移åãããã®ã§ãã ãããã管çã§ããŸãã ã²ãŒã ã®äž»ãªãã£ã©ã¯ã¿ãŒã¯ãããããã¹ãã©ã€ãã§ãã 泚æããããšãéèŠã§ãïŒã²ãŒã ã®ãã¹ãŠã®ã°ã©ãã£ãã¯èŠçŽ ãã¹ãã©ã€ãã§ã¯ãããŸããã ã¢ã€ãã ãç»é¢äžã移åããªãå Žåãããã¯åãªãããŒãã§ãã
ã²ãŒã ã®ã·ãŒã³ãããäžåºŠèŠãŠã¿ãŸãããã
ã¹ãã©ã€ãã¯ã²ãŒã ã®éèŠãªèŠçŽ ã§ãã ã¹ãã©ã€ãã®äœæã¯éåžžã«ç°¡åã§ãã
// auto mySprite = Sprite::create("mysprite.png"); // mySprite->setPosition(Vec2(500, 0)); // mySprite->setRotation(40); mySprite->setScale(2.0); // addChild(mySprite); // .
ã¢ã¯ã·ã§ã³
ç»é¢ã«ã¹ãã©ã€ããè¿œå ããŠã·ãŒã³ãäœæããããšã¯ãã¿ã¹ã¯ã®äžéšã«ãããŸããã çµå±ã®ãšãããç§ãã¡ã¯ããããã¹ãŠç§»åããå¿
èŠããããŸãã ãã®ããã«ãã¢ã¯ã·ã§ã³ïŒã¢ã¯ã·ã§ã³ïŒããããŸãã 移åãå転ãå転-ãããã¯ãã¹ãŠã¢ã¯ã·ã§ã³ã²ãŒã ã§ãã ã¢ã¯ã·ã§ã³ã¯ãAndroid APIã®
ValueAnimatorã«éåžžã«äŒŒãŠããŸãã
auto mySprite = Sprite::create("Blue_Front1.png«); // 50 10 , : auto moveBy = MoveBy::create(2, Vec2(50,10)); mySprite->runAction(moveBy); // : auto moveTo = MoveTo::create(2, Vec2(50,10)); mySprite->runAction(moveTo);
座æšç³»
Cocos2dã¯ãã«ã«ã座æšç³»ã䜿çšããããšã«æ³šæããŠãã ããã ã€ãŸãããã€ã³ãïŒ0ã0ïŒã¯å·Šäžã«ãããŸãã ããã«ãããCocos2dã¯ãããšãã°ãåãAndroid APIãšåºå¥ãããŸãã
7.ã²ãŒã ã®ã¢ã€ãã¢
次ã«ãCocos2dã®åäœã説æããããã«ãã²ãŒã ã®ãããã¿ã€ããäœæããŸãã ã²ãŒã ã®èãæ¹ã¯éåžžã«åçŽã§ããããšãã°ãçµµæåãªã©ã®ãªããžã§ã¯ãïŒãªãããã§ã¯ãªãã®ã§ããïŒïŒç»é¢ãã©ã³ãã ã«åãåããããããé£ã¹ã人ãããŸãã ãããŠãéã«æ²ããç¬é¡ãããé ãããšããŸãã ããã«ãé£ã¹ã人ã®å¶åŸ¡ã¯ãç°ãªãæ¹åãžã®é»è©±ã®åå·®ã«ãããã®ã§ãã ãããã£ãŠãã¹ãã©ã€ããã¢ã¯ã·ã§ã³ãã·ãŒã³ã®å€æŽãå é床èšã®äœ¿çšã䜿çšããŸãã
ã¢ã€ãã¢ãéåžžã«ã·ã³ãã«ã§éå±ã§ããããšã¯æããã§ããã100äžãäœããšããã¿ã¹ã¯ãèšå®ããŠããŸããïŒããããä»ã®ãšããã¯ãïŒïŒ ãããå§ããŸãããïŒ
8.ã¹ãã©ã€ããè¿œå ãã
åºç€ãšããŠãèšäºã®åé ã§äœæããMyGameã¢ããªã±ãŒã·ã§ã³ã䜿çšããŸãã ã€ã³ã¿ãŒãããã§ç°¡åã«èŠã€ããããšãã§ããããŸãã¯ä»ã®çµµæåã«çœ®ãæããããšãã§ããçµµæåã¯ãç§ãã¡ã«ãšã£ãŠäŸ¿å©ã§ãã ããã€ãã®ããŒã«ã
ãã¹ãŠã®ãªãœãŒã¹ã¯Resourcesãã£ã¬ã¯ããªã«é
眮ããå¿
èŠããããŸãã
次ã®ã³ãŒããinitïŒïŒã¡ãœããã«è¿œå ããŸãã
for (int i = 0; i < SMILES_COUNT; i++) { std::string result = «emoji-» + itos(i); Sprite *sprite = Sprite::create(result); if (sprite != NULL) { this->addChild(sprite); listSprites.push_front(sprite); } }
listSpritesã¯ãã¹ãŠã®ç¬é¡ã®ãªã¹ãã§ããç»é¢ã®åšãã«åããè¿œå ãããšäŸ¿å©ã§ãã åæã«äœæãã移åã®éçšã§å°ãå転ããããã«ããŸãã
Point *sizeStart = randomEndPoint(); // Point *sizeStop = randomEndPoint(); // auto rotateAction = RotateTo::create(2, 90); // 90 . auto moveAction = MoveTo::create(2, *sizeStop); sprite->setPosition(*sizeStart); auto mySpawn = Spawn::createWithTwoActions(rotateAction, moveAction); auto seq = Sequence::create(mySpawn, CallFunc::create(callback), nullptr); sprite->runAction(seq);
ããã§ã¯ã2ã€ã®ã¢ã¯ã·ã§ã³ãåæã«å®è¡ããSpawnãšSequenceãäœæããããã«ãSequenceã§ã³ãŒã«ããã¯ïŒã¢ã¯ã·ã§ã³ã®å®è¡æã«åŒã³åºãããé¢æ°ãžã®ãªã³ã¯ïŒãæž¡ããŸãã ããã«ãããã¹ãã©ã€ããç¡éã«ç§»åããããã«ãã¢ã¯ã·ã§ã³ãæ¯ååèµ·åã§ããŸãã åã¹ãã©ã€ãã«å¯ŸããŠãã®ãããªã¢ã¯ã·ã§ã³ãäœæããå¿
èŠããããŸãã
randomEndPointã¡ãœããã¯ãç»é¢ã®å¢çã§ã©ã³ãã ã«éžæããããã€ã³ããè¿ããŸãã
ä»ãå€ãã®åãã¹ãã©ã€ãããããŸãïŒ
ãŸãã貪é£è
ãè¿œå ããå¿
èŠããããŸãããããã¯åæ§ã«è¡ãããããã«ã€ããŠã¯èª¬æããŸããã
9.è¡çªè§£æ±º
ããã§ãè¡çªã解決ããããã®ã³ãŒããèšè¿°ããå¿
èŠããããŸãã ã€ãŸããå°ããªé¡æåã貪é£è
ã«è§Šããç¬éãæ€åºããŸãã
ãããè¡ãã«ã¯ãonUpdateã¡ãœããããªãŒããŒã©ã€ãããŸãã
void HelloWorld::update(float dt) { ... }
ç»é¢ãæŽæ°ããããšãã«ãã®ã¡ãœãããåŒã³åºãã«ã¯ã
scheduleUpdateïŒïŒãåŒã³åºããŸãã
void HelloWorld::init(float dt) { this->scheduleUpdate(); ... }
ããã§ãç»é¢ãæŽæ°ããããã³ã«ïŒããã³ã¹ãã©ã€ãã®äœçœ®ãããããå€æŽããããã³ã«ïŒã
updateã¡ãœãããåŒã³åºãããŸãã ç°¡åã«ããããã«ã次ã®ããã«èšè¿°ã§ããŸãã
void HelloWorld::init(float dt) { if(spriteSmile->getPosition().distance(eaterSprite->getPosition()) < spriteSmile->getBoundingBox().size.width/2 + eaterSprite->getBoundingBox().size.width/2){} }
è¡çªãèŠã€ãã£ããããã€ã³ããæ°ããŠã¢ã¯ã·ã§ã³ãåéã§ããŸãã
void HelloWorld::init(float dt) { if(spriteSmile->getPosition().distance(eaterSprite->getPosition()) < spriteSmile->getBoundingBox().size.width/2 + eaterSprite->getBoundingBox().size.width/2){ scoreâ; spriteSmile->stopAllActions(); spriteSmile->setPosition(0, 0); runActionForSmile(spriteSmile); } }
10.å é床èš
å é床èšã®æäœã¯ãè¡çªã®è§£æ±ºãšåããããç°¡åã§ãããã«ç°¡åã§ãã
éå§ããã«ã¯ãç®çã®ã€ãã³ãããµãã¹ã¯ã©ã€ãããŸãã
void HelloWorld::init(float dt) { ... this->setAccelerometerEnabled(true); ... }
å é床èšã®å€ãååŸããã«ã¯ã
onAccelerationã¡ãœãããåå®çŸ©ã
ãŸã ã
void HelloWorld::init(float dt) { void GameScene::onAcceleration(cocos2d::Acceleration *acc, cocos2d::Event *unused_event) { Director *director = Director::getInstance(); auto viewSize = director->getWinSize(); float minSize = MIN(viewSize.width, viewSize.height); double targetSpeedY = acc->y * minSize*2; double targetSpeedX = acc->x * minSize*2; eaterPointsPerSecY = (eaterPointsPerSecY * .8f) + (targetSpeedY * .2f); eaterPointsPerSecX = (eaterPointsPerSecX * .8f) + (targetSpeedX * .2f); } }
updateã¡ãœããã§eaterPointsPerSecXããã³eaterPointsPerSecYãèšç®ããåŸã
setPositionïŒïŒãåŒã³åºããŸãã
float diffY = (eaterPointsPerSecY * dt)*1.3f; float diffX = (eaterPointsPerSecX * dt)*1.3f; float newY = eaterSprite->getPosition().y + diffY; float newX = eaterSprite->getPosition().x + diffX; eaterSprite->setPosition(newX, newY);
ãã¡ãããå®éã®ã²ãŒã ã§ã¯ãé£ã¹ã人ãç»é¢ã®å¢çãè¶ããªãããã«ããå¿
èŠããããŸãã ããããä»ã®ãšãããããã«ã€ããŠè©³ããèŠãŠãããŸãããã
ããã§ãç§ãã¡ã¯ç©ºé£ã¶é¡æåãäœæããé£ã¹ã人ãè¿œå ããå é床èšã®å©ããåããŠãããå¶åŸ¡ããŸãã...ããã§ãããã²ãŒã ãªãŒããŒïŒãç»é¢ãè¿œå ããŸããã
11.ã²ãŒã ãªãŒããŒïŒ
ããã«æ°ããã·ãŒã³ãå¿
èŠã§ãã HelloWorldãã®ãããŠããã¿ãŒã³ã§äœæã§ããŸãã ã ããç§ãã¡ã¯ããïŒ
// GameOverScene.h #include «cocos2d.h» class GameOverScene : public cocos2d::Layer { public: virtual bool init(); static cocos2d::Scene *createScene(); void startAgainCallback(cocos2d::Ref *pSender); CREATE_FUNC(GameOverScene); };
// GameOverScene.cpp #include <ui/UIDeprecated.h> #include «GameOverScene.h» #include «GameScene/GameScene.h» using namespace std; using namespace cocos2d; using namespace cocos2d::ui; Scene *GameOverScene::createScene() { auto scene = Scene::create(); GameOverScene* layer = GameOverScene::create(); scene->addChild(layer); return scene; } bool GameOverScene::init() { ////////////////////////////// // 1. super init first if (!Layer::init()) { return false; } Size visibleSize = Director::getInstance()->getVisibleSize(); Vec2 origin = Director::getInstance()->getVisibleOrigin(); auto gameOVerLabel = Label::createWithTTF("Game over!«, «fonts/Comfortaa-Bold.ttf», 24); gameOVerLabel->setTextColor(Color4B::WHITE); auto startAgainLabel = Label::createWithTTF("Play again«, «fonts/Comfortaa-Bold.ttf», 30); startAgainLabel->setTextColor(Color4B::ORANGE); auto playAgainItem = MenuItemLabel::create(startAgainLabel, CC_CALLBACK_1(GameOverScene::startAgaingCallback, this)); auto menu = Menu::create(playAgainItem, NULL); gameOVerLabel->setPosition(visibleSize.width/2, visibleSize.height/2 + gameOVerLabel->getContentSize().height * 3); menu->setPosition(visibleSize.width/2, gameOVerLabel->getPosition().y â gameOVerLabel->getContentSize().height); this->addChild(gameOVerLabel); this->addChild(menu); } void GameOverScene::startAgaingCallback(Ref *pSender) { Director::getInstance()->replaceScene( TransitionFade::create(0.5, HelloWorld::createScene(), Color3B(255, 255, 255))); } #endif //MYGAME_GAMEOVERSCENE_H
ããã«æžãããŠããã»ãšãã©ãã¹ãŠã®ãã®ã¯ããã§ã«ç§ãã¡ã«ç¥ãããŠããŸãã
ããã§ã¯ãHelloWorldãšåæ§ã«ãã¡ãã¥ãŒé
ç®ã§ããã©ãã«ãäœæããŸããã€ãŸããonClickã€ãã³ããåŠçã§ããŸãã MenuItemLabelãäœæããŠããã©ã¡ãŒã¿ãŒã®1ã€ã«ãã·ãŒã³ãå€æŽããstartAgaingCallbacké¢æ°ãžã®ãªã³ã¯ãæž¡ããŸãã TransitionFadeãšãã§ã¯ãã䜿çšããŠã·ãŒã³ãå€æŽããããšã«æ³šæããŠãã ããã
åæ§ã«ãã²ãŒã ã·ãŒã³ãGameOverSceneã«å€æŽã§ããŸãã
void HelloWorld::update(float dt) { if(score <= 0){ Director::getInstance()->replaceScene(TransitionFade::create(0.5, GameOverScene::createScene(score), Color3B(255,0,0))); }}
GameOverïŒ
åç
§è³æ
www.cocos2d-x.orgwww.jetbrains.com/clionhabrahabr.ru/post/126582www.cocos2d-x.org/programmersguidewww.raywenderlich.com/33752/cocos2d-x-tutorial-for-ios-and-android-space-game