/*这个游戏的描述:
游戏胜利条件:完成当前关卡的击杀敌人数量,跳到下一关。
游戏失败条件:当前关卡的声明值降低为0
基本规则描述:游戏初始,玩家单位在屏幕左边的一个位置做一个钟摆运动,即以一定速度向上或向下移动,碰到边缘即原速度反弹。怪物从右边缘外生成,以不同的移动方式向屏幕左边移动。
移动规则:玩家可点击屏幕的上下方向,增加/减少玩家单位的移动速度(视点击的位置与玩家单位当前位置在y轴上的相对位置),每次点击都会增加/减少固定的速度。
射击规则:玩家点击射击按钮,即发射一个子弹,子弹命中一个敌人后,即可杀死它,
加分规则:杀死敌人后,加1分,与礼包单位发生碰撞,吃掉礼包,加10分。
减命规则:敌人越过屏幕左边,或者敌人与玩家单位发生碰撞,各减一命,与玩家单位碰撞的敌人单位消失。
生命初始:每关玩家初始生命值为10
积分规则:得分每关累计,并且得出最高分后,恭喜玩家
*/
上述是这个游戏的简单描述,下面开始游戏构建。
第一步:建立HelloWorld
第二步:
删掉示例代码,
HelloWorld.h中删掉下列声明:
voidmenuCloseCallback(CCObject* pSender);
HelloWorld.cpp中,删除init函数
if ( !CCLayer::init() )
{
return false;
}
以下的所有代码。
同时删除menuCloseCallback的实现。
以及那个预编译的平台判断,恩恩。
之后把resource文件夹中的图片全都删掉,太干扰视线了。
编译一下,世界清净了。
如果想再清净一下的话,把AppDelegate.cpp中的
pDirector->setDisplayStats(true);
中的true设置为false,屏幕就彻底跟哈登一样黑了。
然后我去搞架飞机,
这架飞机很萌啊,就它了。稍微P一下,要存PNG的。
把他复制到resource文件夹中去,然后在Xcode中加add一下(不知道怎么Add去面壁思过)
接着,在HelloWorld.h中添加如下代码
//定义主角精灵
CCSprite *player;
要注意一点,本人较懒,所以在预编译include之后,直接增加了
using namespace cocos2d;
这样以后使用cocos2d就不用总在前面增加“cocos2d::”这种费劲的东了
接下来,在HelloWorld.cpp的init()中,增加如下语句;
//使用CCSprite类的静态方法,生成一个CCSprite对象
player=CCSprite::spriteWithFile("Plane.png");
//设置player坐标
player->setPosition(ccp(100,100));
//把player 加入到HelloWorld 这个节点上去
this->addChild(player);
运行之后,图像是这个样子的:
好吧,这个灰机不在屏幕正中央,非常令人蛋疼,看来100,100是不行的,得换个坐标;
换成100,155之后,看起来好多了(不同设备坐标点数值的问题,请查看cocos2d的官方文档)。
但是这里面有个问题,难道每次我们都需要手动设置坐标系么?那iPad版本是不是也要设置到屏幕正中央呢??
所以我们换一种方法
依然在init()函数中:
//从CCDirector这个单件中获得屏幕坐标
CCSize winSize=CCDirector::sharedDirector()->getWinSize();
然后,setPosition变成什么样子呢?
//设置player坐标,x坐标取屏幕宽的一半
player->setPosition(ccp(winSize.width*0.5,100));
*这里面有个小知识,苹果的设备采用的是高通的芯片,实际上是不支持除法运算的,所在使用除法的时候效率很低,所以尽量采用0.5的方式,而不是/2这种方式*
这样看起来其实还不够完美,那个100是什么情况?
所以在player声明之后,我还要取到player的大小,然后把它放置到屏幕底部,代码如下:
//使用CCSprite类的静态方法,生成一个CCSprite对象
player=CCSprite::spriteWithFile("Plane.png");
//获得playerSprite的Size
CCSize playerSize=player->getContentSize();
//设置player坐标,x坐标取屏幕宽的一半,y坐标取plyaer精灵的一半 player->setPosition(ccp(winSize.width*0.5,playerSize.height*0.5));
我们的小飞机乖乖在中央了,下一篇,我们让他动起来。