我试图在As3 http://flashexplained.com/actionscript/moving-and-rotating-a-movie-clip-with-button-symbols-via-actionscript/中实现这一目标。即使它非常简单,动作脚本3中也没有已知的教程。我只需要左右移动。请不要向我介绍有关箭头键盘键的教程。谢谢!
答案 0 :(得分:0)
意识到在As2中,这种项目比在As3中简单得多。我们需要做的编码要先进得多。
就像你的As2教程一样,制作你的按钮和火箭,然后相应地标记它们。
现在,让我们从这里开始吧。打开操作窗口,然后输入。
addEventListener(Event.ENTER_FRAME,onFrame)
function onFrame(e:Event):void {
//we'll get to this later
}
哦,这看起来很可怕。没关系。这基本上是.onEnterFrame
的as3替代品。我们在这里说的是,当这种情况发生时(ENTER_FRAME
)我们想要触发这个函数(onFrame
)。这种解释过于简化,但它符合我们的目的。
很好,所以我们每次输入新框架时都会触发一个函数!
好的,现在我们需要一些变量来告诉我们是否按下按钮。
var leftIsPressed:Boolean = false
var rightIsPressed:Boolean = false
但他们有点......就在那里。停滞不前。我们需要为我们做一个改变它们的功能。
moveLeft.addEventListener(MouseEvent.MOUSE_DOWN,leftPressed)
moveRight.addEventListener(MouseEvent.MOUSE_DOWN,rightPressed)
function leftPressed(e:MouseEvent):void {
leftIsPressed = true
}
function rightPressed(e:MouseEvent):void {
rightIsPressed = true
}
在这里我们说," moveLeft
,等到你按下鼠标,然后触发这个功能(leftPressed
)。"然后,在leftPress
中,我们更改变量,告诉我们按钮是否从false
按下到true
。
但是当我们发布鼠标时会发生什么?绝对没有。 leftPressed
将保持true
,而我们可怜的小火箭将无限期射入太空!让我们解决这个问题。
stage.addEventListener(MouseEvent.MOUSE_UP,mouseReleased)
function mouseReleased(e:MouseEvent):void {
leftIsPressed = false
rightIsPressed = false
}
请注意,我们告诉舞台等待鼠标释放,而不是按钮。如果我们告诉按钮等待鼠标上升,那么如果鼠标在发布时当前位于按钮上,我们只会将变量更改为false
!因此,当鼠标在舞台的任何部分被释放时,我们告诉舞台发射事件。
很好,所以现在我们随时都可以通过访问leftIsPressed
和rightIsPressed
来了解按钮是否被按下了!
让我们回到onFrame
函数。
function onFrame(e:Event):void {
if (leftIsPressed) {
rocket.x -= 5
}
if (rightIsPressed) {
rocket.x += 5
}
}
每个帧都会触发此函数。所以,如果我们的一个变量是真的,火箭就会向那个方向移动!我们完成了!按ctrl + enter并观看小火箭移动!
为了让事情变得简单,我以更正统的方式组织了我们的代码。祝你好运!
最终法典
var leftIsPressed:Boolean = false
var rightIsPressed:Boolean = false
addEventListener(Event.ENTER_FRAME,onFrame)
moveLeft.addEventListener(MouseEvent.MOUSE_DOWN,leftPressed)
moveRight.addEventListener(MouseEvent.MOUSE_DOWN,rightPressed)
stage.addEventListener(MouseEvent.MOUSE_UP,mouseReleased)
function onFrame(e:Event):void {
if (leftIsPressed) {
rocket.x -= 5
}
if (rightIsPressed) {
rocket.x += 5
}
}
function leftPressed(e:MouseEvent):void {
leftIsPressed = true
}
function rightPressed(e:MouseEvent):void {
rightIsPressed = true
}
function mouseReleased(e:MouseEvent):void {
leftIsPressed = false
rightIsPressed = false
}