6
votes

Comment puis-je dessiner un seul sprite à des positions aléatoires 10 fois?

im totalement nouveau à cela et posez une question. J'ai travaillé avec un exercice à l'école et à la maison mais je ne peux pas comprendre comment le faire.

La chose est que je veux dessiner un seul sprite à 10 positions aléatoires à l'écran sans utiliser de classe Sprite spéciale. Mon problème est qu'après qu'ils soient dessinés, ils disparaissent à nouveau.

résolu, merci pour toute l'aide! xxx

}


7 commentaires

Voulez-vous dire que vous voulez garder les cadres précédents visibles pendant que vous dessinez plus de sprites?


Cela pourrait être mieux adapté à GameDev


Pourquoi il y a si (compteur <10) dans votre code, s'il y a pour boucle qui compte à 10 après cela?


Je veux juste 10 sprites à tirer à autre position, puis restez là-bas


@Bartosz je pensais que sans le "if (compteur <10), la boucle serait bouclé 10 fois, puis revenez à la mise à jour, puis de retourner pour dessiner et boucle 10 fois à nouveau


J'ajouterais également que vous ne devriez pas faire de type "traitement" dans votre fonction de tirage au-delà de dessiner les sprites. Ce type de code appartient à la fonction de mise à jour.


Ah, maintenant je sais, le si (compteur <10) était de ne pas répéter le dessin Sprite. Mais ils ont été effacés dans la prochaine image, ce qui n'a donc pas été résolu.


3 Réponses :


1
votes
GraphicsDevice.Clear(Color.White);
This clears the screen (meaning anything previously drawn will be erased). The Draw function in which this statement is contained is called roughly 30 to 60 times per second, and your randomizer will fetch new values on each of these iterations.It is correct to clear the screen on each Draw iteration, so rather than choosing random coordinates on each call to Draw, determine the coordinates before hand. A better approach might be to initialize an array of 10 Vectors in your constructor, then use that array in your Draw function (rather than calling randomera.Next() over and over).EDIT: (See the second half of Bartosz's answer for an example. I'm not able to open my XNA IDE at the moment, so I can't write out the code example for you.)

0 commentaires

1
votes

Vous appelez effacer dans votre méthode de dessin xxx

Ceci effacera l'écran.

Supprimer cette ligne et conservera les trucs dessinés précédents.


4 commentaires

C'est une mauvaise idée. Vous remplirez votre écran avec des sprites dans un ordre extrêmement court puisque votre fonction de tirage sera appelée 30 fois par seconde ou plus.


@ Cyborgx37 Je ne pense pas que vous lisiez son code correctement. Il tire 10 sprites, puis cessera le dessin. Cela corrige son problème


Oui, vous êtes correct ... j'ai raté cette partie. Mais la suppression de la fonction effacer de l'application est toujours une mauvaise idée. Il va à l'encontre des meilleures pratiques pour un match XNA et surmontera toute utilisation future de cette application. Je ne pense pas que ce soit une bonne idée.


@ Cyborgx37. Oui. Tout ce qu'il tire sera persistant. Il doit se restructurer comment il l'approche. Initialisation des coordonnées au démarrage est une bonne idée et Bartosz a déjà répondu avec cela, alors j'ai donné +1 à lui. :)



7
votes

Si vous souhaitez avoir vos sprites sur les mêmes positions aléatoires tout le temps et effacer toujours votre fenêtre (par exemple, vous pouvez vous rendre d'autre contenu) Vous pouvez simplement réinitialiser la graine aléatoire chaque image à la même valeur: < pré> xxx

où la graine doit être générée de manière aléatoire dans votre méthode initialiser () et ne pas être modifié après cela.

Vous pouvez également initialiser Liste avec des coords prédéfinis: xxx

et utilisez cette liste dans votre routine de dessin: xxx


4 commentaires

Cela fonctionne techniquement, mais il n'aurait pas plus de sens de générer un tableau de 10 vecteurs dans le constructeur, puis d'utiliser ceux-ci? Cela aurait l'avantage supplémentaire d'être plus facile à maintenir à long terme.


Exactement, et j'étais en train de modifier ma réponse pour refléter cela. Maintenant c'est là aussi. Je suppose que je voulais juste être un graine aléatoire Smartass;)


J'y écarais de la première approche ensemble. Je ne peux imaginer aucun scénarios où ce serait une bonne idée. La seconde est bien meilleure. À l'avenir, il serait beaucoup plus facile d'exercer davantage de contrôle de la matrice, tels que le démarrage des tortues en position aléatoire, mais puis les avoir déplacés sur l'écran, etc.


Ouais, la fixation de la graine peut être utile avec certaines approches semi-procédures et lors de la phase de fixation de la scène, pas pendant le dessin.