|
|
|||||
[+1.3 07.08.10]
[+1.3 19.10.14] Регистрация: Jul 2009
Адрес: C-Петербург
Сообщений: 37
|
перевод простой игры с AS2 на AS3
Я преподаю детям в компьютерном центре (дополнительное образование детей) курс
"Создание игр". Делали мы с ними простые игры на AS2. Но вот подумала я, что надо переходить на AS3. Попробовала перевести одну из игр- лабиринт на AS3 - ничего не получается. Вот фрагмент кода игры на AS2: stop(); moveSpeed = 5;// Скорость движения человечка _root.onEnterFrame = function() {// Внутри этой функции основной код игры //------- Управление клипом man с помощью клавиатуры--------------- if (Key.isDown(Key.RIGHT)) { man._x += moveSpeed; } else if (Key.isDown(Key.UP)) { man._y -= moveSpeed; } else if (Key.isDown(Key.DOWN)) { man._y += moveSpeed; } else if (Key.isDown(Key.LEFT)) { man._x -= moveSpeed; } }; Создала код управления человечком на AS3: (c помощью подсказок Фрагменты кода) stage.addEventListener(KeyboardEvent.KEY_DOWN, fl_PressKeyToMove); function fl_PressKeyToMove(event:KeyboardEvent):void { switch (event.keyCode) { case Keyboard.UP: { man.y -= 5; break; } case Keyboard.DOWN: { man.y += 5; break; } case Keyboard.LEFT: { man.x -= 5; break; } case Keyboard.RIGHT: { man.x += 5; break; } } } Такое движение не подходит для игры. Нужно добавить обработку события смены кадров. Но как это сделать? Я пыталась, плавность в движении появляется - паузы при смене направлкния движения исчезают, но зато человечек почему-то двигается с ускорением- вообще бешено разгоняется. Вот код, т.е. попытка... stage.addEventListener(KeyboardEvent.KEY_DOWN, fl_PressKeyToMove); function fl_PressKeyToMove(event:KeyboardEvent):void { switch (event.keyCode) { case Keyboard.UP : { stage.addEventListener(Event.ENTER_FRAME, enterFrameToMoveUp); function enterFrameToMoveUp(e:Event):void { kl.y -= 5; } stage.addEventListener(KeyboardEvent.KEY_UP,removeEnterFrameUp); function removeEnterFrameUp(e:KeyboardEvent):void { stage.removeEventListener(Event.ENTER_FRAME, enterFrameToMoveUp); } break; }; case Keyboard.DOWN : { stage.addEventListener(Event.ENTER_FRAME, enterFrameToMoveDown); function enterFrameToMoveDown(e:Event):void { kl.y += 5; } stage.addEventListener(KeyboardEvent.KEY_UP, removeEnterFrameDown); function removeEnterFrameDown(e:KeyboardEvent):void { stage.removeEventListener(Event.ENTER_FRAME, enterFrameToMoveDown); } break; }; case Keyboard.LEFT :// Здесь по старому, с паузами { kl.x -= 5; break; }; case Keyboard.RIGHT : { kl.x += 5; break; } } }; http:www.flashkursmt.narod.ru Последний раз редактировалось udaaff; 07.08.2010 в 21:47. |
|
|||||
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
Для оформления своего кода надо использовать теги [code][/code]
|
|
|||||
Регистрация: Mar 2009
Адрес: Kazakhstan, Almaty
Сообщений: 121
|
я обычно использую такой подход:
// эти 4 логические переменные укажут, нажата ли сейчас определенная клавиша // влево, вправо, вверх, вниз var leftIsDown:Boolean=false; var rightIsDown:Boolean=false; var upIsDown:Boolean=false; var downIsDown:Boolean=false; // три слушателя событий // когда клавишу нажимают keyDown // когда клавишу отпускают keyUp // старый добрый enterFrame stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDown); stage.addEventListener(KeyboardEvent.KEY_UP, keyUp); stage.addEventListener(Event.ENTER_FRAME, enterFrame); // функции keyDown и keyUp установят соответствующие значения логических переменных // например - нажали клавишу влево - leftIsDown=true; - клавиша влево нажата = true function keyDown(e:KeyboardEvent):void{ if(e.keyCode==Keyboard.UP) upIsDown=true; if(e.keyCode==Keyboard.DOWN) downIsDown=true; if(e.keyCode==Keyboard.LEFT) leftIsDown=true; if(e.keyCode==Keyboard.RIGHT) rightIsDown=true; } // а когда отпустят leftIsDown=false; - клавиша влево нажата = false function keyUp(e:KeyboardEvent):void{ if(e.keyCode==Keyboard.UP) upIsDown=false; if(e.keyCode==Keyboard.DOWN) downIsDown=false; if(e.keyCode==Keyboard.LEFT) leftIsDown=false; if(e.keyCode==Keyboard.RIGHT) rightIsDown=false; } // а здесь проверяются переменные, если соответствующая клавиша нажата - выполняется действие // похоже на запись на AS2 - различие: вместо if (Key.isDown(Key.RIGHT)) мы проверяем if(rightIsDown) function enterFrame(e:Event):void { if(upIsDown)man.y -= 5; if(downIsDown)man.y += 5; if(leftIsDown)man.x -= 5; if(rightIsDown)man.x += 5; }
__________________
заткнись и делай Последний раз редактировалось gr_crd; 07.08.2010 в 22:52. Причина: опечатка в коде |
|
|||||
Регистрация: Feb 2009
Сообщений: 1,195
|
"Тормозит" - это действие автоповтора клавиатуры. По нажатию клавиши приходит событие нажатия, и через паузу оно начинает повторяться с одинаковыми, более короткими паузами. Правильное решение этой проблемы указано в предыдущем сообщении.
|
|
|||||
[+1.3 07.08.10]
[+1.3 19.10.14] Регистрация: Jul 2009
Адрес: C-Петербург
Сообщений: 37
|
cпасибо за ответ!
Всем спасибо за ответ, особенно gr cdr!
Все получилось, продолжаю переводить игру с AS2 на AS3 |
Часовой пояс GMT +4, время: 16:12. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|