Я не знаю, почему невозможно использовать setTransform внутри прослушивателя контактов, но я решил эту проблему таким образом. Создан класс для задач
открытый класс 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));
}
}
затем внутри обработчика контактов я просто добавляю новое задание в список
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
}
});
у меня все работает нормально.