0

ボタンをクリックするとキャラクターが実行され、ボタンを押したままにすると実行を継続するゲームを開発しようとしています。私は ActionScript 3 を初めて使用するので、ここで少し迷っています。

私の要件を満たすコードを見つけました。ただし、以下のように矢印キーを使用します。

function moveRunKei() {
    if (Key.isDown(Key.RIGHT)) {
        dx = 15; //speed
        runKei._xscale = 50;
    } else if (Key.isDown(Key.LEFT)) {
        dx = -15;
        runKei._xscale = -50;
    } else {
        dx = 0;
    }

    runKei._x += dx;

    if (runKei._x < 100) runKei._x = 100; //30
    if (runKei._x > 550) runKei._x = 550;

    if (dx != 0 && runKei._currentframe == 1) {
        runKei.gotoAndPlay("run");
    } else if (dx == 0 && runKei._currentframe != 1) {
        runKei.gotoAndStop("stand");
    }
}

this.onEnterFrame = function(){
    moveRunKei();
}

ボタンを使用してこれを行う必要があります。

/////////////////////////////////////////////// /////////////////////////////////

import flash.events.Event;

var mouseDown:Boolean;
var speed:Number=4;
addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
addEventListener(Event.ENTER_FRAME, onEnterFrame);


function onMouseDown(event:MouseEvent):void
{
  mouseDown = true;
}

function onMouseUp(event:MouseEvent):void
{
  mouseDown = false;
}

function onEnterFrame(event:Event):void
{
  if (mouseDown)
  {
        runKei.gotoAndPlay("Run");
    runKei.x += speed;

  }

}

このコードは、ボタンを押したままにするとキャラクターを連続的に動かすことができますが、動いている間はアニメーション化されませんでした (ボタンを離すまでキャラクターはフリーズします) - 説明の仕方がわかりません。

4

1 に答える 1

0

移動用の各ボタンにマウス ダウンとマウス アップのイベント リスナーを追加する必要があります。次に、ボタンが押されているかどうかを追跡するブール値を用意します。

リンクしたコードはactionscript2のように見えるので、as3で動作するように変更したことに言及する価値があります

var leftDown:Boolean = false;
var rightDown:Boolean = true;

leftButton.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown)
rightButton.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown)
leftButton.addEventListener(MouseEvent.MOUSE_UP, onMouseUp)
rightButton.addEventListener(MouseEvent.MOUSE_UP, onMouseUp)
leftButton.addEventListener(MouseEvent.MOUSE_OUT, onMouseUp)
rightButton.addEventListener(MouseEvent.MOUSE_OUT, onMouseUp)

function onMouseDown(e:MouseEvent):void
{
    //since you can't click on two things at once, this is fine.
    rightDown = (e.target == rightButton);
    leftDown = (e.target == rightButton);
}

function onMouseDown(e:MouseEvent):void
{
    //since you can't click on two things at once, this is fine.
    rightDown = (e.target == rightButton);
    leftDown = (e.target == leftButton);
}

function moveRunKei()
{
    if (rightDown) {
        dx = 15; //speed
        runKei.scaleX = -0.5;
    } else if (leftDown) {
        dx = -15;
        runKei.scaleX = -0.5;
    } else {
        dx = 0;
    }

    runKei.x += dx;

    if (runKei.x < 100) runKei.x = 100; //30
    if (runKei.x > 550) runKei.x = 550;

    if (dx != 0 && runKei.currentFrame == 1)
    {
        runKei.gotoAndPlay("run");
    }
    else if (dx == 0 && runKei.currentFrame != 1)
    {
        runKei.gotoAndStop("stand");
    }
}

    this.addEventListener(Event.ENTER_FRAME, onEnterFrame);

function onEnterFrame(e:Event):void
{
    moveRunKei();
}
于 2013-07-24T09:18:56.020 に答える