La Place des Développeurs détection collision sprites
Hello Les Msxiens,
Après une longue absence, je me remets tranquillement au code MSX, mais je n'arrive plus à me souvenir des principes de détections de collisions de sprites. Je sais, j'ai regardé sur d'ancien programmes, mais je nage quand même -_-
Est ce que quelqu'un pourrait me ré expliquer ces principes ?
Genre j'ai un sprite player (en forme de rectangle) qui fait, par exemple 50x10 pixels. Il est sur des coordonnées centrales et se déplace par des évènements clavier (flèches de direction <- -> et celle pour monter qui est le saut du rectangle). Sa direction principale est d'aller vers l'avant de gauche à droite.
Il y a un sprite ennemi (en forme de carré) qui fait 20x20 pixels. Sa position en abscisse est la même que celle du player et sont déplacement est de droite vers la gauche.
L'idée est que le player puisse éviter l'ennemi par un saut. Ce qui implique que le sprite ennemi continue sont parcours vers la gauche, etc... ==> donc pas de collision.
Si les 2 sprites se rencontrent frontalement, il doit y avoir collision.
Est ce que quelqu'un pourrait me redonner les bases pour les détections et collisions ? Je me mélange trop les pinceaux avec le if, les and et or dans le genre.
Un exemple simple de code, etc...
Par avance merci
Absolu.
Après une longue absence, je me remets tranquillement au code MSX, mais je n'arrive plus à me souvenir des principes de détections de collisions de sprites. Je sais, j'ai regardé sur d'ancien programmes, mais je nage quand même -_-
Est ce que quelqu'un pourrait me ré expliquer ces principes ?
Genre j'ai un sprite player (en forme de rectangle) qui fait, par exemple 50x10 pixels. Il est sur des coordonnées centrales et se déplace par des évènements clavier (flèches de direction <- -> et celle pour monter qui est le saut du rectangle). Sa direction principale est d'aller vers l'avant de gauche à droite.
Il y a un sprite ennemi (en forme de carré) qui fait 20x20 pixels. Sa position en abscisse est la même que celle du player et sont déplacement est de droite vers la gauche.
L'idée est que le player puisse éviter l'ennemi par un saut. Ce qui implique que le sprite ennemi continue sont parcours vers la gauche, etc... ==> donc pas de collision.
Si les 2 sprites se rencontrent frontalement, il doit y avoir collision.
Est ce que quelqu'un pourrait me redonner les bases pour les détections et collisions ? Je me mélange trop les pinceaux avec le if, les and et or dans le genre.
Un exemple simple de code, etc...
Par avance merci

Absolu.

tout simplement "on sprite gosub 1000: sprite on" par exemple
pour desactiver la collision, "sprite off"
Voila si ma mémoire est bonne
pour desactiver la collision, "sprite off"
Voila si ma mémoire est bonne
Tous mes PCB -> github.com/msxlegend
challenge 2013 -> neodream MSX 2013
Concepteur du -> KCX Bluetooth transmitter
hello absolu,
Vu la taille de sprites que tu donnes on dirait plutôt des "COPY" non?
Sinon, comme l'a dit Legend, dans ton programme:
100 ON SPRITE GOSUB 10000
...
dans ta boucle
1000 SPRITE ON
...
Dans ton sous programme:
10000 SPRITE OFF
puis tests...et RETURN
Vu la taille de sprites que tu donnes on dirait plutôt des "COPY" non?
Sinon, comme l'a dit Legend, dans ton programme:
100 ON SPRITE GOSUB 10000
...
dans ta boucle
1000 SPRITE ON
...
Dans ton sous programme:
10000 SPRITE OFF
puis tests...et RETURN
Le MSXien le plus à l'ouest



si ton sprite est bien un copy il faut comparer les coordonées des 2 copy
du genre IF X=XX AND Y=YY THEN GOTO xxxx
mais il faut tenir compte de la taille donc faire des comparaisons du genre
iF (X > XX-5 AND X< XX+5) AND (Y>YY-5 AND Y<YY+5) THEN GOTO xxxx
en jouant sur les valeurs 5 tu peux regler le moment des collisions
du genre IF X=XX AND Y=YY THEN GOTO xxxx
mais il faut tenir compte de la taille donc faire des comparaisons du genre
iF (X > XX-5 AND X< XX+5) AND (Y>YY-5 AND Y<YY+5) THEN GOTO xxxx
en jouant sur les valeurs 5 tu peux regler le moment des collisions
Ok, merki !
Je vais essayer les principes que vous m'avez donné
Je pense que ça devrait fonctionner.
L'idée étant de mettre en collision les centres de chaque sprite, si je me souviens bien (enfin pour une base de départ ) ??
Je vais tester.
Je vais essayer les principes que vous m'avez donné

Je pense que ça devrait fonctionner.
L'idée étant de mettre en collision les centres de chaque sprite, si je me souviens bien (enfin pour une base de départ ) ??
Je vais tester.

Absolu, tu utilises la fonction "copy" c'est bien ça?? donc ce ne sont pas du 100% sprites
Edité par
MSXlegend
Le 27/10/2011 à 13h27

Tous mes PCB -> github.com/msxlegend
challenge 2013 -> neodream MSX 2013
Concepteur du -> KCX Bluetooth transmitter
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie