2011-11-10 2 views
0

Je suis en train d'écrire un jeu, et je dois créer des "Obstacles", j'ai créé une méthode qui génère aléatoirement les obstacles, et retourne leur. Dans un premier temps, dans la méthode, je l'ai fait quelque chose comme ça,iPhone Objective C: Méthode pour générer un nouvel objet et le retourner, semble générer l'ancien objet

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

mais après un certain débogage, j'ai découvert qu'il revenait le même objet, avec la même adresse à chaque fois qu'il a été appelé, donc je n'ai pas un nouvel objet unique.

Alors j'ai changé le code:

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

mais le problème semble encore, et est ici là, la meilleure partie, lorsque je tente de débogage, si je mets un point d'arrêt dans la boucle qui cette méthode est appelée (pour qu'elle se mette un peu en pause avant d'appeler la méthode générateur), puis je reçois de nouveaux obstacles uniques, mais si je laisse la boucle s'exécuter et les générer tous, j'inspecte le tableau et découvre qu'ils sont tous les mêmes objets.

Une idée de ce qui se passe ici? Dites-moi si je dois fournir plus de code.

+2

Affiche le code dans lequel vous les avez placés dans le tableau. –

+0

il serait utile si vous pouvez nous montrer votre code de boucle qui les génère tous –

+0

Espérons que votre classe Obstacle n'est pas une classe singleton. Si vous avez écrit cette classe, confirmez-la, et si sa bibliothèque open source, passez par le code une fois s'il vous plaît. – Futur

Répondre

1

Peut-être que vous devez écrire:

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

avec un *

+2

Si c'était une erreur réelle dans le code, plutôt que juste une faute de frappe dans la question, que se passerait-il? – walkytalky

+0

oui c'était juste une faute de frappe dans la question, j'ai eu l'astérisque dans le programme ..... je découvre que ce n'est en fait pas le problème que je pensais que c'est, les objets reviennent avec différentes adresses en mémoire, ils ont juste le même ensemble de cadres, même si les x et y devraient être aléatoires ... Je vais devoir découvrir pourquoi cela se produit ... et je vais mettre à jour dans un peu – scottd70192

+0

Donc, j'ai découvert pourquoi c'était événement. La fonction time renvoyait un entier trop grand pour la fonction de graine aléatoire, donc quand il n'y avait qu'un minuscule changement dans le temps, cela ne changeait pas réellement la graine. En bref, la fonction de temps a surchargé la graine. Donc, pour résoudre ceci, tout ce que j'avais à faire était de moduler la valeur par quelque chose comme ceci: – scottd70192

0

Depuis quand vous vous déboguez voyez un nouvel objet le problème doit être plus tard, quand il est utilisé, l'objet utilisé est l'ancien un.

Questions connexes