2012-04-04 2 views
0

私はこのメソッドで.parentプロパティが達成する目的と、このプロパティが呼び出される一般的なget [ClassNameHere]メソッドを理解しようとしています。このMtdの目的は何ですか?

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

私は主な目的は悪いプログラミングの練習を伝えることだと思います。 「私の親の親の親」は、ノードのレイアウトについて大胆な仮定をしています。ノードの階層を変更するとすぐに、仮定が間違っている可能性があり、この間接指定は失敗します。つまり、getHUD関数は黙ってnilを返し、理由を把握することができます。 – LearnCocos2D

+0

あなたは彼が何を言っているのかを説明できますか?彼が言うときに意味することは return(HUDLayer *) 親ノードを返すようにHUDLayerを呼びますか?その全体の構文は本当に奇妙です。 – GPP

答えて

2

ここに示す方法では詳細を知ることはできません。しかし、.parentは現在のココスオブジェクトが子として属しているココスの親、スプライトまたはレイヤーを返します。本質的には、このコードは、より多くの子とそれらの子の子を持つ子を持つスプライトまたはレイヤーを持っていることを示唆しています。これは、ストリームの上にある大きな親が誰であるかを調べ、その親から新しい子を取得する方法です。

個人的には私にはかなり見苦しいようです。私は決してそれ自身をコード化したくない。 (あなたが見ることができるように)読みにくく、たくさんの親のプロパティが一緒に張られているので、バグのための余地がかなり広がっています。最上位の親がチェーンを上っている遠い孫よりもむしろ必要なことをしたら、それは賢明だろう。ここに示すように、MVCモデルを少し壊してしまいます。

+1

「個人的に...」のコメントは+1です。密かに行動やバグを隠すハイウェイ。 – YvesLeBorg

+0

署名し合意しました。# – LearnCocos2D

1

おそらくクラスHudLayerは、このように三つのレベルのために登って、これに別のHudLayerにparentプロパティポインティングを有し、かつ、同じ種類の別のオブジェクトを指すparent性質を有しています。それから、ただそれにgetChildByTagメッセージを送ります。

関連する問題