AS3:MovieClip生成的x和y被RandomLoop(Adobe CC AS3)覆盖并替换



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

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

现在,当我调用此函数将Child添加到游戏舞台上时。它只为三个单独的环形电影剪辑添加了三个环形。这是不应该发生的。它只需要随机选择8个位置中的一个,并从3个环中选择一个在所述位置产卵。相反,它会不断更改环的位置值。

(这个程序还会检查这个位置上是否已经生成了一个环,如果是这样的话,会尝试找到另一个位置。然而,这不是我们的问题的根源)。

现在我的问题是:为什么它凌驾于赋予电影的价值之上,而不是创造新的电影?将代码从addChild(randRing)更改为addChild。

我们对GameLevel1的呼吁是这样的:

//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

我做对了吗?

它只需要从8个位置中随机选择一个,然后从3个位置中选择一个在所述位置产卵的环。

这意味着,你只需要在一个随机位置上有一个随机环吗?那么从视觉上看,舞台上会只有一个戒指吗?

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

如果我误解了什么,请告诉我。

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

然后您需要调用"new ringClip#()"8次。

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;
}

最新更新