我想創建一個堆疊游戲。比如說,當你點擊螢屏時,一個積木會掉下來,而另一個積木會出現在原來的位置。現在,當用戶再次點擊螢屏時,同樣的積木就會掉下來,如果排列正確,就會堆積在第一個積木的上面,如此反復。繼續堆疊,直到你錯過為止。
我想創建一個陣列。
我以為創建一個陣列并將每個新物件推送到該陣列中,就可以在每個新物件之間進行hitTest,并讓它們相互堆疊。我意識到我不太理解如何去做這件事。新的實體被創建,所以我得到了這個結論。 到目前為止,我的代碼是這樣的:
private function engineLogic(e: 事件):void。
{
stackingHandler()。
}
private function stackingHandler():void void
{
for (var i:int = 0; i < aCatArray.length; i )
{
var currentCat:mcCats = aCatArray[i];
//HIT TEST CATS 。
}
trace("NUMBER OF CATS: " aCatArray.length)。
}
private function onTap(e:MouseEvent) :void
{
//Move Down void ?
TweenLite.to(cats, 1.0, {y:(stage.stageHeight / 2) 290, onComplete: addCats}) ;
}
private function addCats():void
{
//Create Instance[/span]。
cats = new mcCats()。
//增加物件
addChild(cats)。
//Push到陣列。
aCatArray.push(cats)。
我希望得到你們的任何幫助。也許你能把我推向正確的方向。提前感謝你!
uj5u.com熱心網友回復:
看起來像cats變數持有當前正在下降的物件?
在這種情況下,你會做這樣的事情:
private function stackingHandler(/span>)。 void void
{
for (var i:int = 0; i < aCatArray.length; i )
{
if(cats.hitTestObject(aCatArray[i]) ) {
//檢測到碰撞!。
//殺死Tween。
//設定`cats`物件的y位置。
///使它出現在它所碰撞的物件(`aCatArray[i]`)的上面。
//(在做這個檢查之前,它可能已經略微移動過該物體)。
}
}
}
因此,你正在回圈瀏覽陣列,并對陣列中的每個物件逐一進行cats測驗。
使用基本的重力模擬可能更有意義,或者只是線性增加y值而不是使用Tween,但是你沒有問到這個問題。
您可能還想設定一個標志,以確定物件當前是否正在下降,并使用該標志來確定是否運行 stackingHandler。否則,你就會在沒有任何物體移動的情況下不斷地測驗所有的物體。
uj5u.com熱心網友回復:
這就是我如何解決這個問題的。創建一個雙for回圈。檢查它們是否互相相等,繼續并檢查hitTest:
private function stackingHandler()。 void void
{
for (var i:int = 0; i < aCatArray.length; i )
{
var currentCat:mcCats = aCatArray[i];
for (var j:int = 0; j < aCatArray.length; j )
{
var newCat:mcCats = aCatArray[j];
if (currentCat == newCat) continue;
//Hit Test between Objectsif (newCat.hitTestObject(currentCat.mcHit) && newCat.bFlag == false)
{
//停止移動。
newCat.stopMoving()。
trace("HIT")。
if (highScore == 0)
{
addCats()。
trace("add CATS 1")。
}else { addCats()
{
TweenLite.delayedCall(0.6, addCats) 。
trace("add CATS 2")。
}
/Add Points; }
highScore ;
trace(highScore " Score")。
//Set Flag boolean[/span]。
newCat.bFlag = true。
}
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/319521.html
標籤:
