[Résolu][Game Maker]Collision Line & Direction

Démarré par Zaki, 26 Juin 2007 à 13:04

0 Membres et 1 Invité sur ce sujet

26 Juin 2007 à 13:04 Dernière édition: 27 Juin 2007 à 20:24 par Ryuuzaki
Salut à tous,
J'ai voulu faire un engine de base pour un certain jeu et j'ai un problème au niveau de la collision, voici la composition de mon projet GM :
Object :
the_sonic :
Sprite : sonic
Create :
Citationdirection = 270;
speed = 3;
Oustide Room :
Move=>Warp in both directions when outside

the_line :
Sprite : Aucun
Create :
Citationpoint_1x = 0;
point_1y = 0;
point_2x = 0;
point_2y = 0;
temps = 0;
Step :
Citationif (mouse_check_button_pressed(mb_left))
{
point_1x = mouse_x;
point_1y = mouse_y;
temps = -5;
}
if (mouse_check_button_released(mb_left))
{
point_2x = mouse_x;
point_2y = mouse_y;
temps = 120;
}
if temps>0
    then temps -= 1;
Draw :
Citationif temps > 0
    then draw_line(point_1x,point_1y,point_2x,point_2y);
if temps = -5
    then draw_line(point_1x,point_1y,mouse_x,mouse_y);

Control :
Sprite : Aucun
Step :
Citationif collision_line(the_line.point_1x,the_line.point_1y,the_line.point_2x,the_line.point_2y,the_sonic,true,false)
{
the_sonic.direction += 90-(the_sonic.direction-point_direction(the_line.point_1x,the_line.point_1y,the_line.point_2x,the_line.point_2y));
}

Voila, alors mon problème, c'est que lorsque je trace une ligne et que je veux que mon sonic (qui est en boule) rebondisse, mais correctement, et ben il traverse, c'est comme si il ne la touchait même pas.

S'il vous plaît, aidez-moi.

PS : Voila le fichier si vous voulez le voir sur Game Maker 7.

Pourrais tu envoyer ton fichier de projet ? Ca serait plus simple ;)

Voila, j'espère que vous pourrez m'aider.
Je vais le mettre sur le premier post aussi.

Mouarf désolé, c'est un fichier Game Maker 7, j'utilise la 6.1.

Je répondrais plus tard si j'ai trouvé le courage (:p) d'installer la 7.

Gérer les collision via le GML est assez délicat, personnellement, je préfère utiliser l'évènement "Colision with", qui est plus simple à gérer ;)

Mais si tu tiens absolument a utiliser le GML, voici un petit extrait de l'aide traduite de Game Maker 6.1 (je pense que pour la plupart, c'est également valable avec GM7) :
CitationLors de la planification des mouvements ou lorsque vous décidez d'effectuer certaines actions, il est souvent important de vérifier s'il existe des collisions entre des objets placés à différents endroits. Les routines suivantes peuvent vous être utiles pour effectuer ce contrôle. Ces routines possédent toutes en commun trois arguments. L'argument obj peut être un objet, le mot-clé all ou encore l'ID d'une instance. L'argument prec indique si la vérification doit s'effectuer de manière précise ou seulement être basée sur la boîte de rebond de l'instance. Un contrôle précis n'est fait uniquement que lorsque le sprite de l'instance est paramétré avec l'option de contrôle précis de collision. L'argument notme peut être positionné à true pour indiquer que l'instance courante ne doit pas être vérifiée. Toutes ces fonctions retournent soit l'ID de l'une des instances en collision ou renvoient une valeur négative en cas de non collision.

collision_point(x,y,obj,prec,notme) Cette fonction teste si une collision se produit au point (x,y) avec les entités de l'objet obj.
collision_rectangle(x1,y1,x2,y2,obj,prec,notme) Cette fonction teste s'il existe une collision entre le rectangle (plein) de coins opposés indiqués et les entités de l'objet obj. Par exemple, vous pouvez utiliser cette fonction pour tester si une zone est sans obstacles.
collision_circle(xc,yc,radius,obj,prec,notme) Cette fonction teste s'il y a une collision entre le cercle (plein) centré à la position (xc,yc) d'un rayon donné et les entités de l'objet obj. Par exemple, vous pouvez l'utiliser pour tester si un objet est proche d'un emplacement particulier.
collision_ellipse(x1,y1,x2,y2,obj,prec,notme) Cette fonction teste s'il y collision entre l'ellipse (pleine) de coins opposés indiqués et les entités de l'objet obj.
collision_line(x1,y1,x2,y2,obj,prec,notme) Cette fonction teste s'il se produit une collision entre la ligne droite positionnée de (x1,y1) à (x2,y2) et les entités de l'objet obj. Ceci est une fonction très puissante. Vous pouvez ainsi l'utiliser pour tester si une instance peut en apercevoir une autre en vérifiant si la ligne droite entre les deux instances ne rentre pas par exemple en intersection avec un mur.

Oui, c'est bien ce que j'utilise habituellement, seulement cette fois-ci, je dois dessiner une ligne avec la souris pour que sonic rebondisse. Et pour dessiner la ligne et vérifier la collision dans cette ligne, je n'ai pas d'autre choix que d'utilise le GML.

Tu sais le débugger se révèle parfois très utile ;)

Je ne vois pas où tu veux en venir, à ce que l'expression Collision line marche sur GM ?

PS : Je vous pose cette question parce que j'ai la flemme d'allumer Vista pour ouvrir GM.

Le débugger permet de voir en temps réel l'état des variables, des instances, etc de ton programme. Et quand quelque chose que tu fait ne marche pas, lancer le programme en mode débugger est la première chose à faire ;)

Ok, merci, je vais essayer de résoudre ce problème.

J'ai trouvée ton probleme...tu a oublier de metre l'objet controleur. ^_^
Sauf que...quand sonic touche les lingne il monte sans redesandre... :mellow:




Euh, tu les as bien mis solide tes objets ?!
Ca met déjà arrivé !

Citation de: linksi le 27 Juin 2007 à 10:44
J'ai trouvée ton probleme...tu a oublier de metre l'objet controleur. ^_^
Sauf que...quand sonic touche les lingne il monte sans redesandre... :mellow:

Oui forcément si on oublie de mettre le contrôleur, le code peut être parfait ça ne marchera pas :P

Sinon c'est normal qu'il rebondisse sans tomber: sa chute n'est pas programmée ^^

Ok, merci beaucoup de m'avoir résolu ce problème.
Le fait qu'il monte sans redescendre, c'est fait exprès.

Salut, quel est le meilleur logiciel entre Game Maker  7 et Multimédia Fusion 2 Fr pour faire des RPG ?

Ce n'est pas le sujet du topic ;)

Je crois ne pas me tromper en te disant qu'en faisant une recherche tu verras beaucoup de topics confrontant les différents logiciels :)