Вы пытаетесь использовать свойства игрока playerx
& playery
, как будто они являются статическими свойствами (то есть принадлежат классу, а не экземпляру).Вам нужно получить ссылку на экземпляр вашего плеера или сделать свойства статичными.
Есть несколько способов сделать это, вот один из способов, который быстрый, но не обязательно самый чистый:
В своем классе Player создайте статическую переменную для хранения экземпляра синглтона вашего проигрывателя:
public static var me:Player;
Затем в конструкторе класса проигрывателя (то есть метода с именем Player
) назначьте this
на me
var:
me = this;
Теперь у вас есть статическая ссылка на ваш экземпляр проигрывателя, и вы можете получить доступ к его общедоступным свойствам и методам в любом месте вашего приложения, выполнив Player.me
, например Player.me.x
Что это делает, каждый раз, когда вы создаете новый экземпляр Player, он присваивает этот экземпляр классу me
var класса Player.Предположительно, у вас есть только один экземпляр Player в любой момент времени.
Теперь статические методы и переменные следует использовать с осторожностью, поскольку они сохраняются в течение всего жизненного цикла вашего приложения.Некоторые разработчики стараются использовать как можно меньше static (или только для констант и настроек), и я, как правило, согласен с ними, что добавление некоторых статических свойств в экранный объект не так уж и плохо, если вы убираете после себядолжным образом.(например, null
ссылка me
, если вы больше не нуждаетесь в плеере в памяти)
Конечно, есть много других способов получить ваш экземпляр Player, например, сделать MovieClip(root).player
(не фанат этого синтаксиса, но он работает) или вводит его в вашего врага от общего родителя с помощью (new Enemy(player)
) или имеет класс, который управляет всеми врагами и игроком вместе.Если бы у вас было время, я бы искал некоторые лучшие практики для шаблонов программирования игр.