Как вы, наверное, видели из моих предыдущих постов, я создаю игру с боковой прокруткой во Flash / Actionscript 3.0.
Сейчас я пытаюсь заставить вражеские объекты повернуться лицом к направлению игрока.Вот что я имею в виду (dartD1
является экземпляром объекта вражеского персонажа. Если scaleX
равен 1, он направлен вправо; если scaleX
равен -1, то он направлен влево):
if (dartD1.x < player.x) {
dartD1.scaleX = 1;
} else if (dartD1.x > player.x) {
dartD1.scaleX = -1;
}
Проблема в том, что враги не меняются лицом к игроку во время игры.Их направление устанавливается в зависимости от их положения относительно проигрывателя при запуске программы.
Я знаю, почему возникает эта проблема;У меня есть scrollScreen()
функция, которая помещает объект Player в центр экрана.Так как игровой экран 700 * 700, игрок всегда находится на позиции (350, 350) относительно сцены.Вот моя scrollScreen()
функция:
// This function scrolls the MovieClip Containers on the screen
private function scrollScreen(event:Event):void {
// Here we offset the elements' 'x' and 'y' coordinates by
// the distance between the Player and the centre of the stage
// Environment Container
envContainer.x += (stage.stageWidth * 0.5) - player.x;
// Background Container
// In all levels but Level 3 (which is in a room, not a landscape)
// the background moves more slowly along the 'x' axis to simulate distance
if (onLevel != 3 && onLevel != 5) {
bgContainer.x += ((stage.stageWidth * 0.5) - player.x) * 1/20;
} else if (onLevel == 3) {
bgContainer.x += ((stage.stageWidth * 0.5) - player.x);
} else if (onLevel == 5) {
bgContainer.x += ((stage.stageWidth * 0.5) - player.x);
}
//playerDartContainer.x += (stage.stageWidth * 0.5) - player.x;
// Position the Player at the centre of the game screen ('x' axis)
player.x = stage.stageWidth * 0.5;
// Here we offset the elements' 'y' coordinates
// Environment Container
envContainer.y += (stage.stageHeight * 0.5) - player.y;
// Background Container
bgContainer.y += (stage.stageHeight * 0.5) - player.y;
//playerDartContainer.y += (stage.stageHeight * 0.5) - player.y;
// Position the Player at the centre of the game screen ('y' axis)
player.y = stage.stageHeight * 0.5;
} // End of 'scrollScreen()' function
Мой вопрос: как мне заставить сравнение положения работать между dartD1
(врагом) и игроком?Для этого мне, очевидно, нужно получить позицию Игрока относительно dartD1
.Я попытался сделать это:
if (dartD1.x < player.localToGlobal(new Point()).x) {
dartD1.scaleX = 1;
} else if (dartD1.x > player.localToGlobal(new Point()).x) {
dartD1.scaleX = -1;
}
Это не работает, потому что player.localToGlobal(new Point()).x
по-прежнему возвращает 350, как и player.globalToLocal(new Point()).x
.
Я искал решения в Интернете, но неполучил что-нибудь полезное.Любая помощь будет оценена!
Спасибо, Кристиан