【cocos2dx】成员精灵(组合)的getboundingbox问题

在cocos2dx中,当设计一个子弹类并使用成员精灵进行碰撞检测时,发现getBoundingBox()方法未能正确返回碰撞框。原因是getBoundingBox基于相对坐标而非绝对坐标进行仿射变换。解决方法包括覆盖getBoundingBox方法,或者调整成员精灵的contentSize和锚点至(0,0)。
摘要由CSDN通过智能技术生成

首先,我设定读者们都对cocos2dx的坐标系有一定的了解了。

没有的话,给个官方文档的链接,讲得比较明白

http://www.cocos.com/doc/article/index?type=cocos2d-x&url=/doc/cocos-docs-master/manual/framework/native/v3/coordinate-system/zh.md

好了,现在都了解了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
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值