当w键按下时,马里奥执行跳跃动作

执行跳跃动作也是在MarioMove函数中调用的

aaarticlea/png;base64,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" alt="" />

实际的跳跃则调用了mario对象的OnCtrlJump函数,来看看OnCtrlJump函数吧

void CMMario::OnCtrlJump()
{
//根据马里奥当前状态 来处理
switch(m_eCurMarioStatus)
{
case enMarioStatusStandLeft: //待机 和 跑动 时 马里奥允许跳跃
case enMarioStatusStandRight:
case enMarioStatusRunLeft:
case enMarioStatusRunRight:
{
//播放跳跃动画
switch(m_eCurMarioLevel)
{
case enMarioLevelSmall:
{
m_pCcbReader->getAnimationManager()->runAnimationsForSequenceNamed(_CCB_MARIO_SMALL_JUMP_);
}break;
case enMarioLevelBig:
{
m_pCcbReader->getAnimationManager()->runAnimationsForSequenceNamed(_CCB_MARIO_BIG_JUMP_);
}break;
case enMarioLevelMax:
{
m_pCcbReader->getAnimationManager()->runAnimationsForSequenceNamed(_CCB_MARIO_MAX_JUMP_);
}break;
} if(getActionByTag(enTagOfActionJump)==NULL)
{
//强制瞬间离地
setPositionY(getPositionY()+10.f);
//增加跳跃运动
CCJumpTo *pJump = CCJumpTo::create(_MARIO_BASIC_JUMP_TIME_,ccp(getPositionX(),getPositionY()-10.f),_MARIO_BASIC_JUMP_HEIGHT_,1);
if(pJump==NULL)
{
CCAssert(false,"Can't Create Jump!");
return;
}
//为Jump设置独立的Tag
pJump->setTag(enTagOfActionJump);
runAction(pJump); m_fMarioJumpMaxHeight = -100.f;
}
//将Mario状态设置为悬空
SetMarioStatus(m_bFaceToRight?enMarioStatusOnAirRight:enMarioStatusOnAirLeft); }break;
}
}

在代码中可以看到,如果马里奥已经在空中,就不能再跳跃了,只有在马里奥站立和行走时候可以跳跃。

当可以跳跃时,首先让马里奥对象播放跳跃动画,这个动画指马里奥本身的变化,比如马里奥的胳膊和腿,并不是马里奥跳跃的动作

跳跃的动作是pJump这个Action。

在runAction之前,先判断了这个action是否存在,如果这个action存在,则不需要再执行action了,这个也有避免连续两次跳跃的意思

和之前的状态判断差不多,去掉这个判断也是可以的,但是这样判断鲁棒性更好些吧。

最后根据马里奥的方向,设置马里奥的状态。

这里涉及新的知识点了,一个是执行动作runAction,一个是马里奥对象,我们分两个文章来介绍这两个知识。

cocos2d-x游戏开发系列教程-超级玛丽07-CMGameMap(六)-马里奥跳跃的更多相关文章

  1. cocos2d-x游戏开发系列教程-超级玛丽10-怪物与马里奥冲突检测

    在超级玛丽游戏中,马里奥在移动,怪物也在移动,当他们遇见时,需要判断是马里奥身亡还是怪物身亡. 这个判断的代码在怪物类的检测函数实现中. 比如蘑菇怪的冲突检测函数: bool CMMonsterMus ...

  2. cocos2d-x游戏开发系列教程-超级玛丽07-CMGameMap(三)-按键处理

    在地图初始化好了之后,就开始移动马里奥吧,我在windows下,是使用键盘来移动马里奥的 w是跳,d是前进,a是后退,那么在程序里是怎么来获取这个按键的呢? 普通的windows程序,在按键之后,会有 ...

  3. cocos2d-x游戏开发系列教程-超级玛丽01-前言

    前言 上次用象棋演示了cocos2dx的基本用法,但是对cocos2dx并没有作深入的讨论,这次以超级马里奥的源代码为线索,我们一起来学习超级马里奥的实现,并以一些篇幅来详细讲述遇到的具体问题和具体的 ...

  4. cocos2d-x游戏开发系列教程-超级玛丽07-CMGameMap

    背景 在上一篇博客中,我们提到CMGameScene,但是CMGameScene只是个框架,实际担任游戏逻辑的是CMGameMap类,这个博文就来了解下CMGameMap 头文件 class CMGa ...

  5. cocos2d-x游戏开发系列教程-超级玛丽06-CMGameScene

    背景 在CMMenuScene中,当用户点击开始游戏时,导演让场景进入到CMGameScene 头文件 class CMGameScene : public cocos2d::CCLayer,publ ...

  6. cocos2d-x游戏开发系列教程-超级玛丽08-消息机制

    在超级玛丽游戏里,地图类CMGameMap负责所有的程序逻辑,它包含了背景地图,包含了游戏元素精灵,当游戏中的精灵之间发生碰撞时,比如马里奥撞上砖头这种事情发生时,马里奥对象本身不知道怎么处理这个逻辑 ...

  7. cocos2d-x游戏开发系列教程-超级玛丽05-CMMenuScene

    代码下载链接 http://download.csdn.net/detail/yincheng01/6864893 解压密码:c.itcast.cn 背景 上一篇博文提到appDelegate,在该类 ...

  8. cocos2d-x游戏开发系列教程-超级玛丽09-怪物激活与移动

    在游戏中,很多怪物本身是会移动的,这里主要有蘑菇怪,乌龟等. 说起怪物的移动,首先在游戏里先要考虑怪物的抽象和设计. 在CMMonster.h中,有个类CMMonsterBasic,这个类抽象了所有的 ...

  9. cocos2d-x游戏开发系列教程-超级玛丽07-CMGameMap(五)-地图卷动

    马里奥在平移的过程中,涉及到地图的卷动问题. 在这个游戏里,地图比窗口大,窗口只是显示了地图的一部分,因此马里奥在移动的时候,移动到一定位置之后要卷动地图,否则马里奥移动到窗口右边之后......那结 ...

  10. cocos2d-x游戏开发系列教程-超级玛丽04-AppDelegate

    代码下载链接 http://download.csdn.net/detail/yincheng01/6864893 解压密码:c.itcast.cn 背景 上一篇博文提到在CCApplication: ...

随机推荐

  1. BootStrap 智能表单系列 十 自动完成组件的支持

    web开发中,肯定遇到像百度.google这种搜索的功能吧,那智能表单中的自动完成可以做什么呢,下面来揭晓: 1.包含像google.百度等类似的简单搜索 2.复杂结构的支持,比如说 输入产品编号,需 ...

  2. iOS中的地图和定位

    文章摘自http://www.cnblogs.com/kenshincui/p/4125570.html#location  如有侵权,请联系删除. 概览 现在很多社交.电商.团购应用都引入了地图和定 ...

  3. 简单十步让你全面理解SQL

    很多程序员认为SQL是一头难以驯服的野兽.它是为数不多的声明性语言之一,也因为这样,其展示了完全不同于其他的表现形式.命令式语言. 面向对象语言甚至函数式编程语言(虽然有些人觉得SQL 还是有些类似功 ...

  4. windows server2008 r2修改远程桌面连接端口。

    1. windows 2008远程桌面端口默认是用的是3389端口,但是由于安全考虑,通常我们安装好系统后一般都会考虑把原来的3389端口更改为另外的端口.   2.更改过程: 2-1.打开注册表:  ...

  5. 自定义jquery手风琴插件

    手风琴效果是项目中使用频率较高的一种效果,原来项目一直都在用easyui的,临近年末,试着自己写了一个 css样式 /* CSS Document */ body { margin: 0 auto; ...

  6. Asp.net Role manager tutorial

    It is very useful in .net we can user framework provided role manager, and easily configure in Web.C ...

  7. 转: 理解AngularJS中的依赖注入

    理解AngularJS中的依赖注入 AngularJS中的依赖注入非常的有用,它同时也是我们能够轻松对组件进行测试的关键所在.在本文中我们将会解释AngularJS依赖注入系统是如何运行的. Prov ...

  8. 新唐M0特点分析

    1,价格低,05x系列0.6-1.5美金,1xx系列1.5-3.5美金:2,性能好,最新32位CORTEX-M0的ARM核,唯一可工作到+5.5V的CORTEX-M0:3,速度快,CPU核能跑到50M ...

  9. Protel 99SE铺铜问题总结

    一.PCB电路板放置铺铜有什么作用? 散热: 屏蔽 抗干扰 pcb板子带有寄生电容: 提高板子强度: 美观: 增加被抄板的难度,尤其是覆铜+黑油.   二.PROTEL不规则铺铜的方法: 1.先要知道 ...

  10. oracle命令大全

    内容包括三大项:    1.oracle基本操作语句 2.SQLServer基本操作语句 3.各种数据库连接方法 ******************************************* ...