0

画面に 3 つの異なる色の円が表示され、異なるクリック数で消えるような「ゲーム」を作成しています。メインの mxml 関数と、他に 4 つのクラスがあります。もうすぐ完成だと思っていましたが、エラーが発生しました。エラーが何であるかがわかりません。ここにルーブリックへのリンクがありますコードを実行すると発生するエラーは次のとおりです:「エラー #2032: ストリーム エラー。URL: file:///C|/Users/Gabe/Adobe Flash Builder 4.6/Project 1/bin -debug/framework_4.6.0.23201.swf" これが私のコードです:

main.mxml:

import com.multiClicker.*;

        import spark.components.Image;

        //create the init function
        public function init():void {
            //create new target and add it to the stage
            onEnterFrame();

        }

        public function onEnterFrame(e:Event):void{
            //2% chance of being added per frame
            if(Math.random() <= .02) {
                //33% chance of adding red target
                if(Math.random() <= .033){
                    //make a new image
                    var newCircle1:RedTarget = new RedTarget();

                    this.addElement(newCircle1);

                    //position circle 
                    newCircle1.x = Math.random() * stage.stageWidth;
                    newCircle1.y = Math.random() * stage.stageHeight;
                }
                //33% chance of adding blue target
                else if(Math.random() > .066){
                    //make a new image
                    var newCircle2:BlueTarget = new BlueTarget();

                    this.addElement(newCircle2);

                    //position circle 
                    newCircle2.x = Math.random() * stage.stageWidth;
                    newCircle2.y = Math.random() * stage.stageHeight;
                }
                //33% chance of adding green target
                else {
                    //make a new image
                    var newCircle3:GreenTarget = new GreenTarget();

                    this.addElement(newCircle3);

                    //position circle 
                    newCircle3.x = Math.random() * stage.stageWidth;
                    newCircle3.y = Math.random() * stage.stageHeight;
                }

            }
        }

私の Target.as ファイル:

package com.multiClicker{

//import the needed classes
import flash.display.Shape;
import flash.events.MouseEvent;
import flash.utils.Timer;

import spark.components.Image;

public var hp:Number;

public class Target extends Image 
{

    public function Target() {

        //add event listeners
        this.addEventListener(MouseEvent.CLICK, onClick);

    }

    //sets the hp of the target
    public function hP():Number { 
        return hp;
    }

    //get function that returns false if alpha is <= 0
    public function dead():Boolean {

        if(alpha <= 0){
            return false;
        }

    }

    //subtracts one from targets HP when clicked
    public function onClick(e:MouseEvent = null):void {


        //subtracts one from hp each click
        hp--;

        if(hp <=0) {
            this.addEventListener(onEnterFrame);
        }

    }

    //subtracts .1 from the classes alpha
    public function onEnterFrame(e:Timer):void{
        this.alpha =- .1;
    }

    //draws the target
    public function drawTarget(color):void {

        var circle:Shape = new Shape();

        circle.graphics.beginFill(color);
        circle.graphics.drawCircle(0,0,30);

    }

}

}

次に、ターゲット ファイル Red、Blue、および GreenTarget.as はすべて同じです。

package com.multiClicker{   
import flash.events.MouseEvent;

public class RedTarget extends Target
{

    private var hp:Number = 3;

    public function RedTarget()
    {
        //draw the red circle
        this.graphics.beginFill(0x990000);
        this.graphics.drawCircle(0,0,30);

        //include the super function
        super();
    }

    //subtracts one from targets HP when clicked
    override public function onClick(e:MouseEvent=null):void {

        super.onClick(e);

        //subtracts one from hp each click
        hp--;

        if(hp <=0) {
            this.addEventListener(onEnterFrame);
        }

    }

}

}

Target と GreenTarget でのみエラーが発生します。エラーの内容や場所はわかりません。どんな助けでも素晴らしいでしょう!

編集:取得していたエラーメッセージを投稿しました。Flash Builder で clean 関数を使用したところ、エラーが消去されました。次に、もう一度実行すると、ファイルが見つからないというエラーが表示されます。Main.swf が見つからないと表示されます。

edit2: エラーが見つかったと思います。Main.mxml ファイルの onEnterFrame 関数を削除すると、エラーはなくなりました。今、私はその機能の何が問題なのかわかりません。

4

1 に答える 1

0

MiniBuilder を使用して似たようなものを作成しました。

http://www.swfcabin.com/open/1360282440

クラスは次のとおりです。

Application.as

package com.multiClicker {
import flash.display.*;
import flash.events.*;

public class Application extends Sprite {
    public function
    Application() {
        addEventListener( Event.ENTER_FRAME, onEnterFrame );
    }

    private function
    onEnterFrame( e:Event ):void {
        var circle:Target;
        var n:Number = Math.random();

        // 33% of 2% chance each of being added per frame
        if ( n <= 0.00667 )     circle = new RedTarget();
        else if( n <= 0.01334 ) circle = new GreenTarget();
        else if( n <= 0.02 )    circle = new BlueTarget();

        if ( circle ) {
            circle.x = Math.random() * stage.stageWidth;
            circle.y = Math.random() * stage.stageHeight;
            addChild( circle );
        }

        // Remove dead
        for ( var i:int = 0; i < numChildren; i++ ) {
            var child:Target = getChildAt( i ) as Target;
            if ( child ) {
                if ( child.dead ) {
                    removeChild( child );
                    i--;
                }
            }
        }
    }
}
}

Target.as

package com.multiClicker {
import flash.display.*;
import flash.events.*;

public class Target extends Sprite {
    protected var hp:Number;

    public function 
    Target() {
        addEventListener( MouseEvent.CLICK, onClick );
    }

    public function
    get dead():Boolean {
        if ( alpha <= 0 ) return true;
        return false;
    }

    protected function
    drawTarget( color:uint ):void {
        graphics.beginFill( color );
        graphics.drawCircle( 0, 0, 30 );
        graphics.endFill();
    }

    private function 
    onClick( e:MouseEvent = null ):void {
       if ( --hp <= 0 ) addEventListener( Event.ENTER_FRAME, onEnterFrame );
    }

    private function 
    onEnterFrame( e:Event ):void{
        alpha -= 0.1;
        if ( alpha <= 0 ) {
            removeEventListener( Event.ENTER_FRAME, onEnterFrame );
            removeEventListener( MouseEvent.CLICK, onClick );
        }
    }
}
}

RedTarget.as

package com.multiClicker {
public class RedTarget extends Target {
    public function
    RedTarget() {
        super();
        hp = 3;
        drawTarget( 0xff0000 );
    }
}
}

GreenTarget.as

package com.multiClicker {
public class GreenTarget extends Target {
    public function
    GreenTarget() {
        super();
        hp = 2;
        drawTarget( 0x00ff00 );
    }
}
}

BlueTarget.as

package com.multiClicker {
public class BlueTarget extends Target {
    public function
    BlueTarget() {
        super();
        hp = 1;
        drawTarget( 0x0000ff );
    }
}
}

それが役立つことを願っています。

于 2013-02-08T02:21:22.473 に答える