流程控制:场景是相对不变的游戏元素集合,游戏在场景间的切换就是流程控制。
场景、层和精灵:它们是不同层次的游戏元素。通常,场景包含层,层包含精灵,场景与层是其他游戏元素的容器,而精灵是展示给玩家的图形。
节点和渲染树:一切可以显示的游戏元素都是渲染树的节点。Cocos2d-x通过遍历渲染树绘制游戏画面。场景、层或精灵作为渲染树节点,我们并没有对它们的层次做硬性限制,例如开发者可以向精灵中添加层。
动作:作用于游戏元素,规定了游戏元素运动的方式。帧动画是作用于精灵的一种特殊动作。
类似Objective-C的代码风格:使用初始化方法或工厂方法创建对象,使用访问器方法模拟属性。Cocos2d-x提供了Objective-C风格的容器CCArray和CCDictionary。
内存管理:类似Objective-C的引用计数内存管理机制,同时提供半自动的对象自动回收池,实现灵活的管理内存。
生命周期:AppDelegate负责控制游戏的生命周期。
首先新建一个MainScene的类,并模仿HelloWorld引入需要的头文件等,项目中加入两张图片,主界面和主界面按钮上的背景。
CCDirector:导演类,控制游戏流程
将AppDelegate中创建的第一个场景改为刚创建的MainScene CCScene *pScene = MainScene::scene();
CCScene:场景,层的容器 CCLayer:层,各种内容的容器
在MainScene中实现一些必须的方法,如初始化等等
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
bool MainScene::init() { bool bRet = false ; do { if ( !CCLayer::init() ) { break ; } CCSize size = CCDirector::sharedDirector()->getWinSize(); CCSprite* mainback = CCSprite::create( "Background/main_back.jpg" ); mainback->setPosition(ccp(size.width * 0.5, size.height * 0.5)); this ->addChild(mainback); CCSprite* btback1 = CCSprite::create( "Background/main_button_back.png" ); btback1->setPosition( ccp(size.width * 0.5, size.height * 0.5) ); CCLabelTTF* pLabelStart = CCLabelTTF::create( "Start" , "Consolas" , 28); pLabelStart->setPosition( ccp(75, 20) ); pLabelStart->setColor(ccc3(0, 0,0)); this ->addChild(btback1,1); btback1->addChild(pLabelStart, 5); CCSprite* btback2 = CCSprite::create( "Background/main_button_back.png" ); btback2->setPosition( ccp(size.width * 0.5, size.height * 0.5-70) ); CCLabelTTF* pLabelExit = CCLabelTTF::create( "Exit" , "Consolas" , 28); pLabelExit->setPosition( ccp(75, 20) ); pLabelExit->setColor(ccc3(0, 0, 0)); btback2->addChild(pLabelExit, 6); this ->addChild(btback2,2); setTouchEnabled( true ); bRet = true ; } while (0); return bRet; } |
在这段代码中,分别添加了一张背景,两张按钮背景,两段文字。
CCSprite:精灵,代表了游戏的最小可见单位。
上面添加的每张图片都是一个精灵。
CCSprite和CCLayer都继承自CCNode,而addChild正是CCNode中的方法,因此可以向层或者精灵中中添加精灵。
下面的代码在MainScene层响应触摸事件,获取坐标,并执行退出操作:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
void MainScene::ccTouchesBegan(CCSet* touches, CCEvent *event) { if (touches->count()==1) { CCTouch* touch = dynamic_cast <CCTouch*>(touches->anyObject()); CCPoint position = touch->getLocationInView(); position=CCDirector::sharedDirector()->convertToGL(position); CCLOG( "X = %f Y = %f" ,position.x,position.y); if (position.x>166&&position.x<313&&position.y>306&&position.y<353) { CCDirector::sharedDirector()->end(); } } } |
本文固定链接: http://blog.liubaicai.com/?p=131 转载请注明
本文固定链接: http://blog.liubaicai.com/?p=157 转载请注明