AS3:MovieClip产生x和y被覆盖并被RandomLoop(Adobe CC AS3)取代

时间:2014-01-10 14:10:33

标签: arrays actionscript-3 flash associative-array

我在使用OOP的AS3中的代码有问题。我创建了一个循环,它执行以下操作:

  • 它加载2个数组,位置数组(posArray)和环数组(ringArray)。
  • 它检查并循环函数getRandomPosition和getRandomRing
  • 它返回函数中的值,并为我们提供数组值。
  • 这些位置值包括Id,X和Y. Ring数组值从库中获取MovieClip。
  • 我创建了两个名为randRing和randPosition的变量来确定将哪个环置于哪里。
  • 因此我调用函数randRing给我一个随机生成的三个选项的MovieClip并将其添加到舞台上(在GameLevel1.as中)

现在,当我调用此函数将addChild添加到游戏场时。它只为三个单独的环Movieclips添加了3个环。这并不意味着发生。它需要随机选择8个位置中的一个,并选择3个环中的一个在所述位置上产生。相反,它不断改变环的位置值。

(此程序还会检查是否已经在该位置产生了戒指并尝试找到另一个位置(如果是这种情况。但是,这不是我们的问题来自哪里)。

现在我的问题是:为什么它会覆盖给予动画片段的值而不是创建新的动画片段?将代码从addChild(randRing)更改为addChild(new randRing)会导致它崩溃而不在构造函数内部被调用(由于while循环)。

我们对GameLevel1.as的调用是这样的:

    //Add rings to stage.
    var ring:ClassRingLoop2 = new ClassRingLoop2();
    trace("Ring in GameLevel: ", ring);
    backgroundLayer.addChild(ring);

后面是ClassRingLoop2(版本1无法正常工作)。

    package 
    {
    import flash.text.*;
    import flash.display.*;
    import flash.events.*;

    public class ClassRingLoop2 extends MovieClip
    {
    //8 different positions       (id, x, y,)
    public var posA:Array = new Array(1, 69, 506);
    public var posB:Array = new Array(2, 100, 545);
    public var posC:Array = new Array(3, 137, 400);
    public var posD:Array = new Array(4, 158, 500);
    public var posE:Array = new Array(5, 215, 405);
    public var posF:Array = new Array(6, 215, 480);
    public var posG:Array = new Array(7, 304, 437);
    public var posH:Array = new Array(8, 290, 500);

    //Ring from library
    public var ring1:ringClip1 = new ringClip1();
    public var ring2:ringClip2 = new ringClip2();
    public var ring3:ringClip3 = new ringClip3();

    //Add 8 positions to the array.
    public var posArray:Array = new Array(posA, posB, posC, posD, posE, posF, posG, posH);
    public var posOccArray:Array = new Array();

    //Add rings to Ringarray
    public var ringArray:Array = new Array(ring1, ring2, ring3);

    //Contructor
    public function ClassRingLoop2()
    {
        //Loop 8x
        var c:Number = 0;
        while(c<8)
        {
            trace("--------------------------------------");
            var randRing = getRandomRing();
            //trace ("In constructor: ", randRing);

            var randPosition = getRandomPosition();
            //trace(randPosition[0], randPosition[1], randPosition[2]);
            trace("Positie: ", randPosition[0]);

            //determining position of randRing
            randRing.x = randPosition[1];
            randRing.y = randPosition[2];

            //spawning of the ring
            trace("Ring: ", addChild(randRing));
            addChild(randRing);

            c++;
            trace("Count: ", c);
            trace("--------------------------------------");
            trace("  ");
        }

    }

    //Taking random value from posArray
    public function getRandomPosition()
    {
        //Random position of position array
        var pos:int = Math.floor(Math.random() * posArray.length);
        //Naming the Random position 'randPos'
        var randPos = posArray[pos];            
        //trace("Random position: ", randPos[0]);

        if(posOccArray.indexOf(randPos[0]) == -1) // if randPos[0] (positie ID) niet in posOccArray staat
        {
            //Push position ID in posOccArray
            posOccArray.push(randPos[0]);
            //trace("Occupied array: ", posOccArray);

            //Return random position
            return randPos;
        }
        else //if position ID is in OccArray
        {
            //trace("No, thanks. ", randPos[0], "position already occupied");

            //Repeat function until valid value is given.
            return getRandomPosition();
        }           
    }
    public function getRandomRing()
    {
        var ring:int = Math.floor(Math.random() * ringArray.length);
        var randomRing = ringArray[ring];

        //trace("In functie: ", randomRing);
        return randomRing;
    }
        }
    }

我希望有人能够帮助我们。

亲切的问候,

Heerco / Veradux

1 个答案:

答案 0 :(得分:0)

我做对了吗?

  

它需要随机选择8个位置中的一个并选择3个中的一个   在这个地方产生的戒指。

这是不是意味着,你只需要在一个随机位置上随机一个环?所以在视觉上,舞台上只会有一枚戒指?

如果答案是肯定的,为什么需要循环8次? 你可以简单地删除while循环,然后你就会得到你想要的东西。

如果我误解了任何事情,请告诉我。

**或...如果你的意思是你想把戒指放在所有8个位置。 **

然后你需要8次调用“new ringClip#()”。

public function getRandomRing()
{
    var ring:int = Math.floor(Math.random() * ringArray.length);
    var randomRing;

    switch (ring) {
        case 0 : randomRing = new ringClip1(); break;
        case 1 : randomRing = new ringClip2(); break;
        case 2 : randomRing = new ringClip3(); break;
    }

    return randomRing;
}