角色在左右移动时跳跃 AS3
Character jumping while moving right and left AS3
我正在制作一个平台游戏,主角可以四处移动和跳跃。
我想让角色左右分别跳跃。也许同时使用两把钥匙并降落在地板上。我的角色影片剪辑符号是 Naruto
,我的地板影片剪辑符号是 floor
。
我的项目文件可以在这里找到:Naruto Game
为了做到这一点,我有一个主影片剪辑,其中包含所有其他影片剪辑,例如 "jump right" 和 "jump left".
我遇到的问题是,当用户向右移动时,我希望角色在跳跃时面向右侧(与左侧相同)。
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;
import flash.display.MovieClip;
import flash.events.Event;
import flash.display.Stage;
naruto.gotoAndStop("stance");
var rightPressed: Boolean = new Boolean(false);
var leftPressed: Boolean = new Boolean(false);
var upPressed: Boolean = new Boolean(false);
var downPressed: Boolean = new Boolean(false);
var narutoSpeed: Number = 10;
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);
stage.addEventListener(KeyboardEvent.KEY_UP, keyUpHandler);
stage.addEventListener(Event.ENTER_FRAME, gameLoop);
function keyDownHandler(keyEvent: KeyboardEvent): void {
if (keyEvent.keyCode == Keyboard.RIGHT) {
rightPressed = true;
} else if (keyEvent.keyCode == Keyboard.LEFT) {
leftPressed = true;
} else if (keyEvent.keyCode == Keyboard.UP) {
upPressed = true;
} else if (keyEvent.keyCode == Keyboard.DOWN) {
downPressed = true;
}
}
function keyUpHandler(keyEvent: KeyboardEvent): void {
if (keyEvent.keyCode == Keyboard.RIGHT) {
rightPressed = false;
naruto.gotoAndStop("standright")
} else if (keyEvent.keyCode == Keyboard.LEFT) {
leftPressed = false;
naruto.gotoAndStop("standleft")
} else if (keyEvent.keyCode == Keyboard.UP) {
upPressed = false;
naruto.gotoAndStop("stance")
} else if (keyEvent.keyCode == Keyboard.DOWN) {
downPressed = false;
naruto.gotoAndStop("stance")
}
}
function gameLoop(loopEvent: Event): void {
if (rightPressed) {
naruto.x += narutoSpeed;
naruto.gotoAndStop("right");
} else if (leftPressed) {
naruto.x -= narutoSpeed;
naruto.gotoAndStop("left");
} else if (upPressed) {
naruto.gotoAndStop("jumpright");
}
}
我非常感谢能够解决这个问题的人,我已经尝试解决这个问题一个星期了!非常感谢!
为了解决这个问题,您需要将您的 else
语句更改为额外的 if
语句(这样您就可以同时获得两个动作 - 跳跃和向右)。
这是一个代码示例:
function gameLoop(loopEvent: Event): void {
//If the right key is pressed, and the left key is NOT pressed.
if (rightPressed && !leftPressed) {
naruto.x += narutoSpeed;
naruto.gotoAndStop("right");
}
if(leftPressed && !rightPressed) {
naruto.x -= narutoSpeed;
naruto.gotoAndStop("left");
}
if (upPressed) {
//if up is pressed, and right is pressed
if(rightPressed && !leftPressed) naruto.gotoAndStop("jumpright");
if(leftPressed && !rightPressed) naruto.gotoAndStop("jumpleft");
}
if(leftPressed && rightPressed && !upPressed){
naruto.gotoAndStop("stance"); //if left & right are pressed, they negate each other and you play stance
}
}
使用此代码,如果按下右键,naruto
将向右移动。如果up也被按下,那么除了右移之外,还会从right状态切换到jumpright状态。
我正在制作一个平台游戏,主角可以四处移动和跳跃。
我想让角色左右分别跳跃。也许同时使用两把钥匙并降落在地板上。我的角色影片剪辑符号是 Naruto
,我的地板影片剪辑符号是 floor
。
我的项目文件可以在这里找到:Naruto Game
为了做到这一点,我有一个主影片剪辑,其中包含所有其他影片剪辑,例如 "jump right" 和 "jump left".
我遇到的问题是,当用户向右移动时,我希望角色在跳跃时面向右侧(与左侧相同)。
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;
import flash.display.MovieClip;
import flash.events.Event;
import flash.display.Stage;
naruto.gotoAndStop("stance");
var rightPressed: Boolean = new Boolean(false);
var leftPressed: Boolean = new Boolean(false);
var upPressed: Boolean = new Boolean(false);
var downPressed: Boolean = new Boolean(false);
var narutoSpeed: Number = 10;
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);
stage.addEventListener(KeyboardEvent.KEY_UP, keyUpHandler);
stage.addEventListener(Event.ENTER_FRAME, gameLoop);
function keyDownHandler(keyEvent: KeyboardEvent): void {
if (keyEvent.keyCode == Keyboard.RIGHT) {
rightPressed = true;
} else if (keyEvent.keyCode == Keyboard.LEFT) {
leftPressed = true;
} else if (keyEvent.keyCode == Keyboard.UP) {
upPressed = true;
} else if (keyEvent.keyCode == Keyboard.DOWN) {
downPressed = true;
}
}
function keyUpHandler(keyEvent: KeyboardEvent): void {
if (keyEvent.keyCode == Keyboard.RIGHT) {
rightPressed = false;
naruto.gotoAndStop("standright")
} else if (keyEvent.keyCode == Keyboard.LEFT) {
leftPressed = false;
naruto.gotoAndStop("standleft")
} else if (keyEvent.keyCode == Keyboard.UP) {
upPressed = false;
naruto.gotoAndStop("stance")
} else if (keyEvent.keyCode == Keyboard.DOWN) {
downPressed = false;
naruto.gotoAndStop("stance")
}
}
function gameLoop(loopEvent: Event): void {
if (rightPressed) {
naruto.x += narutoSpeed;
naruto.gotoAndStop("right");
} else if (leftPressed) {
naruto.x -= narutoSpeed;
naruto.gotoAndStop("left");
} else if (upPressed) {
naruto.gotoAndStop("jumpright");
}
}
我非常感谢能够解决这个问题的人,我已经尝试解决这个问题一个星期了!非常感谢!
为了解决这个问题,您需要将您的 else
语句更改为额外的 if
语句(这样您就可以同时获得两个动作 - 跳跃和向右)。
这是一个代码示例:
function gameLoop(loopEvent: Event): void {
//If the right key is pressed, and the left key is NOT pressed.
if (rightPressed && !leftPressed) {
naruto.x += narutoSpeed;
naruto.gotoAndStop("right");
}
if(leftPressed && !rightPressed) {
naruto.x -= narutoSpeed;
naruto.gotoAndStop("left");
}
if (upPressed) {
//if up is pressed, and right is pressed
if(rightPressed && !leftPressed) naruto.gotoAndStop("jumpright");
if(leftPressed && !rightPressed) naruto.gotoAndStop("jumpleft");
}
if(leftPressed && rightPressed && !upPressed){
naruto.gotoAndStop("stance"); //if left & right are pressed, they negate each other and you play stance
}
}
使用此代码,如果按下右键,naruto
将向右移动。如果up也被按下,那么除了右移之外,还会从right状态切换到jumpright状态。