【发布时间】:2015-07-06 08:37:30
【问题描述】:
我正在用简单的鼠标控制制作游戏。基本上,如果玩家将光标移动到角色的右侧,他就会向右移动,反之亦然。但是如果你停止移动鼠标,Flash 会忽略一个停止角色的条件,直到你再次移动鼠标,所以这个人只会继续向同一个方向移动,直到你移动光标。如果每帧都更新 mouseX 和播放器的位置,为什么会发生这种情况?以下是输入条件:
stage.addEventListener(MouseEvent.MOUSE_MOVE, CTRLupdateMousePosition)
private function CTRLupdateMousePosition(e:Event):void
{
if (mouseX > shaman_legs.x-2 - shaman_legs.width / 2 && mouseX < shaman_legs.x+2 + shaman_legs.width / 2) {
CTRLleftButtonDown = false
CTRLrightButtonDown = false
} else if (mouseX < shaman_legs.x - shaman_legs.width / 2 && GlobalVariableLibrary.COREgamePaused == false) {
CTRLleftButtonDown = true
CTRLrightButtonDown = false
} else if (mouseX > shaman_legs.x + shaman_legs.width / 2 && GlobalVariableLibrary.COREgamePaused == false) {
CTRLleftButtonDown = false
CTRLrightButtonDown = true
}
}
下面是通过移动角色和播放动画来响应玩家输入的代码:
addEventListener(Event.ENTER_FRAME, playerControl)
private function playerControl(e:Event):void {
trace("LeftDown:"+CTRLleftButtonDown, "RightDown:"+CTRLrightButtonDown)
boxSensor.x = shaman_legs.x
soulCatcher.x = shaman_legs.x
if (CTRLleftButtonDown == false && CTRLrightButtonDown == false && GlobalVariableLibrary.COREgamePaused == false) {
shaman_legs.gotoAndPlay("idle")
shaman_armsDown.gotoAndPlay("idle")
} else if (CTRLleftButtonDown && shaman_legs.x > 40 && GlobalVariableLibrary.COREgamePaused == false) {
shaman_legs.gotoAndPlay("walkLeft")
shaman_armsDown.gotoAndPlay("walk")
shaman_legs.x -= GlobalVariableLibrary.CHARspeed
shaman_mask.x -= GlobalVariableLibrary.CHARspeed
shaman_armsDown.x -= GlobalVariableLibrary.CHARspeed
shaman_armsUp.x -= GlobalVariableLibrary.CHARspeed
} else if (CTRLrightButtonDown && shaman_legs.x < 760 && GlobalVariableLibrary.COREgamePaused == false) {
shaman_legs.gotoAndPlay("walkRight")
shaman_armsDown.gotoAndPlay("walk")
shaman_legs.x += GlobalVariableLibrary.CHARspeed
shaman_mask.x += GlobalVariableLibrary.CHARspeed
shaman_armsDown.x += GlobalVariableLibrary.CHARspeed
shaman_armsUp.x += GlobalVariableLibrary.CHARspeed
}
}
【问题讨论】:
-
您没有提供足够的信息。您发布的这段代码在哪里?你说的什么条件被忽略了?使用调试器单步执行代码的结果是什么?发生了什么?你预计会发生什么?
-
这是一个进入帧事件监听器的功能。我的意思是第一个条件(光标位于玩家上方的那一刻),它应该停止角色的移动和他的动画。我尝试跟踪这些布尔值,当满足第一个条件时,它们都不会切换为 false。我也应该发布移动代码吗?
-
请编辑您的问题以包含所有这些信息。它仍然非常模糊。输入什么对象的帧监听器?是的,请同时发布移动代码。
-
更新了我的帖子。这些信息似乎足够了。
-
我不太确定你在这里做什么。每次鼠标移动后更新 CTRLleftButtonDown / CTRLrightButtonDown。然后在 enterframe 中检查这些值。它应该如何运作?
标签: actionscript-3 flash