[英]ApplyLinearForce to dynamic body causes NullPointerException/ Libgdx box2d
我正在使用Eclipse中的libgdx box2d庫開發一個Android游戲。 在游戲中,有一個球在觸摸開始按鈕后掉落了。 但是當球接觸動態物體時,我得到了nullpointerexception。
接觸時,我想將LinearForce應用於該動態主體。 但是我在球和動態物體的接觸上一直得到nullpointerexception。
ContactHandler類:
公共類ContactHandler實現了ContactListener {
InputHandler input;
@Override
public void beginContact(Contact contact) {
if(contact.getFixtureA().getBody().getUserData() == "do1" && contact.getFixtureB().getBody().getUserData() == "ball"){
System.out.println("beginContact");
input = new InputHandler();
input.getBody1().applyLinearImpulse(10, 0, 0, 0, true);
}
}
InputHandler類:
公共類InputHandler實現InputProcessor {
private OrthographicCamera camera;
private Ball ball;
private DragObject dragObject;
private boolean start = false;
private Vector3 touch = new Vector3();
private Vector3 dragTo = new Vector3();
public InputHandler(){
}
public InputHandler(OrthographicCamera camera, Ball ball,
DragObject dragObject) {
this.camera = camera;
this.ball = ball;
this.dragObject = dragObject;
}
@Override
public boolean touchDragged(int screenX, int screenY, int pointer) {
if (!start) {
for (Body body : dragObject.getBody()) {
if (touch.x > body.getPosition().x - dragObject.getWidth() - 1
&& touch.x < body.getPosition().x
+ dragObject.getWidth() + 1) {
if (touch.y > body.getPosition().y - dragObject.getHeight()
- 1
&& touch.y < body.getPosition().y
+ dragObject.getHeight() + 1) {
dragTo.set(screenX, screenY, 0);
camera.unproject(dragTo);
body.setTransform(dragTo.x, dragTo.y, 0);
touch.set(screenX, screenY, 0);
camera.unproject(touch);
}
}
}
}
return false;
}
public Body getBody1(){
return dragObject.getBody().get(0);
}
DragObject類:
public static Array<Body> bodies = new Array<Body>();
public static int count = 0;
public DragObject(){
}
public DragObject(World world, float x, float y, float width, float height) {
this.world = world;
this.width = width;
this.height = height;
initialize();
body1 = world.createBody(bodyDef1);
body1.createFixture(fixtureDef);
body1.setUserData("do1");
bodies.add(body1);
}
public Array<Body> getBody() {
return bodies;
}
您的輸入處理程序的構造函數錯誤,這些行應刪除:
public InputHandler(){
}
因為當您在此處調用此構造函數時:
public void beginContact(Contact contact) {
if(contact.getFixtureA().getBody().getUserData() == "do1" && contact.getFixtureB().getBody().getUserData() == "ball"){
System.out.println("beginContact");
//You are using the wrong contructor, therefore body1 or dragObject is never initialised
input = new InputHandler();
//The null pointer exception is here, no body1 has been initialised yet
input.getBody1().applyLinearImpulse(10, 0, 0, 0, true);
}
您需要使構造函數匹配並在InputHandler類中創建一個新的DragObject,並且要注意的是,每次身體碰撞時,初始化類的效率都不高。我敢肯定,您可以想到一種更好的方式來組織它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.