2012-04-04 2 views
0

Ich versuche herauszufinden, was die .parent-Eigenschaft in dieser Methode und die "get [ClassNameHere]" -Methoden im Allgemeinen erreichen, die diese Eigenschaft aufgerufen haben.Was ist der Zweck .parent in diesem Mtd?

-(HudLayer*) getHud 
{ 
return (HudLayer*)[self.parent.parent.parent getChildByTag:kTagHudLayer]; 
} 
+0

Ich würde sagen, der Hauptzweck ist es, schlechte Programmierpraxis zu vermitteln. "Das Elternteil meiner Eltern" macht eine kühne Annahme über das Layout der Knoten. Sobald Sie die Hierarchie der Knoten ändern, kann die Annahme falsch sein und diese Indirektion wird fehlschlagen. Das bedeutet, dass die getHUD-Funktion automatisch null zurückgibt und Sie herausfinden müssen, warum. – LearnCocos2D

+0

Können Sie erklären, was genau er sagt? Was bedeutet es, wenn er sagt return (HUDLayer *) ruft er den HUDLayer an, um den Elternknoten zurückzugeben? Diese ganze Syntax ist einfach wirklich komisch. – GPP

Antwort

2

Es ist nicht möglich, die Details von genau dieser hier gezeigten Methode zu kennen. Aber das .parent gibt den Cocos-Elternteil, das Sprite oder den Layer zurück, zu dem das aktuelle cocos-Objekt als Kind gehört. Im Wesentlichen schlägt dieser Code vor, dass Sie ein Sprite oder eine Ebene mit einem Kind haben, das mehr Kinder und mehr Kinder dieser Kinder hat. Dies ist eine Möglichkeit herauszufinden, wer der große Elternteil des Streams ist, und dann ein neues Kind von diesem Elternteil zu bekommen .

Persönlich scheint es ziemlich schlampig zu mir. Ich würde das nie selbst programmieren. Schwer zu lesen (wie Sie sehen können) und so viele Elterneigenschaften zu haben, die so zusammengereiht sind, öffnet viel Platz für Bugs. Es wäre klüger, wenn die obersten Elternteile tun würden, was sie tun müssen, und nicht ein entferntes Enkelkind, das die Kette hinaufgeht; Es bricht das MVC-Modell ein bisschen, um es wie hier gezeigt zu machen.

+1

+1 für den Kommentar "Persönlich ...". Eine Autobahn, die Verhalten und Bugs untrennbar verdeckt. – YvesLeBorg

+0

Unterzeichnet und vereinbart. # – LearnCocos2D

1

Wahrscheinlich Klasse HudLayer hat eine parent Eigenschaft, die auf ein anderes Objekt der gleichen Art weist somit auf eine andere HudLayer eine parent Eigenschaft zeigen, die und so weiter, für drei Ebenen klettern. Dann sendet es nur eine getChildByTag Nachricht an es.