在As3中使用舞台上的按钮移动对象

时间:2014-09-01 09:43:09

标签: object button move stage

我试图在As3 http://flashexplained.com/actionscript/moving-and-rotating-a-movie-clip-with-button-symbols-via-actionscript/中实现这一目标。即使它非常简单,动作脚本3中也没有已知的教程。我只需要左右移动。请不要向我介绍有关箭头键盘键的教程。谢谢!

1 个答案:

答案 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!因此,当鼠标在舞台的任何部分被释放时,我们告诉舞台发射事件。

很好,所以现在我们随时都可以通过访问leftIsPressedrightIsPressed来了解按钮是否被按下了!

让我们回到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
}