喵星战争(八):游戏主模块的实现-2
2013-08-27 23:04
369 查看
游戏中一般需要在游戏循环的每帧中控制渲染和逻辑。在Cocos2d-x引擎中已经不需要再控制渲染,可以根据游戏的需要加入每帧更新的逻辑函数,在初始化函数中调用scheduleUpdate函数,然后重写updata函数便可以在游戏循环中控制逻辑。
本游戏中需要在更新函数中做以下几件事:
1、游戏背景的移动;
2、主角和敌人的碰撞检测;
3、主角和敌人子弹的碰撞检测;
4、主角子弹和敌人的碰撞检测。
update函数代码如下:
主角受伤逻辑,代码如下:
下面先讲述下知识点:
1.scheduleUpdate():该函数是为了把当前节点(比如CCLayer)添加到队列里,只要把节点添加到队列里后,那么这个节点在游戏运行的每一帧被调用一次update函数。
2.CCActionInterval家族(持续动作):
持续动作,顾名思义,就是该动作的执行将持续一段时间。因此持续动作的静态生成函数,往往附带一个时间值Duration。
持续动作比立即动作的数量多很多,常用的CCActionInterval子类动作有:
简单的:
CCMoveTo:移动到
CCMoveBy:按......移动
CCJumpTo:t跳跃到
CCJumpBy:按......跳跃
CCBezierTo:贝兹移动到
CCBezierBy:按……贝兹移动
CCRotateTo:旋转到
CCRotateBy:按……旋转
CCScaleTo:缩放到
CCScaleBy:按……缩放
CCSkewTo:切变到
CCSkewBy:按……切变
CCTintTo:颜色渐变到
CCTintBy:按……颜色渐变
CCFadeIn:从无到有,也叫淡入
CCFadeOut:从有到无,也叫淡出
CCFadeTo:改变不透明度到某个值
CCBlink:闪耀
CCDelayTime:延时
复杂的:
CCAnimate:帧动画,这个我们在第四节讲过,关于动画的问题不是一句两句就能说完,以后会慢慢展开
CCGridAction家族:网格动画
包装器:CCRepeat:重复执行几次、CCRepeatForever:永远执行、CCSequence:按序列执行、CCSpawn:同时执行、CCActionEase家族:补间动画
更详细的链接:http://4137613.blog.51cto.com/4127613/762768
本游戏中需要在更新函数中做以下几件事:
1、游戏背景的移动;
2、主角和敌人的碰撞检测;
3、主角和敌人子弹的碰撞检测;
4、主角子弹和敌人的碰撞检测。
update函数代码如下:
void GameMain::update(float time) { //背景移动逻辑 bg1->setPosition(ccp(bg1->getPosition().x , bg1->getPosition().y -2)); bg2->setPosition(ccp(bg2->getPosition().x , bg2->getPosition().y -2)); if (bg2->getPosition().y < 0) { float temp = bg2->getPosition().y + 480; bg1->setPosition(ccp(bg2->getPosition().x , temp)); } if (bg1->getPosition().y < 0) { float temp = bg1->getPosition().y + 480; bg2->setPosition(ccp(bg1->getPosition().x , temp)); } CCPoint hpos = hero->getPosition(); //敌人和主角子弹的碰撞检测 for (int i = 0; i< 3; i++) { GameObjEnemy *enemy = ((GameObjEnemy *)enemys->objectAtIndex(i)); CCPoint epos = enemy->getPosition(); if (enemy->islife) { for (int i = 0; i < bullets->capacity(); i++) { if (((GameHeroBullet *)bullets->objectAtIndex(i))->getIsvisable()) { if (isCollion(((GameHeroBullet *)bullets->objectAtIndex(i))->getPosition(), epos, 5, 13, 21, 28)) { enemy->setdie(); gamemark->addnumber(200); break; } } } } //敌人和主角的碰撞检测 if (!isreduce && enemy->islife && isCollion(hpos ,epos , 21, 22, 5, 21, 28)) { enemy->setdie(); setherohurt(); } } //主角和敌人子弹的碰撞检测 if (!isreduce) { for (int i = 0; i < enemybullets->capacity(); i++) { if (isCollion(hpos ,((GameEnemyBullet *)enemybullets->objectAtIndex(i))->getPosition(),21 ,22 ,5 ,13)) { setherohurt(); } } } }
主角受伤逻辑,代码如下:
void GameMain::setherohurt() { //主角受伤,减血 hero->stopAllActions(); switch(blood) { case 3: blood1->setVisible(false); blood--; break; case 2: blood2->setVisible(false); blood--; break; case 1: blood3->setVisible(false); blood--; break; case 0: if (!isover) { isover = true; setover(); } break; } CCActionInterval* action = CCBlink::create(5, 10); hero->runAction(action); schedule(schedule_selector(GameMain::resetreduce), 5.0f); isreduce = true; }
下面先讲述下知识点:
1.scheduleUpdate():该函数是为了把当前节点(比如CCLayer)添加到队列里,只要把节点添加到队列里后,那么这个节点在游戏运行的每一帧被调用一次update函数。
2.CCActionInterval家族(持续动作):
持续动作,顾名思义,就是该动作的执行将持续一段时间。因此持续动作的静态生成函数,往往附带一个时间值Duration。
持续动作比立即动作的数量多很多,常用的CCActionInterval子类动作有:
简单的:
CCMoveTo:移动到
CCMoveBy:按......移动
CCJumpTo:t跳跃到
CCJumpBy:按......跳跃
CCBezierTo:贝兹移动到
CCBezierBy:按……贝兹移动
CCRotateTo:旋转到
CCRotateBy:按……旋转
CCScaleTo:缩放到
CCScaleBy:按……缩放
CCSkewTo:切变到
CCSkewBy:按……切变
CCTintTo:颜色渐变到
CCTintBy:按……颜色渐变
CCFadeIn:从无到有,也叫淡入
CCFadeOut:从有到无,也叫淡出
CCFadeTo:改变不透明度到某个值
CCBlink:闪耀
CCDelayTime:延时
复杂的:
CCAnimate:帧动画,这个我们在第四节讲过,关于动画的问题不是一句两句就能说完,以后会慢慢展开
CCGridAction家族:网格动画
包装器:CCRepeat:重复执行几次、CCRepeatForever:永远执行、CCSequence:按序列执行、CCSpawn:同时执行、CCActionEase家族:补间动画
更详细的链接:http://4137613.blog.51cto.com/4127613/762768
相关文章推荐
- 喵星战争(七):游戏分数的实现
- 喵星战争(九):游戏主菜单的实现
- 游戏任务模块的前段主体实现逻辑示例
- cocos2dx - 制作纵版射击游戏:喵星战争 (七)
- cocos2dx - 制作纵版射击游戏:喵星战争 (四)
- 用python的TK模块实现猜成语游戏(附源码)
- 喵星战争(十):关于界面的实现
- 喵星战争(一):游戏简介
- 网络游戏客户端通信模块简单实现
- cocos2dx - 制作纵版射击游戏:喵星战争 (三)
- cocos2d-x学习日志(10) --射击游戏(喵星战争)
- 游戏任务成就体系的实现(三):数据统计模块(KeyUtil)的初始化和基本方法简述
- cocos2dx - 制作纵版射击游戏:喵星战争 (一)
- 游戏任务成就体系的实现(五):通讯模块(MsgUtil)基于NodeJS+TCP的机制的实现
- 游戏地图拼接与战争迷雾的实现
- 使用优先队列实现游戏公告模块(Java)
- cocos2dx - 制作纵版射击游戏:喵星战争 (二)
- 游戏任务成就体系的实现(六):数据访问模块(DBUtil)NodeJS下基于Mysql的实现
- cocos2dx - 制作纵版射击游戏:喵星战争 (六)
- cocos2d-x学习日志(10) --射击游戏(喵星战争)