2011-11-10 13 views
0

私はゲームを作成していますが、 "障害物"を作成しなくてはなりません。それら。まず、この方法では、私はこのような何か、iPhone Objective C:新しいオブジェクトを生成して返します。古いオブジェクトを生成するようです。

Obstacle newObstacle = [[Obstacle alloc] init]; 
[newObstacle setFrame:CGRectMake(randX, randY, 50, 50)]; 
return newObstacle; 

をしましたが、いくつかのデバッグした後、私はそれは同じアドレスが呼び出されたたびに、同じオブジェクトを返していましたがわかったので、私は取得できませんでした新しい一意のオブジェクト。私はデバッグしようとしたとき、私はループ内でブレークポイントを置けばこと、

return [[Obstacle alloc] initWithFrame:CGRectMake(randX, randY, 50, 50)]; 

が、問題はまだそこにあるように思われ、ここでは最良の部分です:

だから、私はにコードを変更しましたこのメソッドが呼び出されているので(それがジェネレータメソッドを呼び出す前に少し休止する)、新しい固有の障害が発生しますが、ループを実行してそれらを生成させると、配列を調べて、それらがすべて同じオブジェクト。

ここで何が起こっているかについての手掛かりはありますか? もっとコードを提供する必要があるかどうか教えてください。

+2

配列に配置するコードを表示します。 –

+0

すべてを生成するループコードを表示できると便利です –

+0

あなたのObstacleクラスはシングルトンクラスではないことを願っています。あなたがそのクラスを書いてそれを確認し、オープンソースのlibであれば、一度コードを読んでください。 – Futur

答えて

1

たぶん、あなたが書く必要があります:あなたはそれを使用しているときに問題が後にする必要があり、新しいオブジェクトを参照してデバッグするときに、使用するオブジェクトが古いので*

+2

これがコード内の実際のエラーであった場合、質問の入力ミスではなく、どうなりますか? – walkytalky

+0

確かに質問にはタイプミスがありました。私はプログラムにアスタリスクがありました。私はそれが実際には問題ではないことを知りました。オブジェクトはメモリ内の異なるアドレスで返されています。 xとyがランダムでなければならないにもかかわらず、彼らはちょうど同じフレームセットを持っています...なぜこれが起こっているのかを調べなければならないでしょう...そして私はビットで更新します – scottd70192

+0

だから、ハプニング。時間関数は、ランダムなシード関数には大きすぎる整数を返していたので、時間のわずかな変化しかなかった場合、実際にはシードは変更されませんでした。要するに、時間関数は種を過負荷にした。それで、これを解決するために、私がしなければならなかったのは、このような何かによって価値が下げられたということでした。 – scottd70192

0


Obstacle *newObstacle = [[Obstacle alloc] init]; 

を1。