使用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却又不正确。。。


不明白了这下子。。

你可能感兴趣的:(cocos2d-x,CCRect碰撞块,CCRect,CCJumpby)