第一个项目(六)跳跃动作的初步优化

来源:互联网 发布:apache编译调试选项 编辑:程序博客网 时间:2024/05/01 15:45

有一种逗比精神叫做没人看我也要更新


很明显,写完昨天的代码,如果不停的按jump键肯定就要飞到天上去了,优化的基本思路就是,在一次跳跃没有完成的时候,按jump键不执行jump动作。

那么首先就要给player加一个属性,布尔类型的isJumping,初始化的时候给false,按下跳跃按钮,把值变为true,执行跳跃动作之后,把值变为false,在jump按钮的回执函数里加一个判断如果isJumping是false就执行跳跃动作,看似天一无缝的,但是我发现了一个实际的问题。

就是我们想让isJumping在跳跃完成之后变成false,并不是直接写一句player->runActuon(jump);然后紧跟着isJumping=false;,这样并不是整个跳跃动作完成,而是player->runActuon(jump)这一句代码执行完毕,所以说没有时间差,这样的逻辑是无效的。

我参考了一下资料,找到了一种方法,就是创建一个连续动作c,把动作A(跳)和动作B(赋值false)放到一个连续动作C里执行,到时候直接player->runActuon(动作C)

放弃了当时沾沾自喜的CCAminate单一动作。

CCSequence可以创造连续动作,直接把动作分别放到参数里就行,最后一个参数传NULL,但是如果传的参数是函数不是动作类,就得用指针,这里用callfunc来指针封装。

CCActionInterval* Player::jump2s(){CCCallFunc* callfunc=CCCallFunc::create(this,callfunc_selector(Player::jumpend));CCActionInterval* jump2 =CCSequence::create(CCJumpBy::create(1.0f,ccp(0,0),120,1),callfunc,NULL);return jump2;}void Player::jumpend(){isJumping=false;}
之后直接调用jump2s动作就行。

这样开头的问题就解决了。

0 0