Создание игр с помощью cocos2d (Станислав Краснояров)
DESCRIPTION
Презентация с Станислава Красноярова «Создание игр с помощью Cocos2D», который прошел 24 ноября 2012 года в рамках 2Niversity: http://2niversity.ru/?tiny=16 Станислав Краснояров — руководитель команды/разработчик с десятилетним стажем. С момента выхода iPhone SDK вместе с небольшой командой занимается портированием игр с PC на iOS (Objective-C, C++, cocos-2d). Преподаватель авторского курса по разработке под iOS.TRANSCRIPT
![Page 1: Создание игр с помощью Cocos2D (Станислав Краснояров)](https://reader036.vdocuments.net/reader036/viewer/2022081720/5586900dd8b42a6f718b466c/html5/thumbnails/1.jpg)
Разработка игр с помощью cocos2d
![Page 2: Создание игр с помощью Cocos2D (Станислав Краснояров)](https://reader036.vdocuments.net/reader036/viewer/2022081720/5586900dd8b42a6f718b466c/html5/thumbnails/2.jpg)
Home Sweet Home
Treasure Masters, Inc.
![Page 3: Создание игр с помощью Cocos2D (Станислав Краснояров)](https://reader036.vdocuments.net/reader036/viewer/2022081720/5586900dd8b42a6f718b466c/html5/thumbnails/3.jpg)
– “Компьютерные игры – это перемещение картинок на экране в ответ на действия игрока”
![Page 4: Создание игр с помощью Cocos2D (Станислав Краснояров)](https://reader036.vdocuments.net/reader036/viewer/2022081720/5586900dd8b42a6f718b466c/html5/thumbnails/4.jpg)
![Page 5: Создание игр с помощью Cocos2D (Станислав Краснояров)](https://reader036.vdocuments.net/reader036/viewer/2022081720/5586900dd8b42a6f718b466c/html5/thumbnails/5.jpg)
![Page 6: Создание игр с помощью Cocos2D (Станислав Краснояров)](https://reader036.vdocuments.net/reader036/viewer/2022081720/5586900dd8b42a6f718b466c/html5/thumbnails/6.jpg)
![Page 7: Создание игр с помощью Cocos2D (Станислав Краснояров)](https://reader036.vdocuments.net/reader036/viewer/2022081720/5586900dd8b42a6f718b466c/html5/thumbnails/7.jpg)
рендерингспрайтовая анимацияпокадровая анимацияобработка вводаобработка коллизий
![Page 8: Создание игр с помощью Cocos2D (Станислав Краснояров)](https://reader036.vdocuments.net/reader036/viewer/2022081720/5586900dd8b42a6f718b466c/html5/thumbnails/8.jpg)
![Page 9: Создание игр с помощью Cocos2D (Станислав Краснояров)](https://reader036.vdocuments.net/reader036/viewer/2022081720/5586900dd8b42a6f718b466c/html5/thumbnails/9.jpg)
cocos2d-iphone Objective-C / iOS
cocos2d-x C++/crossplatform
![Page 10: Создание игр с помощью Cocos2D (Станислав Краснояров)](https://reader036.vdocuments.net/reader036/viewer/2022081720/5586900dd8b42a6f718b466c/html5/thumbnails/10.jpg)
v. 1.x OpenGL ES 1.1v. 2.x OpenGL ES 2.0
![Page 11: Создание игр с помощью Cocos2D (Станислав Краснояров)](https://reader036.vdocuments.net/reader036/viewer/2022081720/5586900dd8b42a6f718b466c/html5/thumbnails/11.jpg)
Объектная модель
![Page 12: Создание игр с помощью Cocos2D (Станислав Краснояров)](https://reader036.vdocuments.net/reader036/viewer/2022081720/5586900dd8b42a6f718b466c/html5/thumbnails/12.jpg)
CCNodepositionscalerotationchildren
![Page 13: Создание игр с помощью Cocos2D (Станислав Краснояров)](https://reader036.vdocuments.net/reader036/viewer/2022081720/5586900dd8b42a6f718b466c/html5/thumbnails/13.jpg)
CCNode
CCScene CCSprite Customimage
![Page 14: Создание игр с помощью Cocos2D (Станислав Краснояров)](https://reader036.vdocuments.net/reader036/viewer/2022081720/5586900dd8b42a6f718b466c/html5/thumbnails/14.jpg)
![Page 15: Создание игр с помощью Cocos2D (Станислав Краснояров)](https://reader036.vdocuments.net/reader036/viewer/2022081720/5586900dd8b42a6f718b466c/html5/thumbnails/15.jpg)
CCScene
PlayerNode : CCNode
CCSprite
EnemyNode : CCNode
CCSprite
![Page 16: Создание игр с помощью Cocos2D (Станислав Краснояров)](https://reader036.vdocuments.net/reader036/viewer/2022081720/5586900dd8b42a6f718b466c/html5/thumbnails/16.jpg)
DEMO
![Page 17: Создание игр с помощью Cocos2D (Станислав Краснояров)](https://reader036.vdocuments.net/reader036/viewer/2022081720/5586900dd8b42a6f718b466c/html5/thumbnails/17.jpg)
CCNodepositionscalerotationanchorPointchildren
![Page 18: Создание игр с помощью Cocos2D (Станислав Краснояров)](https://reader036.vdocuments.net/reader036/viewer/2022081720/5586900dd8b42a6f718b466c/html5/thumbnails/18.jpg)
anchorPoint = (0, 0) anchorPoint = (0.5, 0.5)
![Page 19: Создание игр с помощью Cocos2D (Станислав Краснояров)](https://reader036.vdocuments.net/reader036/viewer/2022081720/5586900dd8b42a6f718b466c/html5/thumbnails/19.jpg)
anchorPoint = (0, 0) anchorPoint = (0.5, 0.5)
scale
![Page 20: Создание игр с помощью Cocos2D (Станислав Краснояров)](https://reader036.vdocuments.net/reader036/viewer/2022081720/5586900dd8b42a6f718b466c/html5/thumbnails/20.jpg)
anchorPoint = (0, 0) anchorPoint = (0.5, 0.5)
![Page 21: Создание игр с помощью Cocos2D (Станислав Краснояров)](https://reader036.vdocuments.net/reader036/viewer/2022081720/5586900dd8b42a6f718b466c/html5/thumbnails/21.jpg)
anchorPoint = (0, 0) anchorPoint = (0.5, 0.5)
![Page 22: Создание игр с помощью Cocos2D (Станислав Краснояров)](https://reader036.vdocuments.net/reader036/viewer/2022081720/5586900dd8b42a6f718b466c/html5/thumbnails/22.jpg)
Спрайтовая анимация
![Page 23: Создание игр с помощью Cocos2D (Станислав Краснояров)](https://reader036.vdocuments.net/reader036/viewer/2022081720/5586900dd8b42a6f718b466c/html5/thumbnails/23.jpg)
Спрайтовая анимация
update (float dt) { if (state == Moving) {
position.x += 5 * dt; }}
CustomNode
![Page 24: Создание игр с помощью Cocos2D (Станислав Краснояров)](https://reader036.vdocuments.net/reader036/viewer/2022081720/5586900dd8b42a6f718b466c/html5/thumbnails/24.jpg)
Спрайтовая анимация
update (float dt) { if (state == Moving) {
position.x += 5 * dt; }}
action = new MoveAction(50 /* x */,
0 /* y */, 5 /* sec */)
node->runAction(action)
обычно cocos2d
![Page 25: Создание игр с помощью Cocos2D (Станислав Краснояров)](https://reader036.vdocuments.net/reader036/viewer/2022081720/5586900dd8b42a6f718b466c/html5/thumbnails/25.jpg)
Виды действийбазовые действия
CCMoveTo, CCMoveByCCScaleTo, CCScaleBy...
управление
CCSequence, CCSpawn, CCRepeat, CCRepeatForever
callback
CCCallFunc
![Page 26: Создание игр с помощью Cocos2D (Станислав Краснояров)](https://reader036.vdocuments.net/reader036/viewer/2022081720/5586900dd8b42a6f718b466c/html5/thumbnails/26.jpg)
Покадровая анимация
![Page 27: Создание игр с помощью Cocos2D (Станислав Краснояров)](https://reader036.vdocuments.net/reader036/viewer/2022081720/5586900dd8b42a6f718b466c/html5/thumbnails/27.jpg)
![Page 28: Создание игр с помощью Cocos2D (Станислав Краснояров)](https://reader036.vdocuments.net/reader036/viewer/2022081720/5586900dd8b42a6f718b466c/html5/thumbnails/28.jpg)
Покадровая анимация
• CCAnimation – набор кадров
• addFrame(“frame_x.png”)
• CCAnimate::create – action
• CCNode::runAction(CCAnimate ... )
![Page 29: Создание игр с помощью Cocos2D (Станислав Краснояров)](https://reader036.vdocuments.net/reader036/viewer/2022081720/5586900dd8b42a6f718b466c/html5/thumbnails/29.jpg)
DEMO
![Page 30: Создание игр с помощью Cocos2D (Станислав Краснояров)](https://reader036.vdocuments.net/reader036/viewer/2022081720/5586900dd8b42a6f718b466c/html5/thumbnails/30.jpg)
Обработка нажатий
![Page 31: Создание игр с помощью Cocos2D (Станислав Краснояров)](https://reader036.vdocuments.net/reader036/viewer/2022081720/5586900dd8b42a6f718b466c/html5/thumbnails/31.jpg)
CCNode
CCScene CCSprite Customimage
CCLayer
![Page 32: Создание игр с помощью Cocos2D (Станислав Краснояров)](https://reader036.vdocuments.net/reader036/viewer/2022081720/5586900dd8b42a6f718b466c/html5/thumbnails/32.jpg)
CCScene
hudLayer : CCLayer
...
gameLayer : CCLayer
...
![Page 33: Создание игр с помощью Cocos2D (Станислав Краснояров)](https://reader036.vdocuments.net/reader036/viewer/2022081720/5586900dd8b42a6f718b466c/html5/thumbnails/33.jpg)
CCTargetedDelegate
virtual bool ccTouchBegan(CCTouch *, CCEvent *);virtual void ccTouchMoved(CCTouch *, CCEvent *);virtual void ccTouchEnded(CCTouch *, CCEvent *);virtual void ccTouchCancelled(CCTouch *, CCEvent *);
ControlLayer : CCLayer
![Page 34: Создание игр с помощью Cocos2D (Станислав Краснояров)](https://reader036.vdocuments.net/reader036/viewer/2022081720/5586900dd8b42a6f718b466c/html5/thumbnails/34.jpg)
c-tor() { setIsTouchEnabled(true);}
void X::registerWithTouchDispatcher(){ CCDirector::sharedDirector()
->getTouchDispatcher() ->addTargetedDelegate(this, 0, true);
}
ControlLayer : CCLayer
![Page 35: Создание игр с помощью Cocos2D (Станислав Краснояров)](https://reader036.vdocuments.net/reader036/viewer/2022081720/5586900dd8b42a6f718b466c/html5/thumbnails/35.jpg)
bool X::ccTouchBegan(CCTouch *pTouch, CCEvent *) { CCPoint touchPoint = convertTouchToNodeSpace(pTouch); ...
return true;}
ControlLayer : CCLayer
![Page 36: Создание игр с помощью Cocos2D (Станислав Краснояров)](https://reader036.vdocuments.net/reader036/viewer/2022081720/5586900dd8b42a6f718b466c/html5/thumbnails/36.jpg)
DEMO
![Page 37: Создание игр с помощью Cocos2D (Станислав Краснояров)](https://reader036.vdocuments.net/reader036/viewer/2022081720/5586900dd8b42a6f718b466c/html5/thumbnails/37.jpg)
Обработка коллизий
![Page 38: Создание игр с помощью Cocos2D (Станислав Краснояров)](https://reader036.vdocuments.net/reader036/viewer/2022081720/5586900dd8b42a6f718b466c/html5/thumbnails/38.jpg)
for each bullet for each enemy if (bullet
hits enemy)
enemy hit
![Page 39: Создание игр с помощью Cocos2D (Станислав Краснояров)](https://reader036.vdocuments.net/reader036/viewer/2022081720/5586900dd8b42a6f718b466c/html5/thumbnails/39.jpg)
![Page 40: Создание игр с помощью Cocos2D (Станислав Краснояров)](https://reader036.vdocuments.net/reader036/viewer/2022081720/5586900dd8b42a6f718b466c/html5/thumbnails/40.jpg)
![Page 41: Создание игр с помощью Cocos2D (Станислав Краснояров)](https://reader036.vdocuments.net/reader036/viewer/2022081720/5586900dd8b42a6f718b466c/html5/thumbnails/41.jpg)
DEMO
![Page 42: Создание игр с помощью Cocos2D (Станислав Краснояров)](https://reader036.vdocuments.net/reader036/viewer/2022081720/5586900dd8b42a6f718b466c/html5/thumbnails/42.jpg)
• Объектная модель
• Отрисовка с помощью CCSprite
• Спрайтовая анимация (update или action)
• Покадровая анимация
• Обработка нажатий
• Обработка коллизий
![Page 43: Создание игр с помощью Cocos2D (Станислав Краснояров)](https://reader036.vdocuments.net/reader036/viewer/2022081720/5586900dd8b42a6f718b466c/html5/thumbnails/43.jpg)
Первые шаги
![Page 44: Создание игр с помощью Cocos2D (Станислав Краснояров)](https://reader036.vdocuments.net/reader036/viewer/2022081720/5586900dd8b42a6f718b466c/html5/thumbnails/44.jpg)
• Скачать и установить cocos2d/cocos2d-x
• Создать и запустить проект по шаблону
• (опц.) Обсудить реализацию игры
• Создать первый класс игрового объекта
![Page 45: Создание игр с помощью Cocos2D (Станислав Краснояров)](https://reader036.vdocuments.net/reader036/viewer/2022081720/5586900dd8b42a6f718b466c/html5/thumbnails/45.jpg)
![Page 46: Создание игр с помощью Cocos2D (Станислав Краснояров)](https://reader036.vdocuments.net/reader036/viewer/2022081720/5586900dd8b42a6f718b466c/html5/thumbnails/46.jpg)
Текстурные атласы
![Page 47: Создание игр с помощью Cocos2D (Станислав Краснояров)](https://reader036.vdocuments.net/reader036/viewer/2022081720/5586900dd8b42a6f718b466c/html5/thumbnails/47.jpg)
![Page 48: Создание игр с помощью Cocos2D (Станислав Краснояров)](https://reader036.vdocuments.net/reader036/viewer/2022081720/5586900dd8b42a6f718b466c/html5/thumbnails/48.jpg)
![Page 49: Создание игр с помощью Cocos2D (Станислав Краснояров)](https://reader036.vdocuments.net/reader036/viewer/2022081720/5586900dd8b42a6f718b466c/html5/thumbnails/49.jpg)
![Page 50: Создание игр с помощью Cocos2D (Станислав Краснояров)](https://reader036.vdocuments.net/reader036/viewer/2022081720/5586900dd8b42a6f718b466c/html5/thumbnails/50.jpg)
CCSpriteSheet
CCSprite
CCSprite
CCSprite
![Page 51: Создание игр с помощью Cocos2D (Станислав Краснояров)](https://reader036.vdocuments.net/reader036/viewer/2022081720/5586900dd8b42a6f718b466c/html5/thumbnails/51.jpg)
Particle System
![Page 52: Создание игр с помощью Cocos2D (Станислав Краснояров)](https://reader036.vdocuments.net/reader036/viewer/2022081720/5586900dd8b42a6f718b466c/html5/thumbnails/52.jpg)
CCParticleSystem .position .velocity .gravity .texture...addChild(system)