我有一个方向和一个冲刺按钮。我想要发生的是: 按住冲刺按钮时,播放器移动速度提高两倍。然后当释放冲刺按钮时,玩家应该继续以常规速度行走。但是,即使方向按钮仍然按下,当释放冲刺按钮时,玩家也会停止。
public function addControllerListeners(){
controller.leftButton.addEventListener(TouchEvent.TOUCH_ROLL_OVER, moveCharLeft);
controller.leftButton.addEventListener(TouchEvent.TOUCH_BEGIN, moveCharLeft);
controller.leftButton.addEventListener(TouchEvent.TOUCH_END, playerStop);
controller.leftButton.addEventListener(TouchEvent.TOUCH_OUT, playerStop);
controller.leftButton.addEventListener(TouchEvent.TOUCH_ROLL_OUT, playerStop);
sprintButton.addEventListener(TouchEvent.TOUCH_ROLL_OVER, playerSprint);
sprintButton.addEventListener(TouchEvent.TOUCH_BEGIN, playerSprint);
sprintButton.addEventListener(TouchEvent.TOUCH_END, playerStopSprint);
sprintButton.addEventListener(TouchEvent.TOUCH_OUT, playerStopSprint);
sprintButton.addEventListener(TouchEvent.TOUCH_ROLL_OUT, playerStopSprint);
}
public function playerSprint(e:Event = null) {
playerChar.sprint = true;
trace("Player Sprint");
}
public function playerStopSprint(e:Event = null) {
playerChar.sprint = false;
trace("stopSprinting");
}
public function moveCharLeft(event:TouchEvent):void{
playerChar.setWalk("left");
}
public function playerStop(event:TouchEvent):void {
var target:String = event.target.name;
if(target == "upButton" || target == "rightButton" || target == "downButton" || target == "leftButton"){
trace("Player Stopped from: " + event.target.name + " - " + event.currentTarget.name);
playerChar.direction = "idle";
}
}
停止播放器功能中的跟踪表示目标名称是按住控制器按钮的任何一个。即使正在发布的按钮是冲刺按钮。
如果它有助于在舞台上添加按钮。我不认为这应该有所作为,但你永远不会知道。
答案 0 :(得分:1)
事件(触摸)不是持久的。当事件触发时,它已完成,您必须轮询下一个事件触发。自动重复是操作系统的一个功能,并且(通常)会被另一个类似事件中断(我认为第二次触摸会停止第一次触摸)。
使用指示是否满足特定条件的标志。您必须手动打开和关闭此布尔值,但它将能够跟踪您需要知道的内容。 (在此SO评论中可以找到类似的示例:https://stackoverflow.com/a/7976038/516537。这恰好适用于可以与其他键盘事件重复和共存的键盘事件,但您可以看到标志的使用。)所以,听听你的活动,还要:
你获得的是事件的持久性。如果TOUCH_BEGIN
(或其他开始)事件触发,但没有触发TOUCH_END
(或其他结束)事件,则该标志将是您知道触摸事件仍然存在的方式。
对所有这些的警告是,您必须以稍微不同的方式轮询事件。您必须添加Event.ENTER_FRAME
事件侦听器以继续检查哪些事件仍处于活动状态。
HTH。