Вышеприведенный код действительно не будет работать для всех остальных направлений, затем оставленных.
Порядок вызовов слушателя такой же, как вы их добавили.
Итак, сначала DetectHit2 ()выполняется, в результате чего будет установлено значение «истина» в случае наложения.
Следующий левый проверяется с помощью walkLEFT ();если пользователь не нажимает влево, переменная ударная установка снова устанавливается в ложное значение.
При использовании дополнительных методов walkXXXX () ударная установка будет ложной, и координата всегда будет корректироваться при нажатии конкретной клавиши.
Как и в предыдущем ответе, попробуйте использовать 1 прослушиватель одного события.
Примерно так:
this.addEventListener(Event.ENTER_FRAME, handleEnterFrame);
function handleEnterFrame(anEvent: Event): void
{
var newx: Number = char.x - (leftArrow ? speed : 0) + (rightArrow ? speed : 0);
var newy: Number = char.y - (upArrow ? speed : 0) + (downArrow ? speed : 0);
if(!boundsBmpData.hitTest(new Point(bounds.x, bounds.y),
255,
charBmpData,
new Point(newx, newy),
255))
{
char.x = newx;
char.y = newy;
}
}
Если вы разрешите своему игроку нажимать несколько клавиш направления, вывозможно, потребуется уточнить приведенный выше код, скорректировав сначала X, а затем Y-координату (поэтому требуется два раза вызвать hitTest).Таким образом, символ скользит по стенам, когда пользователь нажимает две клавиши со стрелками, и одна из этих клавиш продолжает врезаться в стену.