zoukankan      html  css  js  c++  java
  • cocos2d-x游戏开发系列教程-超级玛丽07-CMGameMap(六)-马里奥跳跃

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


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

    实际的跳跃则调用了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,一个是马里奥对象,我们分两个文章来介绍这两个知识。


  • 相关阅读:
    第四周作业
    第三周作业
    第二周作业
    互联网公司采用增量模型做开发的优势
    面向过程分析方法与面向对象分析方法到底区别
    项目测试中的黑盒测试和白盒测试
    立项说明书里面的项目概述。
    项目开发中的一些问题
    面向对象之我见
    [自翻]fasthttp中文文档(持续更新)
  • 原文地址:https://www.cnblogs.com/new0801/p/6177208.html
Copyright © 2011-2022 走看看