[Aide] SPHIT/SPCOL
+2
fenixelf
Adriendu92
6 participants
Page 1 sur 2
Page 1 sur 2 • 1, 2
[Aide] SPHIT/SPCOL
Salut j'aimerais un peu d'aide sur SPHIT/SPCOL c'est encore pour SPACE EMERALD.
1-Y a t-il une différence entre SPHIT et SPCOL ?
Perso j'utilise SPHIT([Nombre])
2-Peut on détecter quand un sprite précis touches un autre sprite ?
Exemple :
Je voudrais savoir quand le sprite 1 touche le sprite 3.
Voila c'est tout ce que je voudrais savoir .
1-Y a t-il une différence entre SPHIT et SPCOL ?
Perso j'utilise SPHIT([Nombre])
2-Peut on détecter quand un sprite précis touches un autre sprite ?
Exemple :
- Code:
SPHIT(1)
Je voudrais savoir quand le sprite 1 touche le sprite 3.
Voila c'est tout ce que je voudrais savoir .
Re: [Aide] SPHIT/SPCOL
Je n'utilise pas SPCOL, néanmoins, je sais que si tu fais SPHIT (1,3)
SPHIT=1 lorsque le sprite 1 cogne le sprite 3 ou 4 ou 5... Jusqu’à 99.
Pour être parfaitement précis tu peux faire un truc comme ça :
si le sprite 1 cogne le sprite 2 , rien ne se passe évidement,
et si le sprite 1 cogne le sprite 3 ou un autre, il và vers @NUL et revient immédiatement sans activer autre chose.
SPHIT=1 lorsque le sprite 1 cogne le sprite 3 ou 4 ou 5... Jusqu’à 99.
Pour être parfaitement précis tu peux faire un truc comme ça :
- Code:
IF SPHIT(1,4)==1 THEN GOSUB @NUL
IF SPHIT(1,3)==1 THEN (actionquetuchoisis)
@NUL
RETURN
si le sprite 1 cogne le sprite 2 , rien ne se passe évidement,
et si le sprite 1 cogne le sprite 3 ou un autre, il và vers @NUL et revient immédiatement sans activer autre chose.
Re: [Aide] SPHIT/SPCOL
Tu as tout simplement la fonction SPHITSP (ID_Sprite1,ID_Sprite2)
Retourne 1 si les deux se touchent sinon retourne 0.
SPCOL crée une boîte de collision qui peut être plus grosse que le Sprite.
SPHIT c'est quand deux sprites entrent en collision.
Sans boîte de collision, ce sera quand deux sprites se chevauchent. (c'est comme ça que je le comprends)
Retourne 1 si les deux se touchent sinon retourne 0.
SPCOL crée une boîte de collision qui peut être plus grosse que le Sprite.
SPHIT c'est quand deux sprites entrent en collision.
Sans boîte de collision, ce sera quand deux sprites se chevauchent. (c'est comme ça que je le comprends)
Re: [Aide] SPHIT/SPCOL
Si SPHITSP existe, alors à quoi sert le SPHIT tout court?
Ah, à selectionner le plus grand nombre D'IDs possible?
Ah, à selectionner le plus grand nombre D'IDs possible?
Re: [Aide] SPHIT/SPCOL
Exactement. Imagine un grand vaisseau qui te tire 10 missiles à la fois. Tous ces missiles n'auront pas la même ID donc faire SPHITSP pour chaque serait fatiguant (dans une boucle, ce serait faire des calculs inutiles) alors qu'ils ont tous le même effet celui de provoquer des dégâts, donc il est préférable d'utiliser SPHIT.
Re: [Aide] SPHIT/SPCOL
Merci beaucoup je comprend vraiment mieux (ça serait bien de transférer les choses dites ici vers les tutos )
Re: [Aide] SPHIT/SPCOL
On devrait faire un grand tuto sur tout ce qui concerne les sprites et les background .
Re: [Aide] SPHIT/SPCOL
Bonjour, je suis nouveau sur ce site et je voudrai savoir pourquoi quand j'utilise SPHIT, la collision est détectée avant que les sprites se touchent et au moment où ils se touchent la collision n'est plus detectée. J'ai d'abord pensé qu'il avait déjà calculé les déplacements avant que l'image ne s'affiche mais après avoir testé avec les commandes VSYNC et WAIT après SPOFS ça ne marche toujours pas ! Aidez-moi s'il vous plait, j'ai cherché partout !
Raven94- Messages : 19
Date d'inscription : 02/07/2014
Age : 23
Re: [Aide] SPHIT/SPCOL
Je suis pas un expert en sprites, mais peut-être c'est parce que tes sprites ne sont pas totalement transparents, donc il y a des pixels de la même couleur que le fond qui sont sur le sprite.
je vais faire des images pour illustrer, j'arrive !
je vais faire des images pour illustrer, j'arrive !
Re: [Aide] SPHIT/SPCOL
à gauche, un sprite de ballon en rouge, avec en noir des pixels de la même couleur que le fond, donc le sprite ne fait pas la taille du ballon, mais des contours de la même couleur que le fond.
d'où l'illustration en bas de l'image où la collision ne s'effectue pas au contact du ballon, mais bien des pixels autour qui ne sont pas transparent !
Voilà, c'est peut-être ça mais je suis pas un expert en sprites, alors je peux aussi dire n'importe quoi.
Re: [Aide] SPHIT/SPCOL
Merci pour votre réponse très rapide (la mienne non car je poste de ma 3ds qui a buguée) merci aussi pour le shéma mais ce n'est pas la solution car la collision est détectée environ 5cm avant la "vraie" sur l'écran et j'avais déjà vérifié cette hypothèse. Merci quand même !
Raven94- Messages : 19
Date d'inscription : 02/07/2014
Age : 23
Re: [Aide] SPHIT/SPCOL
Tu as peut-être mal utilisé la commande SPCOL. Les sprites par défaut font 16x16 pixels dont la boîte de collision doit faire la même taille aux coordonnées 0,0.
Re: [Aide] SPHIT/SPCOL
A vrai dire, je n'ai pas utilisé SPCOL mais seulement SPHIT, pourtant ça devrait marcher, non ?
Raven94- Messages : 19
Date d'inscription : 02/07/2014
Age : 23
Re: [Aide] SPHIT/SPCOL
Oui ça devrait marcher, essayes avec la commande SPHITSP qui ne fonctionne qu'avec seulement 2 sprites contrairement à SPHIT qui fonctionne avec plus.
Si ça fonctionne toujours pas, c'est ton code qui doit avoir un problème, vérifie qu'il fait bien ce que tu désires. Sinon poste-le ici, et moi ou quelqu'un d'autre vérifiront d'où vient le problème.
Si ça fonctionne toujours pas, c'est ton code qui doit avoir un problème, vérifie qu'il fait bien ce que tu désires. Sinon poste-le ici, et moi ou quelqu'un d'autre vérifiront d'où vient le problème.
- Test Code Collision SPHITSP:
- 'Initialisation de 2 sprites
SPSET 0,64,1,0,0,0:SPOFS 0,120,156:X=120:Y=156
SPSET 1,65,4,0,0,0:SPOFS 1,64,64
@M 'déplacement du sprite 0 et repositionnement du sprite 1 avec la touche B
IF BUTTON() AND 4 THEN X=X-1
IF BUTTON() AND 8 THEN X=X+1
IF BUTTON() AND 1 THEN Y=Y-1
IF BUTTON() AND 2 THEN Y=Y+1
IF BUTTON()>0 THEN VSYNC 1:SPOFS 0,X,Y:GOSUB @COL
IF BUTTON()==32 THEN SPOFS 1,128,128
GOTO @M
@COL 'vérifie si collision en affichant "CHAT! A"
IF SPHITSP(0,1)==TRUE THEN ?"CHAT! A":GOSUB @LOOP
RETURN
@LOOP 'Boucle où la touche A repositionne le sprite 1 en haut à gauche du sprite 0
IF BTRIG()==16 THEN CLS:SPOFS 1,X-16,Y-16:RETURN
GOTO @LOOP
Re: [Aide] SPHIT/SPCOL
J'ai déjà essayé SPHITSP.
Je vais recopier mon programme tout de suite !
Je vais recopier mon programme tout de suite !
Raven94- Messages : 19
Date d'inscription : 02/07/2014
Age : 23
Re: [Aide] SPHIT/SPCOL
J'ai écris :
ACLS:CLEAR
SPSET 0,40,0,0,0,1,16,16
SPHOME 0,-10,-100
SPSET 2,45,0,0,0,1,16,16
SPHOME 2,-70,-100
FOR I=1 TO 200
SPOFS 2,-K,0,0
IF SPHIT(1)==1 THEN PRINT "TEST"
WAIT 1
NEXT
A noter que la boucle FOR permet de faire déplacer le sprite progresssivement pour ne pas que le calcul soit fait avant le déplacement mais j'ai le même résultat en mettant SPOFS 2,-200,0,200 et en enlevant la boucle FOR
ACLS:CLEAR
SPSET 0,40,0,0,0,1,16,16
SPHOME 0,-10,-100
SPSET 2,45,0,0,0,1,16,16
SPHOME 2,-70,-100
FOR I=1 TO 200
SPOFS 2,-K,0,0
IF SPHIT(1)==1 THEN PRINT "TEST"
WAIT 1
NEXT
A noter que la boucle FOR permet de faire déplacer le sprite progresssivement pour ne pas que le calcul soit fait avant le déplacement mais j'ai le même résultat en mettant SPOFS 2,-200,0,200 et en enlevant la boucle FOR
Raven94- Messages : 19
Date d'inscription : 02/07/2014
Age : 23
Re: [Aide] SPHIT/SPCOL
Le soucis vient peut-être de SPHOME, j'ai un peu de mal à bien appréhender cette commande.
Après quelques tests, je pense que SPHOME change la position 0,0 qui se situe en haut à droite du sprite.
Par défaut le départ du sprite (0,0) est le coin supérieur gauche du carré jaune.
SPHOME 0,-5,-5 met le départ du sprite au coin supérieur gauche du carré bleu.
SPHOME 0,8,-10 met le départ du sprite au coin de la bouche du sprite.
C'est peut-être donc à cause de SPHOME que la collision est faussée. (mais je peux me tromper)
(je peux pas trop tester ton code car il manque certains éléments)
Après quelques tests, je pense que SPHOME change la position 0,0 qui se situe en haut à droite du sprite.
Par défaut le départ du sprite (0,0) est le coin supérieur gauche du carré jaune.
SPHOME 0,-5,-5 met le départ du sprite au coin supérieur gauche du carré bleu.
SPHOME 0,8,-10 met le départ du sprite au coin de la bouche du sprite.
C'est peut-être donc à cause de SPHOME que la collision est faussée. (mais je peux me tromper)
(je peux pas trop tester ton code car il manque certains éléments)
Re: [Aide] SPHIT/SPCOL
Ça doit être ça. Je vais essayer sans.(au fait, dans mon code j'ai mis "-K" mais je voulais mettre "-I" à SPOFS).
Raven94- Messages : 19
Date d'inscription : 02/07/2014
Age : 23
Re: [Aide] SPHIT/SPCOL
C'est ça, c'est SPHOME qui fausse tout. Mais du coup, SPHOME n'a pas vraiment d'interêt... Merci énormément car je cherchais depuis un moment sans trouver la solution.
Raven94- Messages : 19
Date d'inscription : 02/07/2014
Age : 23
Re: [Aide] SPHIT/SPCOL
Ravi d'avoir pu t'aider. En même temps ça m'a permis de tester un peu SPHOME, faudra que je change la définition dans mon fichier d'aide qui est un peu erroné.
Comme on dit, une pierre deux coups.
SPHOME sert juste à déplacer le point d'affichage du sprite. C'est très différent de l'emplacement sur l'écran.
Dans ton exemple de code les deux sprites sont en fait affichés tous les deux à l'emplacement (0,0) mais leur point d'affichage étant différent, tu les vois l'un en face de l'autre. Comme tu as laissé les boîtes de collision par défaut, elles commencent toutes les deux aux points d'affichage de leurs sprites respectifs c'est à dire qu'elles occupent la même place à (0,0) donc c'est normal qu'il y a collision entre les sprites.
Comme on dit, une pierre deux coups.
SPHOME sert juste à déplacer le point d'affichage du sprite. C'est très différent de l'emplacement sur l'écran.
Dans ton exemple de code les deux sprites sont en fait affichés tous les deux à l'emplacement (0,0) mais leur point d'affichage étant différent, tu les vois l'un en face de l'autre. Comme tu as laissé les boîtes de collision par défaut, elles commencent toutes les deux aux points d'affichage de leurs sprites respectifs c'est à dire qu'elles occupent la même place à (0,0) donc c'est normal qu'il y a collision entre les sprites.
Re: [Aide] SPHIT/SPCOL
Du coup pour déplacer un sprite il faut faire SPOFS ou SPHOME + SPCOL pour definir la boîte de collision, c'est ça ?
Raven94- Messages : 19
Date d'inscription : 02/07/2014
Age : 23
Re: [Aide] SPHIT/SPCOL
Pour déplacer un sprite c'est SPOFS et c'est tout.
SPHOME ne déplace pas du tout le sprite, il change seulement son point d'affichage.
Prend par exemple une affiche (représentant ton sprite) et une punaise (représentant le point d'affichage), SPHOME ne fera se déplacer que la punaise.
Bien entendu si tu utilises SPHOME, il faut utiliser SPCOL pour la boîte de collision.
SPHOME ne déplace pas du tout le sprite, il change seulement son point d'affichage.
Prend par exemple une affiche (représentant ton sprite) et une punaise (représentant le point d'affichage), SPHOME ne fera se déplacer que la punaise.
Bien entendu si tu utilises SPHOME, il faut utiliser SPCOL pour la boîte de collision.
Re: [Aide] SPHIT/SPCOL
Moi je n'ai JAMAIS utilisé SPHOME et je n'en ai jamais eu besoin... Finalement, on peut la remplacer facile par SPOFS.
Re: [Aide] SPHIT/SPCOL
Bon ça n'as rien a voit mais j'annonce que j'arrête Space Emerald le temps d'apprendre a faire les IA et que demain ou après demain je vais poster un programme bien pratique
Page 1 sur 2 • 1, 2
Sujets similaires
» [Aide] Création PONG
» Aide: Exporter le code ?
» [Aide] Séparer la croix des boutons
» [Aide] Ressources pour jeux
» [Aide] Semi - aléatoire avec Pi
» Aide: Exporter le code ?
» [Aide] Séparer la croix des boutons
» [Aide] Ressources pour jeux
» [Aide] Semi - aléatoire avec Pi
Page 1 sur 2
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum