嘿,所以我一直在做一個太空射擊游戲,我創建了運動,但我想把飛船限制在可見的舞臺區域,我不知道如何做到這一點
另外,如果我的代碼很亂,我很抱歉,我真的是個新手。舞臺的尺寸是1920 x 1080
這里是運動的代碼var leftKeyPressed: Boolean = false;
var rightKeyPressed: Boolean = false;
var upKeyPressed: Boolean = false;
var downKeyPressed: Boolean = false;
var xMoveSpeed: Number = 15;
var yMoveSpeed: Number = 15;
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler) 。
function keyDownHandler(e: KeyboardEvent) 。void e: KeyboardEvent:.
{
if (e.keyCode == Keyboard.LEFT)
{
leftKeyPressed = true;
}
if (e.keyCode == 鍵盤.RIGHT)
{
rightKeyPressed = true;
}
if (e.keyCode == Keyboard.UP)
{
upKeyPressed = true;
}
if (e.keyCode == Keyboard.DOWN)
{
downKeyPressed = true;
}
}
stage.addEventListener(KeyboardEvent.KEY_UP, keyUpHandler) 。
function keyUpHandler(e: KeyboardEvent)。void e: KeyboardEvent:.
{
if (e.keyCode == Keyboard.LEFT)
{
leftKeyPressed = false;
}
if (e.keyCode == 鍵盤.RIGHT)
{
rightKeyPressed = false;
}
if (e.keyCode == Keyboard.UP)
{
upKeyPressed = false;
}
if (e.keyCode == Keyboard.DOWN)
{
downKeyPressed = false;
}
}
stage.addEventListener(Event.ENTER_FRAME, moveHero) 。
function moveHero(e: Event)。void e: Event:.
{
if (leftKeyPressed)
{
ship.x -= xMoveSpeed。
}
if (rightKeyPressed)
{
ship.x = xMoveSpeed。
}
if (upKeyPressed)
{
ship.y -= yMoveSpeed。
}
if (downKeyPressed)
{
ship.y = yMoveSpeed。
}
uj5u.com熱心網友回復:
好吧,你可以從這里開始。
// One map is much better than a separate variable for each and every key.
var keyMap:Object = new Object;
///初始鍵圖值。
keyMap[Keyboard.UP] = 0;
keyMap[Keyboard.DOWN] = 0;
keyMap[Keyboard.LEFT] = 0;
keyMap[Keyboard.RIGHT] = 0;
//有了keymap,你就不需要這些大的事件處理程式了,。
// 你只需要一個只有一行代碼的事件處理程式。
stage.addEventListener(KeyboardEvent.KEY_DOWN, onUpDown) 。
stage.addEventListener(KeyboardEvent.KEY_UP, onUpDown) 。
function onUpDown(e:KeyboardEvent):void。
{
//span>物件的成員中含有鍵碼的名稱。
///在KEY_DOWN事件中會被設定為1,在KEY_UP事件中會被設定為0。
keyMap[e.keyCode] = int(e. type == KeyboardEvent.KEY_DOWN)。)
}
stage.addEventListener(Event.ENTER_FRAME, moveHero) 。
//這將為你提供X和Y坐標的最小和最大值。
//你可能需要調整它,因為飛船有寬度和高度。
var conStraints: Rectangle = new Rectangle(0, 0, 1920, 1080)。)
var xMoveSpeed:Number = 15;
var yMoveSpeed:Number =15;
function moveHero(e:Event) :void
{
var anX:Number = ship.x;
var anY:Number = ship.y;
//使用keymap來計算新的坐標。。
//考慮到所有相關的按鍵被按下。。
anX = xMoveSpeed * (keyMap[Keyboard.RIGHT] - keyMap[Keyboard.LEFT])。
anY = yMoveSpeed * (keyMap[Keyboard.DOWN] - keyMap[Keyboard.UP])。)
//現在設定新的船舶坐標,并考慮到約束。
ship.x = Math.min(conStraints. right, Math.max(conStraints.left, anX))。
ship.y = Math.min(conStraints. bottom, Math.max(conStraints.top, anY))。
uj5u.com熱心網友回復:
我想這是最簡單的解決方案,告訴我它是否有效
function keyDownHandler(e: KeyboardEvent)。void e: KeyboardEvent:.
{
if (e.keyCode == Keyboard. LEFT && ship.x > 15)
{
leftKeyPressed = true;
}
if (e.keyCode == Keyboard. RIGHT && ship.x < 1905)
{
rightKeyPressed = true;
}
if (e.keyCode == Keyboard. UP && ship.y > 15)
{
upKeyPressed = true;
}
if (e.keyCode == Keyboard. DOWN && ship.y < 1065)
{
downKeyPressed = true;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/319498.html
標籤:
