Page 1 sur 1

Petit eclaircissement sur les collisions...

Publié : mar. 23/nov./2004 13:58
par Torp
Hello,

Me voila de retour avec mon jeu de carte... :oops:

existe t'il une commande qui donnerait quels sont les sprites qui entre en collision..?

Je m'explique :

J'affiche donc mes 32 cartes a l'écran. Je ballade mon pseudo pointeur de souris (sprite) et je voudrais savoir s'il existe une commande qui me retournerai avec quelle carte mon pointeur entre en collision sans avoir a faire une boucle qui testerait sans arret mon pointeur avec toutes les cartes du jeu...

En gros ce serait un truc du style:

Code : Tout sélectionner


Boucle

  Déplacement de souris

  si pointeur entre en collision avec un sprite 
  dis moi lequel que je fasse ce que j'ai a faire...

Fin de boucle

Plutot que :

Code : Tout sélectionner


Boucle

  Déplacement de souris
  Pour chaque sprite (cartes) à l'écran
  dis moi si je rentre en collision avec le pointeur
  Si oui, "AH! c'était toi!!!" alors maintenant je sais quoi faire

Fin de boucle

Bon enfin voila... c'est ma question... Surement un peu conne, mais etre n00b ca s'entretien.... :?

Merci

Publié : mar. 23/nov./2004 20:03
par comtois
non c'est à toi de gérer ça . Mais ça se fait très simplement avec une liste chainée .
Tu fais une liste chainée qui contient les cartes présentes à l'écran , ensuite ,tu as juste à faire une boucle

Code : Tout sélectionner

Structure Carte
 Couleur.l ;carreau=1 , coeur=2 , pique=3 ,trèfle=4
 Rang.l  ; du 7 à l'as , avec le roi = 13 et l'as =14 ( par exemple )
 X.l 
 Y.l
EndStructure
NewList Carte.carte()

Et à chaque fois que tu poses une carte sur l'écran tu fais

Code : Tout sélectionner

AddElement Carte()
  Carte()\Couleur = x
  Carte()\Rang=x
  Carte()\X=position en X du sprite
  Carte()\Y=position en Y du sprite
ensuite pour tester une collision

Code : Tout sélectionner

ForEach Carte()
 If SpritePixelCollision(#Curseur,Xcurseur,Ycurseur,#Carte,Carte()\X,Carte()\Y)
etc
next
Voila en gros , si ça bloque encore , n'hésite pas à laisser un peu de code , et fabrique des sprites bidons pour représenter tes cartes , ou alors mets les en téléchargement qu'on puisse tester .

Pour les cartes bidons , ça pourrait donner ça

Code : Tout sélectionner

For i=1 to 32
CreateSprite(i,64,128)
StartDrawing(SpriteOutput(i))
Drawtext(str(i))
stopdrawing
next i

Ceci dit , je te conseillerais de ne pas utiliser la commande SpriteCollision() ni la commande SpritePixelCollision() tu n'en as pas besoin dans ton cas il suffit de faire comme le soldat inconnu te l'a déjà indiqué dans un autre post en testant seulement la position de la souris , regarde dans ton autre post , ce que t'avait répondu le soldat.

Publié : mar. 23/nov./2004 20:56
par Torp
Merci pour toutes ces précieuses informations. Pour le moment j'ai tres peu tapé de code car comme je débute (ca a beaucoup évolué depuis l'atari 800XL... :lol:), je me pose une question à chaque commande que je tape... je passe mon temps entre la doc (pas très fournie pour un débutant) et le forum à mater les exemples...mais ca devient de + en + clair... :wink: