Cocos2d-x基础实例1-放置精灵

来源:互联网 发布:2016黄石房地产数据 编辑:程序博客网 时间:2024/06/03 11:18

/*这个游戏的描述:

游戏胜利条件:完成当前关卡的击杀敌人数量,跳到下一关。

游戏失败条件:当前关卡的声明值降低为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 namespacecocos2d;

这样以后使用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");

    //获得playerSpriteSize

    CCSize playerSize=player->getContentSize();

//设置player坐标,x坐标取屏幕宽的一半,y坐标取plyaer精灵的一半   player->setPosition(ccp(winSize.width*0.5,playerSize.height*0.5));


我们的小飞机乖乖在中央了,下一篇,我们让他动起来。

原创粉丝点击