![]() |
|
||||||||||
|
|||||
|
Регистрация: Apr 2010
Сообщений: 219
|
используйте таймер с проверкой на факт нажатия кнопки
|
|
|||||
|
Регистрация: Jul 2010
Сообщений: 51
|
Извините для меня AS это что-то новое после PHP, ия плохо разбираюсь в таймерах и других примочках (в евентах вроде уже немного вникаю)
Прошу на примерах описывать, пожалуйста |
|
|||||
|
буду краток
модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
|
Если попроще: по нажатию кнопки просто ставьте флаг "объект движется вперёд" при отпускании "объект стоит". и по энерфрэму в соответствии с флагом двигайте объект.
В mvc конценпции: мы слушаем событие от клавиатуры по которому изменяем модель (направление движения объекта) сам объект слушает эту модель и двигается (либо просто меняет направление движения)
__________________
Отряд Котовскага |
|
|||||
|
Регистрация: Nov 2007
Сообщений: 1,724
|
import flash.events.Event; import flash.events.KeyboardEvent; import flash.ui.Keyboard; /// private var pressedSpace:Boolean = false; private function init():void { stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler); stage.addEventListener(KeyboardEvent.KEY_UP, keyUpHandler); } private function keyUpHandler(e:KeyboardEvent):void { if (e.keyCode == Keyboard.SPACE) { pressedSpace = false; } } private function keyDownHandler(e:KeyboardEvent):void { if (e.keyCode == Keyboard.SPACE) { addEventListener(Event.ENTER_FRAME, enterFrameHandler); pressedSpace = true; } } private function enterFrameHandler(e:Event):void { if (pressedSpace) { object.x += 5; } else { removeEventListener(Event.ENTER_FRAME, enterFrameHandler); } } |
|
|||||
|
Странный подход. Почему бы не отписываться от ENTER_FRAME прямо в keyUpHandler?
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
|
Регистрация: Nov 2007
Сообщений: 1,724
|
Тогда смысл переменной теряется)
|
|
|||||
|
Ну и переменную уберём. Лишняя переменная - это хорошо?
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
|
|
|
|||||
|
гыыы
package { import flash.display.Sprite; import flash.events.Event; import flash.events.KeyboardEvent; /** * ... * @author 1 */ public class Main extends Sprite { private var tank:Sprite; private var dx:Number; private var dy:Number; private function CreateTank():void { tank = new Sprite(); tank.graphics.beginFill(0x800000); tank.graphics.drawRoundRect( -15, -20, 30, 40, 5); tank.graphics.beginFill(0x999999); tank.graphics.drawRect( -3, -25, 6, 25); tank.graphics.beginFill(0xbbbbbb); tank.graphics.drawRect( -5, -30, 10, 7); tank.graphics.beginFill(0xFF0000); tank.graphics.drawCircle(0, 0, 10); tank.graphics.endFill(); stage.addChild(tank); tank.x = stage.stageWidth / 2; tank.y = stage.stageHeight / 2; } public function Main():void { if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } private function init(e:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, init); // entry point CreateTank(); dx = 0; dy = 0; stage.addEventListener(KeyboardEvent.KEY_DOWN, KeyPressed); stage.addEventListener(KeyboardEvent.KEY_UP, KeyDePressed); stage.addEventListener(Event.ENTER_FRAME, TankMove) } private function TankMove(e:Event):void { if (dx == 0 && dy == -1) { tank.rotation = 0 }; if (dx == 1 && dy == -1) { tank.rotation = 45 }; if (dx == 1 && dy == 0) { tank.rotation = 90 }; if (dx == 1 && dy == 1) { tank.rotation = 135 }; if (dx == 0 && dy == 1) { tank.rotation = 180 }; if (dx == -1 && dy == 1) { tank.rotation = 225 }; if (dx == -1 && dy == 0) { tank.rotation = 270 }; if (dx == -1 && dy == -1) { tank.rotation = 315 }; var c:Number = 5; if (dx != 0 && dy != 0) { c = Math.sqrt(c * c + c * c) / 2; } tank.x += dx * c; tank.y += dy * c; if (tank.x < 0) { tank.x += stage.stageWidth; } if (tank.y < 0) { tank.y += stage.stageHeight; } if (tank.x > stage.stageWidth) { tank.x -= stage.stageWidth; } if (tank.y > stage.stageHeight) { tank.y -= stage.stageHeight; } } private function KeyPressed(e:KeyboardEvent):void { var keyCode:Number = e.keyCode; if (keyCode == 39 || keyCode == 68) { dx = 1; } if (keyCode == 37 || keyCode == 65) { dx = -1; } if (keyCode == 38 || keyCode == 87) { dy = -1; } if (keyCode == 40 || keyCode == 83) { dy = 1; } } private function KeyDePressed(e:KeyboardEvent):void { var keyCode:Number = e.keyCode; if (keyCode == 39 || keyCode == 68) { dx = 0; } if (keyCode == 37 || keyCode == 65) { dx = 0; } if (keyCode == 38 || keyCode == 87) { dy = 0; } if (keyCode == 40 || keyCode == 83) { dy = 0; } } } } |
|
|||||
|
Цитата:
__________________
...вселенская грусть |
![]() |
![]() |
Часовой пояс GMT +4, время: 10:28. |
|
|
« Предыдущая тема | Следующая тема » |
|
|