2013-07-02 6 views
0

У меня проблема с переменной типа «Точка» скорость меняется без каких-либо звонков, чтобы изменить ее.as3 Невозможно изменить переменные

private function framecode(e:Event) { 
    trace(getVelocity().y); 
    tracks.gotoAndStop(2); 
    trace(getVelocity().y); 
} 

Этот код является частью класса под названием «танк», который проходит тот, который скорость используется в (моем движущегося объекта класса). speed является переменной частного типа и getVelocity() является общедоступным методом доступа. треки - это имя клипа, содержащееся внутри одного связанного с баком. Слушателем событий является ENTER_FRAME. На кадрах отсутствует кодировка треков.

Как-то эти две трассы дают разные значения (первый из них правильный), и я не могу понять, как это может повлиять на getoAndStop() (и, следовательно, как его исправить).

Я обнаружил, что play() не воспроизводит ошибку, а prevFrame() и nextFrame(). Поскольку переменная является частной, этот класс не должен иметь доступ к ней для ее изменения.

Еще одна странность в том, что если прослушиватель событий изменен на FRAME_CONSTRUCTED или EXIT_FRAME, происходит массовое отставание, и мой MovieClip случайно исчезает через несколько секунд.

Благодарим за внимание, любая помощь будет оценена по достоинству.

ответ

1

Ваша velocity переменная является частной, поэтому можно получить доступ к ней за пределами класса.

Однако getVelocity() возвращает ссылку на вашу переменную velocity. Когда у кого-то есть эта ссылка, они могут изменить значения своих свойств: getVelocity().y = 3. Так что это не невозможно для этого.

Один из способов устранения этой проблемы заключается в том, чтобы добавить оператор trace()/установить точку останова в getVelocity(), чтобы вы могли видеть, где она используется.

Вы могли бы сделать что-то подобное ж/Point класса, но вы должны продлить его, добавить методы геттер/сеттер для y (что следы, когда они называются), а также изменить код, чтобы использовать сорбент/сеттер. Это может быть полезно (достаточно просто), и действие модификации вашего кода для использования геттера может помочь вам обнаружить, где проблема.

Смежные вопросы