gpt4 book ai didi

javascript - 无法在 JS (box2d) 处理中删除正文

转载 作者:行者123 更新时间:2023-11-30 06:31:05 25 4
gpt4 key购买 nike

我正在使用带有处理 (JS) 的 Box2d,我有两个主体,我希望其中一个在碰撞时消失,我尝试使用“physics.removeBody(b1);”但不幸的是,我在我的世界里所有的 body 都消失了!这是碰撞函数中的代码。

   void collision(Body b1, Body b2, float impulse) {
if (b2 == basket && b1.getMass() > 0) {
score += 10;
pop.cue(0);
pop.play();
physics.removeBody(b1);
}
}

最佳答案

通常在创建 body 时我会做这样的事情:

void makeBody(float x, float y) {
BodyDef bd = new BodyDef();
bd.type = BodyType.DYNAMIC;
bd.position.set(box2d.coordPixelsToWorld(x, y));
body = box2d.createBody(bd);
body.setUserData(this); // This is important

PolygonShape sd = new PolygonShape();
float box2dW = box2d.scalarPixelsToWorld(w/2);
float box2dH = box2d.scalarPixelsToWorld(h/2);
sd.setAsBox(box2dW, box2dH);
FixtureDef fd = new FixtureDef();
fd.setUserData("box");

// Attach Fixture to Body
body.createFixture(fd);

现在你的 body 有一个 userData 属性,你可以像这样测试碰撞:

void beginContact (Contact cp) {

// Get both fixtures
Fixture f1 = cp.getFixtureA();
Fixture f2 = cp.getFixtureB();
// Get both bodies
Body b1 = f1.getBody();
Body b2 = f2.getBody();
// Get our objects that reference these bodies
Object o1 = b1.getUserData();
Object o2 = b2.getUserData();

//Detect player-enemy collision
if (b1.getUserData() == "player" && b2.getUserData() == "enemy") {
//... Do stuff here
}
if (b2.getUserData() == "player" && b1.getUserData() == "enemy") {
//... Do stuff here
}

重点是使用主体的 setUserData() 函数指定唯一标识符,然后使用主体的 getUserData() 函数检查并确保碰撞的对象是您想要的对象。在您的示例中,您有 Body b1 和 Body b2,但不进行任何类型的测试以确保正确的物体发生碰撞。

希望对你有帮助

关于javascript - 无法在 JS (box2d) 处理中删除正文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17596504/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com