0

我正在学习成为一名游戏设计师,现在我的 Flash 游戏遇到了一些问题。

游戏有一个 Counter 类,其 Score 类扩展了 Counter。它被添加到我的 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

因为addToValueandsubToValue是实例方法,你应该在你的 hero 对象中提供一个对 counter 对象的引用(一个实例变量),然后调用它的addToValueorsubToValue方法。

var theCounter:Counter;

你应该在你的英雄对象中启动它,或者通过 getter/setter 分配一个预先存在的计数器对象。然后你可以打电话:

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

我假设您正在尝试访问最初在 PlayerScreenA 类中创建的 Score 类的对象...

如果是这种情况,那么您要么派生两个类之间的关系以传递此对象,要么您可以保持一个静态类在全局级别跟踪函数......

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 回答