gpt4 book ai didi

java - body.setTransform 在接触监听器(andEngine 和 box2d)中不起作用

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:58:25 29 4
gpt4 key购买 nike

我试图在与传送接触时移动玩家 body ,但未执行 setTransform。这是我的接触监听器

mPhysicsWorld.setContactListener(new ContactListener()
{

@Override
public void beginContact(Contact contact)
{

final Fixture fixtureA = contact.getFixtureA();
final Body bodyA = fixtureA.getBody();

final Fixture fixtureB = contact.getFixtureB();
final Body bodyB = fixtureB.getBody();
if(bodyA.getUserData().equals("Player") || bodyB.getUserData().equals("Player") )
{

for(int i = 0; i < telList.size(); i++)
{
if(bodyA.getUserData() == telList.get(i))
{
Teleport tl = telList.get(i);
if(tl.look.getX() > pl.look.getX())
{
pl.moveTo(150, 320);
pl.setLinearVelocity(new Vector2(-4.5f,0));
}else
{
pl.moveTo(150, 320);
pl.setLinearVelocity(new Vector2(4.5f,0));
}
break;
}else if(bodyB.getUserData() == telList.get(i))
{
Teleport tl = telList.get(i);
if(tl.look.getX() > pl.look.getX())
{
pl.moveTo(150, 320);
pl.setLinearVelocity(new Vector2(-4.5f,0));
}else
{
pl.moveTo(150, 320);
pl.setLinearVelocity(new Vector2(4.5f,0));
}
break;
}
}
}
}

@Override
public void endContact(Contact contact)
{

}
});

播放器类有方法

public void moveTo(int x, int y)
{
body.setTransform(new Vector2(x/32,y/32), 0);
}

它工作正常但没有在接触监听器中执行。而且我确定会发生接触,因为它进入“if” block 和 pl.setLinearVelocity(new Vector2(-4.5f,0));被执行。

提前致谢

最佳答案

我不知道为什么在 contact listener 中使用 setTransform 是不可能的,但我通过这种方式解决了这个问题。为任务创建类

公共(public)类 moveBodyTask {

Player pl;
float x;
float y;
boolean direction;
moveBodyTask(Player b, float x1, float y1, boolean d)
{
pl = b;
x = x1;
y = y1;
direction = d;
}

public void move()
{
pl.moveTo(x, y);
if(direction)
pl.setLinearVelocity(new Vector2(5,0));
else
pl.setLinearVelocity(new Vector2(-5,0));

}

然后在 contack listener 中我只是将新任务添加到列表中

    taskList.add(new moveBodyTask(pl, x+TILE_SIZE, y, true));

更新时执行

scene.registerUpdateHandler(new IUpdateHandler()
{

@Override
public void onUpdate(float pSecondsElapsed) {
if(!taskList.isEmpty())
{
for(int i = 0; i < taskList.size(); i++)
{
taskList.get(i).move();
}
taskList.clear();
}

}

@Override
public void reset() {
// TODO Auto-generated method stub

}
});

对我来说效果很好。

关于java - body.setTransform 在接触监听器(andEngine 和 box2d)中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7245750/

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