来源是木头的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却又不正确。。。
不明白了这下子。。