3

私は AS3 の初心者で、横スクロールのシューティング ゲームを作ろうとしています。多少の進歩はありましたが、弾丸自体で壁にぶつかりました。私が使用しているコードは次のとおりです。

var circle:Sprite = new Sprite();

function shoot() {
  circle.graphics.beginFill(0xFF794B);
  circle.graphics.drawCircle(0, 00, 7.5);
  circle.graphics.endFill();
  addChild(circle);
  circle.x = ship_mc.x;
  circle.y = ship_mc.y + 43; 
}

これの問題は、一度に 1 つの弾丸しか画面に表示できないことです。これを変更して弾丸を無制限に作成できるようにするにはどうすればよいですか?

4

2 に答える 2

2

メソッド内にオブジェクトを作成する

function shoot() {
    var circle:Sprite = new Sprite();
    circle.graphics.beginFill(0xFF794B);
    circle.graphics.drawCircle(0, 00, 7.5);
    circle.graphics.endFill();
    addChild(circle);
    circle.x = ship_mc.x;
    circle.y = ship_mc.y + 43; 
}

それ以外の場合、circle変数は 1 つしかありません。今回は、メソッドが呼び出されるたびに新しい円が作成されます。

ただし、後で削除できるように、すべての円を何らかの方法で保存することをお勧めします。

var allCircles: Vector.<Sprite> = new Vector.<Sprite>();
function shoot() {
    var circle:Sprite = new Sprite();
    circle.graphics.beginFill(0xFF794B);
    circle.graphics.drawCircle(0, 00, 7.5);
    circle.graphics.endFill();
    addChild(circle);
    circle.x = ship_mc.x;
    circle.y = ship_mc.y + 43; 
    allCircles.push(circle);
}

その後、後ですべてのサークルをループできます。

for each (var circle: Sprite in allCircles) {
    // do something with this circle
}

すべての円をクリアするには:

for each (var circle: Sprite in allCircles) {
    removeChild(circle);
}
allCircles.clear();
于 2013-02-01T23:02:16.360 に答える
0

s の 1 つだけでなく、s の配列を格納したいSprite。最初にあなたを宣言しますArray

var circles:Array = new Array(); 

次に、シュート関数を変更して新しい関数を作成し、次のようにプッシュしますArray

function shoot() {
    var circle:Sprite = new Sprite();

    circle.graphics.beginFill(0xFF794B);
    circle.graphics.drawCircle(0, 00, 7.5);
    circle.graphics.endFill();
    circle.x = ship_mc.x;
    circle.y = ship_mc.y + 43; 

    circles.push(circle);  
    addChild(circles[circles.length-1]);
}
于 2013-02-01T23:03:26.697 に答える