0

雲、アヒル、スコア表示、および波には、それぞれの動きと動作を制御するクラスが必要です。

アヒルをクリックすると「撃たれ」、アヒルはステージだけでなく配列からも削除されます (これには arrayName.splice() を使用します)。これが発生すると、スコア表示はカウントダウンするはずです。

残っているアヒルの数は、スコア表示のクラス内のプロパティであり、アヒルが撃たれたときに Main によって調整される必要があります。

すべてのアヒルが「撃たれる」と、ゲームは「あなたが勝つ」というメッセージをアニメーション化する必要があります。これは、ENTER FRAME イベントをアニメーション機能に関連付けるイベント リスナーを追加および削除することで実行できます。(これは価値があるだけなので、最後に残してください)。

アヒルが「撃たれる」とき、波と雲もビューとそれぞれの配列から削除する必要があります。

プレイヤーが何度も勝ったり負けたりすると、ゲームはリセットされます。(一度だけではありません)

私はこれのほとんどを行っていますが、スコアボードに問題があります。すべてをリセットする方法に関するヒントと、勝つサインをコーディングする方法も役立ちます。

import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.text.TextField;

[SWF(width="800", height="600", backgroundColor="#E6FCFF")]

public class Main extends Sprite
{
    private var _sittingDucks:Array = []; //always set your arrays with [] at the top
    public var _scoreDisplay:TextField


    public function Main()
    {
        //adding the background, and positioning it
        var background:Background = new Background();
        this.addChild(background);
        background.x = 30;
        background.y = 100;

        for(var i:uint = 0; i < 5; i++)
        {
            //adding the first cloud, and positioning it
            var clouds:Clouds = new Clouds();
            this.addChild(clouds);
            clouds.x = 130 + Math.random() * 600; //130 to 730
            clouds.y = 230;
            clouds.speedX = Math.random() * 3;
            clouds.width = clouds.height = 200 * Math.random()//randomly changes the clouds demensions
        }   

        var waves:Waves = new Waves();
        this.addChild(waves);
        waves.x = 0;
        waves.y = 510;
        waves.speedX = Math.random() * 3;


        for(var j:uint = 0; j < 8; j++)
        {
            var ducks:Ducks = new Ducks();
            this.addChild(ducks);
            ducks.x = 100 + j * 100;
            ducks.y = 475;
            _sittingDucks.push(ducks);
            ducks.addEventListener(MouseEvent.CLICK, ducksDestroy);
        }

        var waves2:Waves = new Waves();
        this.addChild(waves2);
        waves2.x = 0;
        waves2.y = 520;
        waves2.speedX = Math.random() * 3;

        var setting:ForeGround = new ForeGround();
        this.addChild(setting);
        setting.x = 0;
        setting.y = 50;
        setting.width = 920;

        var board:ScoreDisplay = new ScoreDisplay();
        this.addChild(board);
        board.x = 570;
        board.y = 35;

    }
    private function ducksDestroy(event:MouseEvent):void
    {
        //store the crow we clicked on in a new array
        var clickedDuck:Ducks = Ducks(event.currentTarget);

        //remove it from the crows array
        //find the address of the crow we are removing
        var index:uint = _sittingDucks.indexOf(clickedDuck);

        //remove it from the array with splice
        _sittingDucks.splice(index, 1);

        //remove it from my document's display list
        this.removeChild(clickedDuck);
    }
}


import flash.events.Event;
import flash.events.MouseEvent;
import flash.text.TextField;
import ScoreDisplayBase; // always import the classes you are using

public class ScoreDisplay extends ScoreDisplayBase
{
    private var txt:TextField; // where is it initialized?
    private var score:uint = 0;

    public function ScoreDisplay()
    {
        super(); // do you init txt here?
    }

    public function scoreUpdate():void
    {
        score += 10; // ok, so I suppose that your score does not represent the remaining ducks as you said, just only a score
        txt.text = score.toString();
    }
}
4

1 に答える 1

2

Aaaalrighty:

  1. ScoreDisplayのコンストラクターでTextFieldtxtを作成する必要があります。インスタンス化し、テキストを初期スコア(0)に設定し、addChild(txt)

  2. 後でスコアを設定するには、表示を参照する方法が必要です。

    //you want a reference to the ScoreDisplay, not this
    public var _scoreDisplay:TextField //no
    public var _scoreDisplay:ScoreDisplay //yes
    

    Mainコンストラクターで作成するときは、参照を保持する必要があります。

    _scoreDisplay = :ScoreDisplay = new ScoreDisplay();
    this.addChild(_scoreDisplay );
    _scoreDisplay .x = 570;
    _scoreDisplay .y = 35;
    
  3. ゲームをリセットできるようにしたい場合は、アヒルの作成を取得して、Mainクラスのコンストラクターの外部のメソッドに配置することをお勧めします。また、ScoreDisplayでスコア(および表示)を0に設定する「リセット」関数を作成する必要があります。

    private function spawnDucks() {
        for(var j:uint = 0; j < 8; j++)
        {
            var ducks:Ducks = new Ducks();
            this.addChild(ducks);
            ducks.x = 100 + j * 100;
            ducks.y = 475;
            _sittingDucks.push(ducks);
            ducks.addEventListener(MouseEvent.CLICK, ducksDestroy);
        }
    }
    

    次に、コンストラクターで呼び出し、ゲームをリセットする必要があるときに再度呼び出すことができます。

  4. ducksDestroy(event:MouseEvent)スコアを再計算し、勝ったかどうかを確認し、メッセージを表示して、ゲームをリセットしたい場所になります。表示するには何らかのポップアップが必要です。どこから始めればよいかわからない場合は、ここに適切なポップアップがあります。

    private function ducksDestroy(event:MouseEvent):void
    {
        //store the crow we clicked on in a new array
        var clickedDuck:Ducks = Ducks(event.currentTarget);
    
        //remove it from the crows array
        //find the address of the crow we are removing
        var index:uint = _sittingDucks.indexOf(clickedDuck);
    
        //remove it from the array with splice
        _sittingDucks.splice(index, 1);
    
        //remove it from my document's display list
        this.removeChild(clickedDuck);
    
        //update the score
        _scoreDisplay.scoreUpdate();
    
        //Check if all the ducks are gone
        if (_sittingDucks.length == 0) {
            //All the ducks are dead, we've won the game!
    
            //create some kind of popup to display.
            //add it to the screen, have some form
            //of button (or a timer) take it away
    
            //whatever takes the popup away, have it call 'reset'
    
        }
    }
    
    private function reset():void
    {
        //write a reset method to clear the score
        _scoreDisplay.reset(); 
    
        //create some ducks and you're ready to go!
        spawnDucks();
    }
    
于 2012-04-26T20:24:58.183 に答える