![]() |
|
||||||||||
|
|||||
|
Регистрация: Feb 2008
Сообщений: 39
|
Добрый день!
Изучаю флеш и решил создать простенькие гоночки, реализовав движение машинки по вертикали и горизонтали обнаружил, что присутствуют рывки в движении, может кто-то может подсказать как с этим бороться или может у меня какие то непонятные для меня косяки в коде? Скрипт ниже. СВФ вкладываю. package src { import flash.display.*; import flash.events.*; public class Game extends Sprite{ //VARS public var playerCar:MovieClip; private var _universe:Universe; public function Game() { // constructor code trace("Game.as initialized") _universe = new Universe(); addChild(_universe); playerCar = new car_mc; addChild(playerCar); playerCar.x = playerCar.width; playerCar.y = App.SCR_H - playerCar.height; App.stage.addEventListener(KeyboardEvent.KEY_DOWN, keyD); App.stage.addEventListener(KeyboardEvent.KEY_UP, keyU); } private function keyD(e:KeyboardEvent):void { if (e.keyCode == 38) { stopMove() playerCar.addEventListener(Event.ENTER_FRAME, movCarTop); } if (e.keyCode == 40) { stopMove() playerCar.addEventListener(Event.ENTER_FRAME, movCarBot); } if (e.keyCode == 39) { stopMove() playerCar.addEventListener(Event.ENTER_FRAME, movCarRight); } if (e.keyCode == 37) { stopMove() playerCar.addEventListener(Event.ENTER_FRAME, movCarLeft); } trace(e); } // playerCar.removeEventListener(Event.ENTER_FRAME, movCarTop); private function movCarTop(e:Event):void { playerCar.y -= 3; } private function movCarBot(e:Event):void { playerCar.y += 3; } private function movCarRight(e:Event):void { playerCar.x += 3; } private function movCarLeft(e:Event):void { playerCar.x -= 3; } private function keyU(e:KeyboardEvent):void { trace(e) if (e.keyCode == 38) { playerCar.removeEventListener(Event.ENTER_FRAME, movCarTop); } if (e.keyCode == 40) { playerCar.removeEventListener(Event.ENTER_FRAME, movCarBot); } if (e.keyCode == 39) { playerCar.removeEventListener(Event.ENTER_FRAME, movCarRight); } if (e.keyCode == 37) { playerCar.removeEventListener(Event.ENTER_FRAME, movCarLeft); } } private function stopMove():void { playerCar.removeEventListener(Event.ENTER_FRAME, movCarTop); playerCar.removeEventListener(Event.ENTER_FRAME, movCarBot); playerCar.removeEventListener(Event.ENTER_FRAME, movCarRight); playerCar.removeEventListener(Event.ENTER_FRAME, movCarLeft); } } } Последний раз редактировалось Shaak; 10.11.2012 в 16:06. |
|
|||||
|
была минутка, я накидал вам пример, как примерно, сделал бы я
package { import flash.display.Graphics; import flash.display.Sprite; import flash.events.Event; import flash.events.KeyboardEvent; import flash.ui.Keyboard; public class Main extends Sprite { private var _speedsX:Object; private var _speedsY:Object; private var _car:Sprite; private var _speedOfCarX:int; private var _speedOfCarY:int; public function Main() { super(); //{определяем скорость для соответствующих клавиш //для оси x this._speedsX = { }; this._speedsX[Keyboard.RIGHT] = 3; this._speedsX[Keyboard.LEFT] = -3; //для оси у this._speedsY = { }; this._speedsY[Keyboard.UP] = -3; this._speedsY[Keyboard.DOWN] = 4; //} //{рисуем тестовую машинку this._car = new Sprite(); const g:Graphics = this._car.graphics g.beginFill(0x000000, 1.0); g.drawRect(0, 0, 50, 50); g.endFill(); super.addChild(this._car); //} if (super.stage) { this.super_addedToStageHandler(); } else { super.addEventListener(Event.ADDED_TO_STAGE, this.super_addedToStageHandler); } } private function super_addedToStageHandler(event:Event = null):void { super.removeEventListener(Event.ADDED_TO_STAGE, this.super_addedToStageHandler); super.addEventListener(Event.REMOVED_FROM_STAGE, this.super_removedFromStageHandler) super.stage.addEventListener(KeyboardEvent.KEY_DOWN, this.stage_keyDownHandler); super.stage.addEventListener(KeyboardEvent.KEY_UP, this.stage_keyUpHandler); //Запускаем общеигровой цикл super.addEventListener(Event.ENTER_FRAME, this.super_enterFrameHandler); } private function super_removedFromStageHandler(event:Event):void { this.removeEventListener(Event.REMOVED_FROM_STAGE, super_removedFromStageHandler); super.stage.removeEventListener(KeyboardEvent.KEY_DOWN, this.stage_keyDownHandler); super.stage.removeEventListener(KeyboardEvent.KEY_UP, this.stage_keyUpHandler); super.removeEventListener(Event.ENTER_FRAME, this.super_enterFrameHandler); } private function stage_keyDownHandler(event:KeyboardEvent):void { const keyCode:uint = event.keyCode; if (keyCode in this._speedsX) { this._speedOfCarX = this._speedsX[keyCode]; } else { this._speedOfCarX = 0; } if (keyCode in this._speedsY) { this._speedOfCarY = this._speedsY[keyCode]; } else { this._speedOfCarY = 0; } } private function stage_keyUpHandler(event:KeyboardEvent):void { this._speedOfCarX = 0; this._speedOfCarY = 0; } private function super_enterFrameHandler(event:Event):void { //обновляем позицию "авто" this._car.x += this._speedOfCarX; this._car.y += this._speedOfCarY; } } }
__________________
местонахождение |
|
|||||
|
Регистрация: Feb 2008
Сообщений: 39
|
Ой, попробовал ваш скрипт, это действительно не самая удачная идея такого перемещения, в моем случае подергивания происходят из-за взаимодействия слушателя клавиатуры с фрейм рейтом, у вас же сама реализация тормозит ))
Однако что касается реализации - я вот думал попробовать через таймеры, однако прочел, что это не самая лучшая реализации для игр вообще. |
|
|||||
|
Вы меня не поняли, по поводу
Цитата:
A вот это мне уже интересно Цитата:
__________________
местонахождение |
|
|||||
|
Регистрация: Feb 2008
Сообщений: 39
|
Цитата:
П.С. прошу простить, похоже флешка не вложилась изначально >< |
![]() |
![]() |
Часовой пояс GMT +4, время: 13:55. |
|
|
« Предыдущая тема | Следующая тема » |
|
|