具有不同分数值的收藏品

时间:2015-05-14 19:18:53

标签: arrays actionscript-3 hittest

我有一系列随机产卵的收藏品。当他们与玩家发生碰撞时,他们会从舞台上移开并且得分增加了scoreValue。我希望阵列中的每个收藏品都有不同的得分值,但我还没有得到它。以下是我最近的所有相关代码。

public class Main_EnemySpawnTest_3 extends MovieClip
{
    // variables
    var player:Player = new Player;
    var collectables:Array = [Collectable1, Collectable2, Collectable3];
    var collectablesRandomNumber:int = Math.random() * (collectables.length);
    var collectable = new collectables[collectablesRandomNumber];
    var score:uint = 0;

    // constructor function
    public function Main_EnemySpawnTest_3():void
    {
        // listeners
        addEventListener(Event.ENTER_FRAME, checkEveryFrame);
        spawnCollectablesButton.addEventListener(MouseEvent.CLICK, spawnCollectablesClick);
    }

    // enter frame, check every frame
    public function checkEveryFrame(event:Event):void
    {
        // score
        messageDisplay.text = String (score);
    }

    // hit test
    function hitTest (event:Event):void
    {
        // hit test with collectables
        if (collectable.hitTestObject (player) == true)
        {
            var scoreValue:uint;

            if (stage.contains (collectable))
            {
                if (collectables[0])
                {
                    scoreValue = 100;
                }
                else if (collectables[1])
                {
                    scoreValue = 300;
                }
                else if (collectables[2])
                {
                    scoreValue = 700;
                }
                removeChild (collectable);
                score = score + scoreValue;
            }
        }
    }
}

目前,只需按一下按钮即可生成收藏品。如果有帮助的话,下面的代码如下。

// collectable spawn button
function spawnCollectablesClick (event:MouseEvent):void
{
    var oldCollectable = collectable;
    if (stage.contains (oldCollectable))
    {
        removeChild (oldCollectable);
    }       
var collectablePositionRandomNumber:int = Math.random() * 3; 
    var collectablePositionX:int = stage.width - (collectable.width * -0.5);
    collectable = new collectables[Math.floor(Math.random() * collectables.length)];
    collectable.x = collectablePositionX;
    globalSpeed = 5;
    if (collectablePositionRandomNumber == 0)
    {
        collectable.y = topPosition;
    }
    else if (collectablePositionRandomNumber == 1)
    {
        collectable.y = centerPosition;
    }
    else if (collectablePositionRandomNumber == 2)
    {
        collectable.y = bottomPosition;
    }
    addChild (collectable);
    trace (collectable);
}

1 个答案:

答案 0 :(得分:0)

问题来自if (collectables[0]):只要collectables[0] / false / null / {{1},这将返回true }或0。因此,您总是会添加100,并且始终会跳过NaN s。

您可以在undefined

中创建收藏品时为其提供自己的得分值
else if

然后用它来增加分数

spawnCollectablesClick

作为旁注,如果collectable.scoreValue = ... function hitTest (event:Event):void { // hit test with collectables if (collectable.hitTestObject (player) == true) { score = score + collectable.scoreValue; removeChild (collectable); } } Collectible1都是不同的类,那么你就是在破坏课程的目的。如果3个事物具有相同的行为但事物的值不同,则它们都可以是具有不同成员变量值的同一个类的实例。