MSX Village forum

La Place des Développeurs détection collision sprites

absolu Membre non connecté

Villageois

Rang

Avatar

Inscrit le : 04/10/2009 à 21h35

Messages: 213

Le 25/10/2011 à 22h32
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.


E-mail    
MSXlegend Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 18/06/2010 à 22h42

Messages: 6284

Le 25/10/2011 à 23h19
tout simplement "on sprite gosub 1000: sprite on" par exemple
pour desactiver la collision, "sprite off"
Voila si ma mémoire est bonne


KCX Bluetooth emitter Mono/ Stéréo, Smart USB
MSXosaure Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 03/10/2009 à 00h09

Messages: 781

Le 26/10/2011 à 00h12
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



Le MSXien le plus à l'ouest :fou ... ou presque :D
osaurer
   
Jipe Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/10/2009 à 19h41

Messages: 10731

Le 26/10/2011 à 13h19
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


:noel
Site web    
absolu Membre non connecté

Villageois

Rang

Avatar

Inscrit le : 04/10/2009 à 21h35

Messages: 213

Le 26/10/2011 à 14h15
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.

E-mail    
MSXlegend Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 18/06/2010 à 22h42

Messages: 6284

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


KCX Bluetooth emitter Mono/ Stéréo, Smart USB
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie