【问题标题】:Move the circle in as3在 as3 中移动圆圈
【发布时间】:2014-02-14 11:17:13
【问题描述】:

我已经在屏幕上有了带有图像的图形,当我按下键盘上的箭头时,我想让它移动。

但似乎监听器没有运行,也没有错误。

代码如下:

package
{
    import flash.display.Loader;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.display.BitmapData;
    import flash.events.KeyboardEvent;
    import flash.ui.Keyboard;
    import flash.net.URLRequest;

    /**.
     * ....
     * @author Kaoru
     */

    [SWF(width = '800', height = '600', backgroundColor = '#000000', frameRate = '24')]

    public class GameManager extends Sprite 
    {
        var myBitmap:BitmapData;
        var imgLoader:Loader;
        var circle:Sprite;

        public function GameManager():void 
        {
            circle = new Sprite();
            imgLoader = new Loader();
            imgLoader.load(new URLRequest("../lib/fira_front.png"));
            imgLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, drawImage);
            addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);
        }

        private function drawImage(e:Event):void
        {
            myBitmap = new BitmapData(imgLoader.width, imgLoader.height, false);
            myBitmap.draw(imgLoader);

            circle.graphics.beginBitmapFill(myBitmap, null, true);
            circle.graphics.drawCircle(50, 50, 10);
            circle.graphics.endFill();
            addChild(circle);
        }

        private function onKeyDown(e:KeyboardEvent):void
        {
            if (e.keyCode == Keyboard.LEFT)
            {
                circle.x += 5;
            }

            else if (e.keyCode == Keyboard.RIGHT)
            {
                circle.x -= 5;
            }

            if (e.keyCode == Keyboard.UP)
            {
                circle.y += 5;
            }

            else if (e.keyCode == Keyboard.DOWN)
            {
                circle.y -= 5;
            }
        }
    }
}

【问题讨论】:

  • 如果你想将圆移动 5 倍然后创建像 var circleSpeed:int = 5 这样的变量并将其放入代码中。它有助于管理代码,尤其是在我们需要修改代码时。谢谢。

标签: actionscript-3 keyboard-events stage


【解决方案1】:

你需要像这样将它添加到stage

stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);

我已经像这样修改了你的代码:

始终先检查ADDED_TO_STAGE,然后继续,

public function GameManager():void 
{
      addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
}

private function onAddedToStage(e:Event):void
{
      circle = new Sprite();
      imgLoader = new Loader();
      imgLoader.load(new URLRequest("../lib/fira_front.png"));
      imgLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, drawImage);
      stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown); //This line is modified

      removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
}

【讨论】:

    【解决方案2】:

    您是否尝试过直接在舞台上添加您的听众?

    这样

    public function GameManager():void 
    {
        circle = new Sprite();
        imgLoader = new Loader();
        imgLoader.load(new URLRequest("../lib/fira_front.png"));
        imgLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, drawImage);
        addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);
    }
    

    变成这个

    public function GameManager():void 
    {
        circle = new Sprite();
        imgLoader = new Loader();
        imgLoader.load(new URLRequest("../lib/fira_front.png"));
        imgLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, drawImage);
        stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-30
      • 1970-01-01
      相关资源
      最近更新 更多