Scooby Doo Utilisateur confirmé: Rang *
Messages : 265 Localisation : Québec !
| Sujet: Collision Instatanée *Resolu* Mar 29 Jan 2008 - 1:24 | |
| Allo ! J'ai decider de recommencer a faire des jeux avec gamemaker et je me heurte a un probleme, j'aimerais que les projectile que tire mon personnage sois (je sais pas comment le dire "insant collide") c'est a dire qu'il ne se deplace pas mais qu'il soit plutot representer par une ligne partant du personnage pour aller jusqu'au point d'impact, j'ai trouver plusieur scripts (dont celui qui rapporte le premier point d'une colission de Blizter) mais tout c'est scripts s'applique à la direction de la souris et non a celle de mon personnage et je m'y perd un peu. - Spoiler:
Ce script sert a trouver d'un point 1 au point 2 jusqu'ou ira t'on avant de cogner un objet solid.
C'est une fonction recursive :
Utilisation : Citation: lastPointCollideX(x1,y1,x2,y2,nomd'unobjetsolid);
Code de lastPointCollideX : Citation:
if(abs(floor(argument0)-floor(argument2))<=2 && abs(floor(argument1)-floor(argument3))<=2){return argument2;} if(!collision_line(argument0,argument1,argument0+((argument2-argument0)/2),argument1+((argument3-argument1)/2),argument4,1,0)) { return lastPointCollideX(argument0+((argument2-argument0)/2),argument1+((argument3-argument1)/2),argument2,argument3,argument4); } return lastPointCollideX(argument0,argument1,argument0+((argument2-argument0)/2),argument1+((argument3-argument1)/2),argument4);
Code de lastPointCollideY : Citation:
if(abs(floor(argument0)-floor(argument2))<=2 && abs(floor(argument1)-floor(argument3))<=2){return argument3;} if(!collision_line(argument0,argument1,argument0+((argument2-argument0)/2),argument1+((argument3-argument1)/2),argument4,1,0)) { return lastPointCollideY(argument0+((argument2-argument0)/2),argument1+((argument3-argument1)/2),argument2,argument3,argument4); } return lastPointCollideY(argument0,argument1,argument0+((argument2-argument0)/2),argument1+((argument3-argument1)/2),argument4);
Vérifier qu'il y a bien un point de collision compris dans la Line car sinon il y aura des calculs pour rien, donc :
Citation:
if(collision_line(x,y,mouse_x,mouse_y,block,1,0)) { draw_line(x,y,lastPointCollideX(x,y,mouse_x,mouse_y,block),lastPointCollideY(x,y,mouse_x,mouse_y,block)); } else { draw_line(x,y,mouse_x,mouse_y); }
Est une bonne facon de l'utilisé.
ainsi que - Spoiler:
//collision_instant(direction,x,y,wall,bullet,maxlen) var xx,yy,rand,obj,maxlen; dir=argument0; //direction xx=argument1; yy=argument2; obj=argument3; //stopper obj2=argument4; //collision checker maxlen=argument5; //maximum length for checking collision xx_new=xx; // create the draw-to point yy_new=yy; repeat(maxlen/2) { //repeat however many times divided by 2 xx_new+=lengthdir_x(2,dir); //add 2 px to the line yy_new+=lengthdir_y(2,dir); if collision_line(xx,yy,xx_new,yy_new,obj,1,1) { break; //and stop if there's something blocking } } draw_line(xx,yy,xx_new,yy_new); //draw the new line (in draw event only!)
Je crois avoir tout dit, Merci d'avance. (C'est caca, j'ai plus Word pour me corriger...) :snif2:
Dernière édition par le Jeu 31 Jan 2008 - 4:02, édité 1 fois |
|
Wargamer *Excellent utilisateur*
Messages : 6938 Projet Actuel : Bataille de cake au fruits
| Sujet: Re: Collision Instatanée *Resolu* Mar 29 Jan 2008 - 3:00 | |
| ca marcherais pas avec un draw_line ? _________________ Règle #1 du CBNA, ne pas chercher à faire dans la subtilité; personne comprend |
|
Malax Utilisateur confirmé: Rang **
Messages : 496 Localisation : Aix-en-Provence Projet Actuel : Lemmings Struggle (abandonné)
| Sujet: Re: Collision Instatanée *Resolu* Mar 29 Jan 2008 - 13:17 | |
| Est - ce - que ton tir a une distance max ? Parce que dans ce cas avec la direction tu peux facilement trouver les coordonnées du second point, en prenant le maximum bien sur. Perso quand je n'arrive pas à faire une solution optimale je tacle un peu dedans, au moins t'es sur d'avoir le moins de bug. Si tu veux une portée non stop, tu peux faire une boucle de ton test avec les points qui s'éloignent au fur et à mesure. En tout cas tu auras besoin de ces fonctions:
lengthdir_x(..); lengthdir_y(..);
Je peux pas d'en dire plus je m'en suis jamais servi. |
|
Scooby Doo Utilisateur confirmé: Rang *
Messages : 265 Localisation : Québec !
| Sujet: Re: Collision Instatanée *Resolu* Jeu 31 Jan 2008 - 4:05 | |
| d'accord d'accord, je suis un peu con , j'avais a peine lu le deuxieme scripts et je vien de le lire et de trouver ce que je cherchais :honte: , merci quand meme. au moins, j'ai poster un scripts qui pourrait etre utile pour certains. |
|
Contenu sponsorisé
| Sujet: Re: Collision Instatanée *Resolu* | |
| |
|