首先,我设定读者们都对cocos2dx的坐标系有一定的了解了。
没有的话,给个官方文档的链接,讲得比较明白
好了,现在都了解了cocos2dx坐标系了。
我引入一个问题:我要设计一个子弹类。做法是,子弹类bullet公共继承自Node,然后有一个成员变量Sprite* m_pPic显示外观(从不调用setPosition())。在bullet的某个函数里面通过addChild()来绑定这个精灵。
//省略了很多代码
//.h
class bullet : public Node{
private:
Sprite* m_pPic;
}
//.cpp
bool bullet::init(){
m_pPic = nullptr;
return true;
}
void bullet::bindSprite(Sprite* p){
m_pPic = p;
this->addChild(m_pPic);
}
const Sprite* bullet::getSprite() const{
return this->m_pPic;
}
子弹要打中敌人,我们就简单利用getBoundingBox()来进行碰撞检测好了。然后再利用碰撞盒子提供的接口进行碰撞检测。
后我们惊讶的发现,根本没有奏效!
为此,我们检测一下出了什么问题。
bullet* p_bullet = bullet::create();
p_bullet ->setPosition(Point(50, 50));
this->addChild(p_bullet);
auto m_pPic= Sprite::create(StringUtils::format("eat.png"));
p_bullet -> bindSprite (m_pPic);
Rect r = p_bullet ->getSprite()->getBoundingBox();
CCLOG("posBulletX:%f,posBulletY:%f",p_bullet->getPositionX(),p_bullet->getPositionY());
CCLOG("posPicSpriteX:%f,posP