使用CCJumpby()和CCRect时出现的诡异问题,求解答。

来源是木头的cocos2d-x教程,大体思路是Entity类,绑定Sprite;主角Character继承Entity,增加跳跃函数和碰撞块;怪物Mobs继承Entity,增加碰撞块;在怪物管理类Manager中update并检查碰撞块。

产生的问题是主角在进行跳跃之后碰撞块没动,会和怪物发生碰撞。检查了一下跳跃部分的代码是:

void Character::jump()
{
	if(getSprite() == NULL)//是否成功获取到精灵
	{
	return;
	}
	if(isJumping)//判断是否在跳跃状态
	{
	return;
	}
	isJumping = true;//将跳跃状态调整为真
	CCJumpBy* jump = CCJumpBy::create(1.2f,ccp(0,0),200,1);
	CCCallFunc* callFunc = CCCallFunc::create(this,callfunc_selector(Character::jumpEnd));
	CCActionInterval* jumpAction = CCSequence::create(jump,callFunc,NULL);//生成跳跃状态,并增加跳跃结束函数
	getSprite()->runAction(jumpAction);//给精灵加入跳跃状态
}

而场景中创建角色是:

m_character = Character::create();
		m_character->bindSprite(CCSprite::create("war.png"));
		m_character->setPosition(ccp(200,158));
		this->addChild(m_character,1);//创建主角

碰撞检测:

bool Mobs::isHitting(Character* m_character)
{
	CCRect mobRect = getBoundingBox();
	CCRect characterRect = m_character->getBoundingBox();
	return !(mobRect.intersectsRect(characterRect));
}

经过多次对比教程,发现问题出在跳跃函数中的getSprite()函数上,这一句getSprite()->runAction(jumpAction);里面不能用getSprite(),否则在场景中跳跃时,碰撞块在原地未发生改变。但之前加了log发现跳跃时精灵的坐标发生了改变,可这里加上了getSprite却又不正确。。。


不明白了这下子。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值