| [Résolu] Collision sur un jeu de plateforme | |
|
|
Auteur | Message |
---|
Caohimin Très bonne participation
Messages : 134 Localisation : Au coeur de cette charmante demoiselle.
| Sujet: [Résolu] Collision sur un jeu de plateforme Ven 18 Mai 2012 - 15:39 | |
| Bien le bonjour, J'ai un petit problème, je ne sait par où commencer a vrai dire, c'est surtout ça le problème. Imaginons que l'on ai un disque (de rayon 100 au hasard), et un petit bonhomme. Le disque possède un champ de gravité qui attire le bonhomme, le centre de gravité étant le centre du cercle évidement. Le bonhomme subit son attraction, et une fois en contacte avec la surface du disque (son périmètre plutôt), il cesse de subir cette gravité. Sur un jeu de plateforme normal, l'on met la gravité a 0, et la vitesse verticale a 0, ici on ne peux pas faire comme cela, et c'est ça mon problème... - Code:
-
if place_meeting(lengthdir_x(joueur_objet.sprite_height/2,point_direction(joueur_objet.x,joueur_objet.y,planete_objet.x,planete_objet.y)),lengthdir_y(joueur_objet.sprite_height/2,point_direction(joueur_objet.x,joueur_objet.y,planete_objet.x,planete_objet.y)),planete_objet) { contacte=1 gravity=0 speed=0 }
Je suppose que le code est faux, étant donner que ma variable de test " contacte " ne vaux jamais 1. Comment faire? Merci.
Dernière édition par Caohimin le Mar 22 Mai 2012 - 23:22, édité 1 fois |
|
| |
onilink_ Modérateur
Messages : 9183 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: [Résolu] Collision sur un jeu de plateforme Ven 18 Mai 2012 - 16:29 | |
| |
|
| |
Johny Wessmuller Utilisateur confirmé: Rang *
Messages : 233
| Sujet: Re: [Résolu] Collision sur un jeu de plateforme Ven 18 Mai 2012 - 16:41 | |
| Moi j'aurai mis le (x,y) de ton sprite en bas au centre. Soient (a,b) les coor du centre du cercle de rayon r. c=a-x; d=b-y; k=r/point_distance(0,0,c,d); Puis je ferai tourner ton sprite d'un angle égal à point_direction(0,0,c,d) Puis je ferai if point_distance(0,0,c,d)<r { x=a+c*k; y=b+d*k; gravite=0; vitesseh=0; } Bon j'ai pas trop réfléchi j'ai adapté mon code du sujet grappin, donc je me cite : - Johny Wessmuller a écrit:
- Y a ptetr des erreurs, je n'ai pas testé, mais c'est de la géométrie, tu devrais pouvoir les corriger.
Dernière édition par Johny Wessmuller le Ven 18 Mai 2012 - 16:55, édité 3 fois |
|
| |
Caohimin Très bonne participation
Messages : 134 Localisation : Au coeur de cette charmante demoiselle.
| Sujet: Re: [Résolu] Collision sur un jeu de plateforme Ven 18 Mai 2012 - 16:44 | |
| C'était logique... la trigo...
Excuse-moi, ça fais un bon moment que je ne me suis pas remis dans le "bain" avec les math, la physique, et GM surtout.
Je vais vite fait relire mes cours (en espérant pouvoir remettre la main dessus)
Merci pour "l'ouverture de la voie" |
|
| |
Johny Wessmuller Utilisateur confirmé: Rang *
Messages : 233
| Sujet: Re: [Résolu] Collision sur un jeu de plateforme Ven 18 Mai 2012 - 16:47 | |
| Bah sinon sans trigo, y a ma méthode, qui a l'avantage euh, d'être sans trigo. En effet les fonctions trigos, qu'est-ce que ça consomme. |
|
| |
Caohimin Très bonne participation
Messages : 134 Localisation : Au coeur de cette charmante demoiselle.
| Sujet: Re: [Résolu] Collision sur un jeu de plateforme Ven 18 Mai 2012 - 16:53 | |
| J'ai regarder ce que tu a fais,
Je ne comprend pas ck et dk.
C'est c*k? et d*k?
Ou je plane totalement la? |
|
| |
Johny Wessmuller Utilisateur confirmé: Rang *
Messages : 233
| Sujet: Re: [Résolu] Collision sur un jeu de plateforme Ven 18 Mai 2012 - 16:54 | |
| |
|
| |
Caohimin Très bonne participation
Messages : 134 Localisation : Au coeur de cette charmante demoiselle.
| Sujet: Re: [Résolu] Collision sur un jeu de plateforme Ven 18 Mai 2012 - 16:58 | |
| Et vitesseh, c'est la vitesse horizontale.
mais pourquoi la mettre a 0? |
|
| |
onilink_ Modérateur
Messages : 9183 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: [Résolu] Collision sur un jeu de plateforme Ven 18 Mai 2012 - 17:00 | |
| - Johny Wessmuller a écrit:
- En effet les fonctions trigos, qu'est-ce que ça consomme.
Pas tellement en fait, ça consomme si tu les utilise vraiment beaucoup, mais un point_direction est plutôt lourd aussi. |
|
| |
Caohimin Très bonne participation
Messages : 134 Localisation : Au coeur de cette charmante demoiselle.
| Sujet: Re: [Résolu] Collision sur un jeu de plateforme Ven 18 Mai 2012 - 17:03 | |
| Il y aura un calcul de trigo par disque.
Si il y a 20 disque, et que le bonhomme doit sauter de disque en disque, ça ne risque pas de consommer des masses je pense.
Puis pour passer de 0.3 milliseconde de plus... Je ne suis pas a ça près. |
|
| |
Johny Wessmuller Utilisateur confirmé: Rang *
Messages : 233
| Sujet: Re: [Résolu] Collision sur un jeu de plateforme Ven 18 Mai 2012 - 17:17 | |
| - Caohimin a écrit:
- Et vitesseh, c'est la vitesse horizontale.
mais pourquoi la mettre a 0? C'est la vitesse de ton perso en direction du centre du cercle, donc en gros ce code dit Si le perso a une partie de lui à l'intrieur du cercle, on le remet sur le cercle, et on met la gravité et la vitesse en direction du centre à 0. En fait point_distance(a,b,x,y)=point_distance(0,0,c,d) et pareil pour point_direction. Tiens pour mieux comprendre : |
|
| |
Johny Wessmuller Utilisateur confirmé: Rang *
Messages : 233
| Sujet: Re: [Résolu] Collision sur un jeu de plateforme Ven 18 Mai 2012 - 17:22 | |
| - onilink_ a écrit:
- Johny Wessmuller a écrit:
- En effet les fonctions trigos, qu'est-ce que ça consomme.
Pas tellement en fait, ça consomme si tu les utilise vraiment beaucoup, mais un point_direction est plutôt lourd aussi. Oui, c'est sûr vu que ça doit utiliser de la trigo aussi, après reste à savoir quel est le plus rapide et comment tu as fait ton code, mais te connaissant, ça doit être bien fait |
|
| |
Caohimin Très bonne participation
Messages : 134 Localisation : Au coeur de cette charmante demoiselle.
| Sujet: Re: [Résolu] Collision sur un jeu de plateforme Ven 18 Mai 2012 - 17:25 | |
| Je regarde ça en rentrant, elle me plaît bien cette forme la.
Au pire j'ai la trigo 😳
Oui c'est tellement optimiser, que j'en ai mal à la tête avec son code. Je plaisante! |
|
| |
Johny Wessmuller Utilisateur confirmé: Rang *
Messages : 233
| Sujet: Re: [Résolu] Collision sur un jeu de plateforme Ven 18 Mai 2012 - 18:06 | |
| - Johny Wessmuller a écrit:
- Bah sinon sans trigo, y a ma méthode, qui a l'avantage euh, d'être sans trigo.
En effet les fonctions trigos, qu'est-ce que ça consomme. - Johny Wessmuller a écrit:
- Oui, c'est sûr vu que ça doit utiliser de la trigo aussi
JME SUIS CONTREDIIIIIIIIIIIIT En plus j'ai fait une erreur : il faut prendre c=x-a et d=y-b à mon avis Soit O le centre du cercle et M le point (x,y) du sprite. Alors le point d'intersection I=(e,f) du cercle et de la demi-droite [OM) vérifie (e,f)=O+k* OM où OM est le vecteur avec la flèche du O vers le M pour un certain k réel strictement positif. Donc (e,f) vérifie (e,f)=(a,b)+k*(x-a,y-b), soit (e,f)=(a+k*(x-a),b+k*(y-b)). Suite des explications (je suis parti, ne m'appelez pas je ne réponds plus) De plus on sait que OI = r donc que OI^2=r^2, soit (e-a)^2+(f-b)^2=r^2 D'où (k*(x-a))^2+(k*(y-b))^2=r^2 On en déduit que k^2((x-a)^2+(y-b)^2)=r^2 <=> k^2=(r^2)/((x-a)^2+(y-b)^2) (on suppose que x!=a et y!=b, aussi fait gaffe à ta vitesseh) Or racine carré((x-a)^2+(y-b)^2)=point_distance(a,b,x,y)=point_distance(0,0,c,d) D'où k=r/point-distance(0,0,c,d) Et là je me dit que j'aurais pu écrire plus vite en remplaçant y-b par d et x-a par c dans mes explications depuis le début... |
|
| |
Caohimin Très bonne participation
Messages : 134 Localisation : Au coeur de cette charmante demoiselle.
| |
| |
Johny Wessmuller Utilisateur confirmé: Rang *
Messages : 233
| Sujet: Re: [Résolu] Collision sur un jeu de plateforme Ven 18 Mai 2012 - 18:29 | |
| Lol vas-y je te la refais Soit O=(a,b) le centre du cercle et M le point (x,y) du sprite. Alors le point d'intersection I=(e,f) du cercle et de la demi-droite [OM) vérifie (e,f)=O+k* OM où OM est le vecteur avec la flèche du O vers le M pour un certain k réel strictement positif. Ce point d'intersection est le point orange du dessin, cad l'endroit dont on souhaite trouver les coordonnées afin de mettre M là-bas s'il est à l'intérieur du cercle (if point_distance(blabla)<r). Trouvons donc ses coordonnées : OM=(x-a,y-b)=(c,d) Donc (e,f) vérifie (e,f)=(a,b)+k*(c,d), soit (e,f)=(a+k*c,b+k*d). Suite des explications (je suis parti, ne m'appelez pas je ne réponds plus) De plus on sait que OI = r donc que OI^2=r^2, soit (e-a)^2+(f-b)^2=r^2 D'où (a+k*c-a)^2+(b+k*d-b)^2=r^2, donc (k*c)^2+(k*d)^2=r^2 On en déduit que k^2(c^2+d^2)=r^2 <=> k^2=(r^2)/(c^2+d^2) (on suppose que (c^2+d^2!=0 donc que c!=0 et d!=0 donc que x!=a et y!=b, aussi fait gaffe à ta vitesseh) Or racine carré(c^2+d^2)=point_distance(0,0,c,d) D'où k=r/point-distance(0,0,c,d) |
|
| |
Caohimin Très bonne participation
Messages : 134 Localisation : Au coeur de cette charmante demoiselle.
| Sujet: Re: [Résolu] Collision sur un jeu de plateforme Ven 18 Mai 2012 - 19:19 | |
| Johny c'est parfait, seul problème (oui je sait tu ma prévenu) J'utilise un motion_add pour la vitesse, et a partir d'une vitesse très importante, il se met a "lévité" (je suis mort de rire devant mon écran la ) C'est a ça que sert la vitesseh=0, pour éviter la force centrifuge? |
|
| |
Johny Wessmuller Utilisateur confirmé: Rang *
Messages : 233
| Sujet: Re: [Résolu] Collision sur un jeu de plateforme Ven 18 Mai 2012 - 20:47 | |
| Non, je ne réponds pas En fait vitesseh ça n'existe pas, c'est juste pour dire "là tu stoppe le mouvement vers le centre de ton perso". A la place de vitesseh mets ce que tu ferais pour stopper le bonhomme. Et sinon, pour déplacer le perso tu fais comment ? Moi je verrai un truc du style : if d>=0 q=arcos(c/r); else q=-arcos(c/r); if keyboard_check(vk_right) { x=a+r*cos(q-v/r); y=b+r*sin(q-v/r); } if keyboard_check(vk_left) { x=a+r*cos(q+v/r); y=b+r*sin(q+v/r); } Avec v la vitesse. |
|
| |
Caohimin Très bonne participation
Messages : 134 Localisation : Au coeur de cette charmante demoiselle.
| Sujet: Re: [Résolu] Collision sur un jeu de plateforme Ven 18 Mai 2012 - 21:22 | |
| Johny, ton code ne fait aucun changement, il ne bouge pas... |
|
| |
Johny Wessmuller Utilisateur confirmé: Rang *
Messages : 233
| Sujet: Re: [Résolu] Collision sur un jeu de plateforme Ven 18 Mai 2012 - 21:31 | |
| Hmm j'ai pas GM sous la main, je te conseille de faire comme onilink alors.
Pour mon code j'ai dû faire des erreurs de raisonnement, mais c'est bizarre que ça ne bouge pas quand même... Y a pourtant des attributions de x et de y différentes respectivement de x et de y... |
|
| |
PsycKho Très bonne participation
Messages : 154 Projet Actuel : http://www.sharedojo.netai.net/
| Sujet: Re: [Résolu] Collision sur un jeu de plateforme Sam 19 Mai 2012 - 1:37 | |
| Player create - Code:
-
grounded=0 my_angle=0
max_speed=20 Player step - Code:
-
nearest_planet=planet nearest_planet_angle=point_direction(nearest_planet.x,nearest_planet.y,x,y)
if grounded=1 { friction=0 speed=0 my_angle=nearest_planet_angle grounded=2 }
if grounded=2 { x=nearest_planet.x+lengthdir_x(nearest_planet.r+sprite_height/2,my_angle) y=nearest_planet.y+lengthdir_y(nearest_planet.r+sprite_height/2,my_angle) if keyboard_check(vk_left) {my_angle+=10} if keyboard_check(vk_right) {my_angle-=10} if keyboard_check(vk_up) {motion_set(nearest_planet_angle,10) grounded=0} image_angle=my_angle-90 }
if grounded=0 { motion_add(nearest_planet_angle+180,1) if speed>max_speed {speed=max_speed} friction=.1 if point_distance(x,y,nearest_planet.x,nearest_planet.y)<nearest_planet.r+sprite_height/2 {grounded=1} } Planet create - Code:
-
r=100 Planet draw - Code:
-
draw_set_color(c_black) draw_circle(x,y,r,0)
draw_set_color(c_red) draw_point(x,y) |
|
| |
Caohimin Très bonne participation
Messages : 134 Localisation : Au coeur de cette charmante demoiselle.
| Sujet: Re: [Résolu] Collision sur un jeu de plateforme Sam 19 Mai 2012 - 3:57 | |
| O, je vais récupérer le code d'oni, qu'il a mis dans le fichier qu'il m'a fait parvenir, je vais le fouiller et comprendre son raisonnement avant, rien ne sert de mettre un bout de code que l'on ne comprend pas lol. Merci a vous deux.
Ps : je ne passe pas le sujet en résolue, car je risque de poser quelque question en rapport avec son code. |
|
| |
onilink_ Modérateur
Messages : 9183 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: [Résolu] Collision sur un jeu de plateforme Sam 19 Mai 2012 - 10:38 | |
| Si t'as besoin que je le commente dit le, mais normalement si tu sais que les lengthdir c'est des cos et des sin, tu devrais ne pas avoir de soucis. |
|
| |
Caohimin Très bonne participation
Messages : 134 Localisation : Au coeur de cette charmante demoiselle.
| Sujet: Re: [Résolu] Collision sur un jeu de plateforme Sam 19 Mai 2012 - 15:42 | |
| Faudrais juste que je revoie un peu mes cours... Lol
J'imagine que vous avez passer la terminale? Après ma 3ème je suis passer par un CAP moi, donc pas les même cours du tout. |
|
| |
onilink_ Modérateur
Messages : 9183 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: [Résolu] Collision sur un jeu de plateforme Sam 19 Mai 2012 - 15:59 | |
| Ouaip c'est ça, mais normalement la trigo on en fait au collège non ? Mais c'est vrai que les nombres complexes permettent de mieux comprendre le principe pour tout ce qui est les rotations et tout. |
|
| |
Caohimin Très bonne participation
Messages : 134 Localisation : Au coeur de cette charmante demoiselle.
| Sujet: Re: [Résolu] Collision sur un jeu de plateforme Sam 19 Mai 2012 - 16:35 | |
| Oui 3eme et 4ème, mais ça fait un moment le collège, lol. Je vais bien trouver 2-3 cour sur le net. |
|
| |
Caohimin Très bonne participation
Messages : 134 Localisation : Au coeur de cette charmante demoiselle.
| Sujet: Re: [Résolu] Collision sur un jeu de plateforme Sam 19 Mai 2012 - 17:57 | |
| Désoler psyckho je n'avais pas vue, j'essayerais à l'occasion. |
|
| |
Caohimin Très bonne participation
Messages : 134 Localisation : Au coeur de cette charmante demoiselle.
| Sujet: Re: [Résolu] Collision sur un jeu de plateforme Mar 22 Mai 2012 - 23:22 | |
| Le problème est résolue.
Merci a Onilink et a Jonas pour leurs aident! |
|
| |
Contenu sponsorisé
| Sujet: Re: [Résolu] Collision sur un jeu de plateforme | |
| |
|
| |
| [Résolu] Collision sur un jeu de plateforme | |
|