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

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


很明显,写完昨天的代码,如果不停的按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动作就行。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值