gpt4 book ai didi

java - 机构未创建正确的引擎

转载 作者:行者123 更新时间:2023-12-01 14:05:19 24 4
gpt4 key购买 nike

我正在使用我的物理世界、ContactListener,或者只是我创建的 body 。

我的问题是我可以创建一个主体/ Sprite 。 body 和 Sprite 绘制正确,玩家无法穿过它们,但碰撞不适用于它们。我有一个存在此问题的方法,因此为了测试该问题,当玩家射箭时,我创建了一个如下所示的主体:

    Sprite testSprite = new Sprite(player.getX() + 100, player.getY() + 100,
resourcesManager.wall_region, vbom);
Body testBody = PhysicsFactory.createBoxBody(physicsWorld, testSprite,
BodyType.DynamicBody, PhysicsFactory.createFixtureDef(0, 0, 0));
attachChild(testSprite);
physicsWorld.registerPhysicsConnector(new PhysicsConnector(testSprite, testBody));
testBody.setUserData(new UserData("Tile", testSprite, 100, testBody));
System.out.println(testBody);

这些物体/ Sprite 创建得很好,但我无法穿过它们。但这些测试体和箭头之间的接触不能正常工作。

这是我的 ContactListener 中的碰撞,当箭头和图 block 碰撞时应该发生:

 if (((boolean) ((UserData) x1.getBody().getUserData())
.getType().equals("Tile"))
&& ((boolean) ((UserData) x2.getBody()
.getUserData()).getType().equals("arrow"))) {
System.out.println("Tile/Arrow");
engine.runOnUpdateThread(new Runnable() {
@Override
public void run() {
x2.getBody().setActive(false);
final Sprite sprite = (Sprite) ((UserData) x2
.getBody().getUserData()).getSprite();
detachChild(sprite);
final PhysicsConnector physicsConnector = physicsWorld
.getPhysicsConnectorManager()
.findPhysicsConnectorByShape(sprite);
physicsWorld
.unregisterPhysicsConnector(physicsConnector);

}
});
}

但奇怪的是,这次碰撞需要一段时间才能记录。例如,我可以向 testBody 射 10 支箭,它们只会弹开,但当我射第 11 支箭时,就会发生上述碰撞。

建议?我已经处理这个问题很长时间了,它变得非常令人沮丧,如果需要,我很乐意提供更多信息。谢谢。

最佳答案

根据我的观点,我发现其中有很多错误。

首先,您要创建具有诸如 (0,0,0) 之类的夹具属性的实体。那么这段代码创建了什么类型的主体我无法理解!

首先纠正此问题并根据要求应用适当的值。

如果您的假设是破坏主体,那么为此编写代码意味着不要使用主动方法。

你必须在线程中编写销毁代码,以便它独立执行。因此,您必须维护销毁主体的标志,以便同一个线程不会调用两次。

编辑:像这样创建物理连接器,

physicsWorld.registerPhysicsConnector(new PhysicsConnector(testSprite, testBody));

关于java - 机构未创建正确的引擎,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18949781/

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