如何在Box2D(cocos2d)中销毁b2Body?检查行驶距离后

发布于 2024-11-19 07:21:24 字数 112 浏览 5 评论 0原文

我在 box2d/cocos2d-for-iphone 中有子弹。它们飞得很好……但我想在它们飞行一定距离后销毁这些子弹。例如,子弹“飞过”480px 后,应将其删除。

我怎样才能实现这个目标?

I have bullets in box2d/cocos2d-for-iphone. They are flying fine...but I want to destroy these bullets after they traveld a certain distance. for example after a bullet "flew" 480px it should be removed.

How can I achieve this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

探春 2024-11-26 07:21:24

为了计算距离,在创建子弹时将其位置存储在某处。然后每一步检查:

b2Vec2 diff = bullet->GetPosition() - startPosition;
if (diff.Length() > MaxLen)
{
    world->DestroyBody(bullet);
}

编辑:

如果你想计算路径长度,则将前一个位置和路径长度存储在某处,最初为0:

b2Vec2 diff = bullet->GetPosition() - prevPosition;
pathLength += diff.Length();
if (pathLength > MaxLen())
{
    //destroy bullet//world->DestroyBody(bullet);
}

To count the distance, when creating a bullet store it's position somewhere. Then every step check:

b2Vec2 diff = bullet->GetPosition() - startPosition;
if (diff.Length() > MaxLen)
{
    world->DestroyBody(bullet);
}

EDIT:

if you want to calculate the path length then store somewhere the previous position and the path length, that is initially 0:

b2Vec2 diff = bullet->GetPosition() - prevPosition;
pathLength += diff.Length();
if (pathLength > MaxLen())
{
    //destroy bullet//world->DestroyBody(bullet);
}
习惯成性 2024-11-26 07:21:24

这非常简单:world->DestroyBody(body)
还有,小建议。为了获得良好的实践和性能,您不应该一遍又一遍地创建子弹。重复使用它!只需使它们不可见并将它们重新放置在源位置即可。

It's quite simple: world->DestroyBody(body).
And, small advice. For the good practice and performance you should not create bullets over and over again. Reuse it! Just make them invisible and reposition them at a position of a source.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文