un peu comme SpritePixelCollision....svp

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
chikun
Messages : 185
Inscription : sam. 21/juin/2008 13:36

un peu comme SpritePixelCollision....svp

Message par chikun »

bonjour, je dois allé bosser , alors je vous passe le relais :lol:
existe t'il une instruction (pour un sprite 2D) qui indique qu'il y a collision avec un objet sur l'ecran. juste le fait kil y a collision. valeur=1 si collision, sans comparer tout ce qui s'y trouve...

ps:
soyez indulgent , voir patient avec Jbernard13, g toujours voulu faire de la guitare depuis + 20, je ne fais que de pincer les cordes :wink:
Avatar de l’utilisateur
TazNormand
Messages : 1297
Inscription : ven. 27/oct./2006 12:19
Localisation : Calvados (14)

Message par TazNormand »

tu veux quoi exactement ?
Tester si un sprite est en collision avec une image ?
Peut-être que tester les coordonnées sprite/"objet" serait une bonne piste.
Sinon, tu n'as qu'à mettre ton objet en sprite, et tester une collision simple des 2 sprites.

En espérant t'avoir aidé...

Concernant la patience avec JB13, j'ai pas saisi l'allusion, tu peux développer ?
Image
Image
Atomo
Messages : 207
Inscription : lun. 17/sept./2007 12:27

Message par Atomo »

SpriteCollision() ?
chikun
Messages : 185
Inscription : sam. 21/juin/2008 13:36

Message par chikun »

TazNormand:

Ok, je vais essayer d'être plus clair

Imaginons un rond(sprite) qui se promène en 2D sur un écran (fenêtre) parsemé de croix (sprite).

Pour "voir" si le rond touche une croix, en général (du moins je crois), on utilise spritepixelcollision qui comparait notre rond à la croix1 puis la croix2, la croix3 etc....

il n'y a t'il pas une instruction qui prévient simplement que le rond à "touché" une croix....une instruction qui renvoi la valeur=1 par exemple quand 2 sprites sont en collision

:roll:

hmm, je réédite ce post car il est possible que ma question soit idiote en ce sens que le seul moyen de savoir si un sprite rencontre un autre, il n'y que la comparaison de position en emplacement mémoire, mais des fois que.....je peux egalement metre les croix dans un tableau reduit (uniquement constitué de points virtuels) (échelle) et diminuer le temps de comparaison comme me là indiquer Djes....

je sais que c chiant de lire: en gros, si vous devez comparez un rond avec 40 croix sur un ecran , coment feriez vous?
Dernière modification par chikun le ven. 19/juin/2009 13:24, modifié 1 fois.
Avatar de l’utilisateur
TazNormand
Messages : 1297
Inscription : ven. 27/oct./2006 12:19
Localisation : Calvados (14)

Message par TazNormand »

ben si, spritepixelcollision() ou spritecollision() comme souligné par Atomo.

La doc dit :
SpritePixelCollision()

Syntaxe

Resultat = SpritePixelCollision(#Sprite1, x1, y1, #Sprite2, x2, y2)
Description

Teste si les deux Sprites se chevauchent. Si ce n'est pas le cas, Resultat = 0. La hauteur et la largeur des sprites sont déjà connues de Purebasic, seules les coordonnées x et y de chaque sprite sont nécessaires.

Cette fonction effectue une comparaison pixel par pixel sur les pixels transparents des deux sprites ce qui rend la routine très précise mais également relativement lente. Pour optimiser au maximum la comparaison, il convient d'enlever le plus possible la zone transparente autour du sprite, pour ne garder que sa dimension réelle.
Note : SpriteCollision() est testé en interne avant de lancer la comparaison.

Utilisez SpriteCollision() pour un test de collision moins précis mais plus rapide.

Note : SpritePixelCollision() ne prend pas en compte le canal alpha des sprites , il est ignoré.
et
SpriteCollision()

Syntaxe

Resultat = SpriteCollision(#Sprite1, x1, y1, #Sprite2, x2, y2)
Description

Teste si les deux Sprites se chevauchent. Si ce n'est pas le cas, Resultat = 0. La hauteur et la largeur des sprites sont déjà connues de Purebasic, seules les coordonnées x et y de chaque sprite sont nécessaires.

Cette fonction teste une zone rectangulaire, ce qui la rend rapide mais peu précise, mais cependant très utile dans des jeux d'arcade.

Utilisez SpritePixelCollision() pour un test de collision précis.
Après si tu veux tester qu'un sprite touche TOUS LES AUTRES de l'écran, il te suffit d'utiliser les listes chainées. une liste chainée pour tes fourmis (je suppose que c'est pour ton simulateur de fourmi), une autre pour d'autres sprites, j'ai un code de BIGScrolling qui teste la collision entre mes smileys qui bougent aprtout, et les caractères du scrolling , visible ici
Image
Image
chikun
Messages : 185
Inscription : sam. 21/juin/2008 13:36

Message par chikun »

TazNormand:

nos notes se sont croisées,

ok pour spritecollision, mais tu es daccord que je dois faire une boucle pour comparer mon rond à chacunes de mes croix !!

ps: c pas pour les fourmis non
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

Tu peux dessiner toutes tes croix dans un seul gros sprite et utiliser spritepixelcollision.
chikun
Messages : 185
Inscription : sam. 21/juin/2008 13:36

Message par chikun »

djes

:D ta soluce me tue, tu as compris mon blem et tu viens de m'éclairer grave de chez grave, ton idée ouvre pour d'autre code bien des perspective

En te remerciant Monsieur :wink:
Répondre