0

だから、私はある意味でポンのような変数で無限ループを作成しようとしています、あなたはボールを打ち、それは何度も何度も戻って、左、右、左、右に行きますそれはうまくいきますが、それは毎回速くなり続けます理由はコードにあると思いますが、新しい間隔を設定するたびに、変数に割り当てられていないため、クリアできません。とにかく、私が欲しいのは毎回同じ速度で、どんどん速くなることはありませんが、これを回避する方法はありますか?もしそうなら、別の方法を提案していただけますか?ありがとうございました!

import flash.events.Event;

var badbee1right:uint = setInterval (beebad1right, 100);
function beebad1right():void {
    beebad1.x+=15;
}

var badbee1left:uint = setInterval (beebad1left, 100);
clearInterval(badbee1left);
function beebad1left():void {
    beebad1.x-=15;
}

leftbadbeewall.addEventListener(Event.ENTER_FRAME, leftbadbeewallhit);
function leftbadbeewallhit(e:Event) {
    if(beebad1.hitTestObject(leftbadbeewall)) {
        beebad1.x+=7;
        clearInterval(badbee1left);
        clearInterval(badbee1right);

    }
}

rightbadbeewall.addEventListener(Event.ENTER_FRAME, rightbadbeewallhit);
function rightbadbeewallhit(e:Event) {
    if(beebad1.hitTestObject(rightbadbeewall)) {
        clearInterval(badbee1right);
        bee.x-=7;
        clearInterval(badbee1left);
    }
}
4

2 に答える 2

0

そのコードはあまり意味がありません!また、2つのframeHandlersは常に悪い考えです。ブール値で方向を確認して設定してみませんか!?
このようなもの:(テステットではない)このスニペットは、ステージ上にbadbee1、leftbadbeewall、rightbadbeewallのインスタンスがあることを前提としています

var goingRight:Boolean = true;
var speed:uint = 15;
addEventListener(Event.ENTER_FRAME, enterFrame);

function enterFrame(e:Event):void{

    if(goingRight)
        badbee1.x += speed;
    else
        badbee1.x -= speed;

    if(beebad1.hitTestObject(leftbadbeewall))
        goingRight = true;

    if(beebad1.hitTestObject(rightbadbeewall))
        goingRight = false;

}
于 2013-03-09T19:48:36.943 に答える
0

x 軸だけでなく、y 軸の動きについても前もって計画することは悪い考えではありません。enterframe メソッドから moveBee() を呼び出して、以下のコードを試してください。_beeBounds には独自の値を使用する必要があります。各フレームで badbee が移動する量である _beeDelta をいじってみましょう。左/右の制限に達した場合、コードは同じことを行います。x デルタに -1 を掛けて、ハチを反対方向に送ります。同じことが y 値にも当てはまります。y 軸の動きが必要ない場合は、_beeDelta.y をゼロに設定できます。

private var _beeBounds:Rectangle = new Rectangle(0,0,100,100);
private var _beeDelta:Point = new Point(15,5);

private function moveBee():void{
  badbee.x += _beeDelta.x;
  badbee.y += _beeDelta.y;

  if(badBee.x > _beeBounds.right || badbee.x < _beeBounds.left){
    _beeDelta.x *= -1;
    badbee.x += _beeDelta.x; //optional correction. prevents badbee from being out of bounds for a frame.
  }
  if(badBee.y > _beeBounds.top || badbee.y < _beeBounds.bottom){
    _beeDelta.y *= -1;
    badbee.y += _beeDelta.y;
  }
}
于 2013-03-09T20:35:45.763 に答える