![]() |
Анимация персонажа при управлении
Вложений: 1
Добрый день!
С флешем знакома в общей сложности третьи сутки, учусь по туториалам которые попадаются на ютубе. Задача следующая: при движении персонажа вправо-влево-вверх-вниз включать соответствующую анимацию движения. Код управления кнопками писался по туториалу управления тупокружочком, остальное - лучшее до чего я смогла дойти самостоятельно, прошерстив других схожих инструкций в количестве. Проблема: при нажатии клавиш управления анимация включается, но проигрывается только один раз. Плюс есть не очень приятный баг: при одновременном нажатии двух клавиш, например вверх, потом не отпуская влево, персонаж поворачивается влево и продолжает в таком положении двигаться вверх. :( Я буду очень благодарна, если случится чудо и какой-нибудь мимо проходящий альтруист поможет мне рецептом или хотя бы даст направление, и я очень прошу воздержаться от советов начать с чего-нибудь попроще. Код AS3:
|
То что класс наследуется от MovieClip не означает что он будет отображаться.
Либо класс не полный, либо вы хитрите. |
А, что? То есть хитрю?
|
Класс расположен где?
P.S.Независим или в кадре? P.S.S.Даже немного не так. Класс "привязан" к муви, а клип отображается в определённых кадрах? |
Цитата:
|
Цитата:
Другой вопрос, зачем. |
Цитата:
Код на кадре таймлайна преобразуется в класс. Описание класса внутри описания другого, в первый раз слышу. |
Цитата:
Код AS3:
Цитата:
P.S. Учиться лучше по туториалам текстовым, честно вчитываясь, теория в видео обычно воспринимается как "бла-бла-бла, а теперь пишем код". |
Цитата:
У Вас при поступлении события от клавиатуры разбирается, какая клавиша была нажата. Но при этом условия if() вложены через else (видимо, авторы туториалов считают, что переменная может хранить сразу несколько значений ;) ). Затем каждый кадр (по событию ENTER_FRAME) происходит перемещение персонажа в зависимости от флагов влево, вправо и т.д. То есть, хотелось бы чтобы от флагОВ, но на самом деле — от флагА, поскольку if'ы снова вложены через else, то есть, если персонаж идет вверх, он уже никак не может идти влево. Кроме того, если клавишу вверх не отпустили, он вообще никуда больше идти не будет, потому что остальные варианты рассматриваются только в else ("иначе", то есть только если вверх не идем). Если хотите, чтобы перс двигался и по диагонали, уберите else. Если хотите, чтобы перс просто был повернут в ту же сторону из 4-х, в которую двигается — поворачивайте его там же, где меняете координату. Потому что сейчас происходит так: приходит одно событие от клавиатуры, затем второе — и все это на протяжении одного кадра, то есть отрисовано будет только последнее изменение состояния. Вобщем, сначала Вам надо определиться, чего Вы ждете при нажатии двух направлений одновременно. |
Ну суть бага в том, что у Вас в приемнике Фрэйма стоит порядок движения, т.е если у Вас нажата кнопочка, которая раньше зарегистрирована, то это движение из двух, трех, четырех он выберет.
Т.е. Если нажата Вверх и вниз - пойдет вверх, влево и вниз - пойдет влево. Т.е приоритеты : 1. up 2. left 3. down 4. right Приоритет определяет направление, чем ниже он - туда и будет двигаться. А почему происходит поворот? Потому что рассылка события заходит в приемник keyPressedListener и делает поворот. Исправить этот баг - просто, просто нужно обнулять переменные ненужных нам направлений в приемнике: Код AS3:
1. Нажата ли кнопочка? 2. Если нажата, то проверять приоритет. :) |
| Часовой пояс GMT +4, время: 07:46. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.