Войти
Box2DФорумОбщее

Движущаяся платформа

#0
17:43, 4 сен. 2014

Никак не могу заставить гг стаять на движущейся платформе, проблема не с отсутствием трения, а с LinearVelocity.
Самый нормальный вариант реализовать передвижение, в тч по платформе:

var vel = edge.GetLinearVelocity();

if (keys[87] && (sensorListener(edge) & 0x010)){ //w
  vel.y = -10;   
}
// если нажата клавиша, до этого не нажималась, гг не упирается слева
if (keys[65] && !edgeData.left && !(sensorListener(edge) & 0x100)) {
  vel.x -= 5; // двигаемся влево
  edgeData.left = true;
}
// клавишу отпустили, до этого была нажата
if (!keys[65] && edgeData.left) {
  vel.x += 5; // LinearVelocity как было
  edgeData.left = false;
}
// если нажата клавиша, до этого не нажималась, гг не упирается справа
if (keys[68] && !edgeData.right && !(sensorListener(edge) & 0x001)) {
  vel.x += 5; // двигаемся вправо
  edgeData.right = true;
}
if (!keys[68] && edgeData.right) {
  vel.x -= 5;
  edgeData.right = false;
}

/* было
if (keys[65] || keys[68]) { // left/right arrows
  body.SetAwake(true);
  if (keys[65] && !(sensorListener(edge) & 0x100))
    vel.x = -5;
  else if (keys[68] && !(sensorListener(edge) & 0x001))
    vel.x = 5;
} else {
  vel.x = 0;
}*/

edge.SetLinearVelocity(vel);
Но иногда, где то берется остаточная энергия и гг относит обратно (например стоя на платформе у него есть скорость, если спрыгнуть в противоположную сторону, то после отпускания клавиши скорость вернется, какая была на платформе, те полетит обратно, пока не встретит землю).
В общем, движение не естественное, подскажите как лучше сделать?) ||  Поделитесь своей реализацией)


#1
19:17, 4 сен. 2014

Yadro
> Самый нормальный вариант
нет, это не самый нормальный вариант, это чёрт знает что. назначаешь платформе бесконечную массу и присваиваешь ей необходимую скорость.

#2
19:22, 4 сен. 2014

xD ну платформа b2_kinematicBody со своей скоростью, сам код описывает поведение гг.

#3
20:37, 4 сен. 2014

Обнуление скорости сделал только после отпускания клавиши, теперь почти все как надо.

Box2DФорумОбщее

Тема в архиве.