Frage

Ich schreibe ein Spiel mit Flash CS5 / AS 3.0, das versucht, die Schärfentiefe zu simulieren, indem Sie alle relevanten Filmclips basierend auf ihrer y-Position in aufsteigender Reihenfolge zeichnen, dh Dinge, die auf der Bühne niedriger auf der Bühne auf der Bühne überlappen . Eine Movieclip mit einer Y-Position von 10 würde daher im Vergleich zu einer Movieclip mit einer Y-Position von 20 einen niedrigeren Index aufweisen, so dass der zweite oben auf den ersten gezogen wird.

Ich habe eine schnelle und schmutzige Funktion geschrieben, um dies zu testen. Während der Spur, habe ich bemerkt, dass der Index des Lkws 0 trifft, wenn ich in der Nähe der Spitze der Bühne gehe, aber wenn ich zu weit oben gehe, wird es völlig aus der Bühne verschwinden. Trace beginnt dann mit diesem Fehler zu generieren:

argumentError: fehler # 2025: Das mitgelieferte DisplayObject muss ein Kind des Anrufers sein.
bei flash.display :: displayobjectcontainer / getchildindex ()
bei EICT :: Game / ReorganizedInplayIndexes ()
Bei EICT :: Game / Loop ()

thetruck ist ein Movieclip des Spielers Feinde, Zapfen, Felsen sind alle Arrays, die Movieclips enthalten

keiner von ihnen hat Ereignishörer. generasacodicetagpre.

War es hilfreich?

Lösung

Hint: You don't need to remove the child first. When you use addChild() on an object, it is automatically re-added to the next highest depth.

That said, you'll just need to do something like this:

drawableObjects.sortOn("y");

for each(var i:DisplayObject in drawableObjects)
{
    if(i.parent)
        i.parent.addChild(i);
}

Andere Tipps

Use setChildIndex instead of removing and re-adding:

for (var a:int = collisionLayer.numChildren - 1; i >= 0; i--)
{
    collisionLayer.setChildIndex(drawableObjects[i], i);
}

Also, it's a bit wasteful to first order the sort in descending and then reversing the array. Sort it ascending to begin with!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top