因为课程须要。然后又水平有限。所以写了个飞机大战。加上不会画画。所以图片资源也是从微信apk解压出来的,设计思路參考的偶尔e网事。
闲话不说。先讲一下设计。大体上一共分为3个场景。场景以下是Layer
開始场景:WelcomeScene -->WelcomeLayer 类似欢迎界面
游戏主场景:GameScene --> GameLayer 游戏元素加入 和 碰撞检測
结束场景:GameOverScene -->GameOverLayer
然后是游戏的元素,在GameLayer加入,一个分为4个Layer:
PlaneLayer:主角层
EnemyLayer:敌机层 ,分为3种,每种敌机生命值不一样
UFOLayer: 道具层,bullet和加bomb
BulletLayer:子弹层 bullet 和mutiBullet
然后简单讲一下碰撞检測的实现:
if(bullet->boundingBox().intersectsRect(enemy1->getBoundingBox())){
if(enemy1->getLife() == 1){
enemy1->loseLife();
bulletsToDelete->addObject(bullet);
enemy1ToDelete->addObject(enemy1);
score += ENEMY1_SCORE;
this->mControlLayer->updateScore(score);
}
}
Rect Enemy::getBoundingBox(){
Rect rect = this->m_sprite->boundingBox();
Point pos = this->convertToWorldSpace(rect.origin);
return Rect(pos.x, pos.y, rect.size.width, rect.size.height);
}
还有再来就是子弹层的处理:
子弹发射须要步骤:1.加入子弹,2.移动子弹。3移除子弹
因为须要源源不断的发射子弹,所以将子弹加入到一个SpriteBatchNode节点中。然后在这个SpriteBatchNode节点对子弹进行加入,移动,和移除,这样子做的优点是仅仅须要渲染一次。减少内存消耗
auto texture = TextureCache::getInstance()->textureForKey("shoot.png");
bulletBatchNode = SpriteBatchNode::createWithTexture(texture);
this->addChild(bulletBatchNode);
然后再讲一下图片资源的处理:
下载这个工具:plist解析工具
将微信须要的资源解析出来。然后能够用photoshop处理一下,哈哈。能够将微信的图片去掉,随便p上自己的名字
然后用TexturePacker打包。恩。大概就像这样子
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2h1bl9memxs/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
最后再讲一下编译成androidproject的步骤和细节:
1.先在Android.mk文件里加入全部必须的cpp
2.记得在AppDelegate cpp 中加入分辨率适应
glview->setDesignResolutionSize(480,800,ResolutionPolicy::SHOW_ALL);
3.在proj.android目录以下改动AndroidManifest.xml 竖屏属性:
android:screenOrientation="portrait"
4.cmd到project文件夹。命令:cocos compile -p android -j 4
源代码:飞机大战