0

私はゲームデザイナーになるために勉強していますが、現在、フラッシュゲームでいくつかの問題が発生しています。

ゲームにはカウンタークラスがあり、カウンターを拡張するスコアクラスがあります。PlayScreenAクラスのステージに追加されます。

タイマーは数字で始まり、24フレームごとに減少します。しかし、私のヒーロークラスでは、いくつかのコインを拾うことができ、そのコインは私のスコアの時間を増やします。

問題は、HeroクラスでCounterクラス内でaddToValue関数を実行するように言うにはどうすればよいですか?

コードの一部:PlayScreenAクラスでスコアを作成する:

    private var myTime:Score = new Score();
    private function create_time (){

        myTime.x = 800;
        myTime.y = 50;          
        addChild(myTime);
    }

カウンタークラス:

package 
{
import flash.display.MovieClip;
public class Counter extends MovieClip
{
    public var currentValue:Number;

    public function Counter()
    {
        reset();
    }

    public function addToValue( amountToAdd:Number ):void
    {
        currentValue = currentValue + amountToAdd;
        updateDisplay();
    }

    public function subToValue( amountToSub:Number ):void
    {
        currentValue = currentValue - amountToSub;
        updateDisplay();
    }

    public function reset():void
    {
        currentValue = 20;
        updateDisplay();
    }

    public function updateDisplay():void
    {

    }
}
}

スコアクラス:

package 
{
import flash.text.TextField;
import flash.events.Event;
public class Score extends Counter
{
    protected var _timeCounter:int;     

    public function Score()
    {
        super();
        addEventListener(Event.ENTER_FRAME, onUpdate);
    }
    override public function updateDisplay():void
    {
        super.updateDisplay();
        scoreDisplay.text = currentValue.toString();
    }
    protected function onUpdate(e:Event):void
    {
        _timeCounter++;
        trace(currentValue);

        if (_timeCounter == 24)
        {
            this.subToValue( 1 );
            _timeCounter = 0;
        }           
    }
}
}

関数を呼び出す必要があるヒーロークラスの一部:

for(var i:int; i<collisionList.length;i++)
        {
            var $collision:platform_tile = collisionList[i];

            if($hasCollided = hitbox.hitTestObject($collision.hitBox) && $collision.alpha<0.8 && $collision.alpha>0.6)
            {
                $collision.alpha=0;
                $collision.visible = false;
                //Here is where I want to call my subToValue                                        function!
                break;
            }
4

2 に答える 2

1

addToValueおよびsubToValueはインスタンスメソッドであるため、ヒーローオブジェクトのカウンターオブジェクトへの参照(インスタンス変数)を提供してから、そのまたはメソッドを呼び出す必要addToValuesubToValueあります。

var theCounter:Counter;

ヒーローオブジェクトでこれを開始するか、ゲッター/セッターを介して既存のカウンターオブジェクトを割り当てる必要があります。その後、あなたは呼び出すことができます:

theCounter.addToValue();
于 2012-07-24T02:21:15.937 に答える
0

PlayerScreenAクラスで最初に作成されたScoreクラスのオブジェクトにアクセスしようとしていると思います...

その場合は、2つのクラス間の関係を導出してこのオブジェクトを渡すか、静的クラスを保持して関数をグローバルレベルで追跡することができます...

public class AppRefrences
{
    public static var addToValueFunc:Function;    
}

プレーヤーAクラスでは、

    private var myTime:Score = new Score();
    private function create_time (){

        myTime.x = 800;
        myTime.y = 50;          
        addChild(myTime);

        // This is where you set the function
        Apprefrences.addToValueFunc = myTime.addToValue;
    }

ヒーロークラスでは、

for(var i:int; i<collisionList.length;i++)
        {
            var $collision:platform_tile = collisionList[i];

            if($hasCollided = hitbox.hitTestObject($collision.hitBox) && $collision.alpha<0.8 && $collision.alpha>0.6)
            {
                $collision.alpha=0;
                $collision.visible = false;

                // This is where you call the function
                if(AppRefrences.addToValueFunc != null) 
                AppRefrences.addToValueFunc(0); 

                break;
            }

getter&setterを使用して、静的変数の更新を制御してみてください。わかりやすくするために含めませんでした。

于 2012-07-24T03:16:12.497 に答える