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,一个是马里奥对象,我们分两个文章来介绍这两个知识。


  • 相关阅读:
    理解OAuth 2.0
    Npoi导出word(Peanuts)
    轻松搞定javascript日期格式化问题
    史上最全的MSSQL复习笔记
    SQL经典短小代码收集
    Web系统与自控系统数据通讯架构 之 OPC DA DataChangeEventHandler 非热点数据更新策略 ,
    记一次SQL Server insert触发器操作
    记一次单机Nginx调优,效果立竿见影
    windows 显示引用账户已被锁定,且可能无法登录
    C# 使用modbus 读取PLC 寄存器地址
  • 原文地址:https://www.cnblogs.com/new0801/p/6177208.html
Copyright © 2011-2022 走看看