gpt4 book ai didi

java - 将接口(interface)方法委托(delegate)给各种类

转载 作者:行者123 更新时间:2023-12-01 12:46:02 25 4
gpt4 key购买 nike

尽管这是一个包含对 JBox2d 的引用的问题,但它实际上更像是一个一般的 Java 问题。
使用 JBox2d 使用 Java 开发游戏。 JBox2d 提供了一个名为 ContactListener 的回调类。
以下代码片段工作正常,当 body 在我的世界中发生碰撞时,我看到 Contact begin. 已记录到控制台。

// set callback on box2d world
world.setContactListener(new CollisionListener());

// inside game loop, step through physics simulation
world.step(1/60f, 8, 1);

// custom 'ContactListener' definition
public class CollisionListener implements ContactListener{
private Logger log;

public CollisionListener(){
this.log = Logger.getLogger(CollisionListener.class.getName());
log.info("Registered custom ContactListener");
}

public void beginContact(Contact contact) {
log.info("Contact begin.");
}
public void beginContact(Contact contact) {}
public void preSolve(Contact contact, Manifold oldManifold) {}
public void postSolve(Contact contact, ContactImpulse impulse) {}
}

但是,我希望能够将一些碰撞逻辑移至适当的类中。
例如,如果 BodyConveyorBelt 碰撞,我想处理该类中特定于 ConveyorBelt 的逻辑。
因此,ConveyorBelt 有自己的 beginContactbeginContactpreSolvepostSolve 方法定义,对于矩形等也是如此
实现这一目标的最佳方法是什么?

类层次结构..

.
└── InteractiveShape // Parent class, contains 'x, y' position. Many diff classes inherit from it, so i'd like to not have to change this class.
├── Circle // sub-class of InteractiveShape
└── Rectangle // sub-class of InteractiveShape
└── ConveyorBelt // sub-class of Rectangle

最佳答案

感谢@MightyPork的提示,最后用了这个..

public void preSolve(Contact contact, Manifold oldManifold) {

if (contact.getFixtureA().getBody().getUserData() instanceof ConveyorBelt){
ConveyorBelt conveyorBelt = (ConveyorBelt) contact.getFixtureA().getBody().getUserData();
conveyorBelt.preSolve(contact, oldManifold);

}else if (contact.getFixtureB().getBody().getUserData() instanceof ConveyorBelt){
ConveyorBelt conveyorBelt = (ConveyorBelt) contact.getFixtureB().getBody().getUserData();
conveyorBelt.preSolve(contact, oldManifold);
}
}

关于java - 将接口(interface)方法委托(delegate)给各种类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24696778/

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