簡體   English   中英

如何在一個數組中測試相同的對象?

[英]How to hitTest same Objects in one Array?

我想創建一個堆疊游戲。 例如,當您點擊屏幕時,一個塊掉下來,一個新塊出現在另一個原來所在的位置。 現在,當用戶再次點擊屏幕時,同一塊會掉落,如果對齊正確,則會堆疊在第一個的頂部,如此等等。 繼續堆疊直到你錯過。

我認為創建一個數組並將每個新對象推送到該數組將能夠在每個新對象之間進行 hitTest 並讓它們相互堆疊。 我意識到我不太明白如何去做這件事。 創建了新實例,所以我記下了。 到目前為止,這是我的代碼:

private function engineLogic(e:Event):void 
    {
        stackingHandler();
    }
    
    private function stackingHandler():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 
        TweenLite.to(cats, 1.0, {y:(stage.stageHeight / 2) + 290, onComplete: addCats}); 
    }
    
    private function addCats():void 
    {
        //Create Instance
        cats = new mcCats();
        //Add Objects
        addChild(cats);
        //Push to Array
        aCatArray.push(cats);
        
    }

我很感激你們的任何幫助。 也許如果你能把我推向正確的方向。 先感謝您!

看起來cats變量保存了當前正在下落的對象?
在這種情況下,你會做這樣的事情:

private function stackingHandler():void 
{
    for (var i:int = 0; i < aCatArray.length; i++)
    {
        if(cats.hitTestObject(aCatArray[i])) {
            // collision detected!
            // kill the Tween
            // set the y position of the `cats` object 
            // so it appears on top of the object it collided with (`aCatArray[i]`)
            // (it may have moved slightly past the object before doing this check)
        }            
    }
}

所以你通過數組循環和點擊測試cats對在一個數組時每隔一個對象。

使用基本的重力模擬或僅線性增加y值而不是使用 Tween 可能更有意義,但您沒有問到這一點。

您可能還想為對象當前是否正在下落設置一個標志,並使用它來確定是否運行stackingHandler 否則,當沒有任何物體移動時,您只會不斷地測試所有對象。

這就是我能夠修復它的方式。 創建一個雙循環。 檢查它們是否彼此相等繼續並檢查hitTest:

private function stackingHandler():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 Objects
            if (newCat.hitTestObject(currentCat.mcHit) && newCat.bFlag == false)
            {
                //Stop Moving
                newCat.stopMoving();
                trace("HIT");
                
                if (highScore == 0)
                {
                    addCats();
                    trace("ADD CATS 1");
                }else
                {
                    TweenLite.delayedCall(0.6, addCats);
                    trace("ADD CATS 2");
                }
                
                //Add Points
                highScore ++;
                trace(highScore + " Score");
                //Set Flag boolean
                newCat.bFlag = true
            }
        
        }
        
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM