| [MI-RESOLU] Probleme | |
|
|
Auteur | Message |
---|
Adrix Pas mal
Messages : 35 Localisation : Là
| Sujet: [MI-RESOLU] Probleme Jeu 30 Déc 2010 - 13:37 | |
| Bonjour à tous et bonne année !! Je viens de me remettre récemment à utiliser GameMaker (v7 Pro) pour créer un jeu comme le mod Zombies! de Cod BO en 2D (vue de dessus)... J'ai voulu mettre un viseur simple, comme on ne voit pas grand chose en vue de dessus, un viseur qui varie de vert , lorsque l'on vise un allié (mode 2J), jaune lorsqu'il n'y a rien devant soi (ni zombie, ni allié), et rouge lorsqu'il y a un zombie devant soi... Bon jusque là, ca a l'air simple... Mon problème vient du viseur : il varie bien en jaune et vert mais pas en rouge ! Voilà le code que j'ai inscrit dans du viseur : - Code:
-
ii = "n" ii étant la variable "d'état" du viseur : n = neutre ; a = allié ; e = ennemi Dans : - Code:
-
x=mouse_x y=mouse_y if collision_line(j1.x,j1.y,lengthdir_x(j1.w1_range,j1.direction),lengthdir_y(j1.w1_range,j1.direction),j2,true,true) then { ii ="a" } else if collision_line(j1.x,j1.y,lengthdir_x(j1.w1_range,j1.direction),lengthdir_y(j1.w1_range,j1.direction),zombie,true,true) then { ii ="e" } else { ii="n" }
;
"j2" est un object ainsi que "zombie" et "j1" "w1_range" et la distance que peux parcourir une balle tirée par l'arme (ici 960 pixels) puis (par D&D , flem ) - Code:
-
if ii equal to "e" then { Change sprite to "ennemy" (viseur rouge) } if ii equal to "a" then { Change sprite to "ally" (viseur vert) } else { Change sprite to "neutre" (viseur jaune) } et voila ce que j'obtient : - Spoiler:
- Spoiler:
- Spoiler:
Là , j'utilise la fenêtre "Debug Information" - Spoiler:
Je trouve quand même cela un peu etrange... j'ai fouillé par tout et je suis sur à 100% qu'il n'y a aucune faute de frappe et aucun autre "zombie" ou "j2"! Voilà... j'espere que vous trouverez une solution car moi j'en peux plus! Merci d'avance!! PS: les graphismes sont tirés de CS2D
Dernière édition par Adrix le Jeu 30 Déc 2010 - 21:13, édité 1 fois |
|
| |
red-error Utilisateur confirmé: Rang ****
Messages : 1015 Projet Actuel :
| Sujet: Re: [MI-RESOLU] Probleme Jeu 30 Déc 2010 - 14:21 | |
| if ii equal to "e" then { Change sprite to "ennemy" (viseur rouge) } elseif ii equal to "a" then { Change sprite to "ally" (viseur vert) } else { Change sprite to "neutre" (viseur jaune) } Le viseur rouge se trouvait tout seul devant, et les tests après lui se faisaient toujours. |
|
| |
Adrix Pas mal
Messages : 35 Localisation : Là
| Sujet: Re: [MI-RESOLU] Probleme Jeu 30 Déc 2010 - 14:38 | |
| Je ne pense pas que le probleme vient de là mais je peux toujours essayer... EDIT : non, il ne fonctionne toujours pas... Mais à l'image n°4, j'ai utiliser le debug et la variable ne se change pas en "e"... Sinon merci pour cette réponse rapide |
|
| |
arthuro Utilisateur confirmé: Rang ****
Messages : 1483 Localisation : Paris Projet Actuel : Diagon https://arthursonzogni.com/Diagon
| Sujet: Re: [MI-RESOLU] Probleme Jeu 30 Déc 2010 - 17:30 | |
| Non je confirme ce que dit red-error Si tu laisse ton code tel qu'il est actuellement, il est normal que le viseur soit vert ou jaune (il ne peut etre rouge)
Pour les collision, pourquoi tu utilise pas collision-circle ? |
|
| |
M@d_Doc Modérateur
Messages : 6600 Localisation : 47°44'8.04 Projet Actuel : aucun
| Sujet: Re: [MI-RESOLU] Probleme Jeu 30 Déc 2010 - 18:29 | |
| pointer vers un objet au pixel près : https://cbna.forumactif.com/t9641-gml-laser_lengthTrouver l'id de la nième instance d'un (ou plusieurs) objet, par rapport (dans cet exemple) à la position du hero; hero.x,hero.y : - Code:
-
global.liste=ds_priority_create() with(ennemi) { ds_priority_add(global.liste,id,point_distance(x,y,hero.x,hero.y)) } with(allie) { ds_priority_add(global.liste,id,point_distance(x,y,hero.x,hero.y)) }
le_plus_proche=ds_priority_find_min(global.liste) ds_priority_destroy(liste) dans le_plus_proche tu as l'id de l'objet le plus proche, que ce soit un ennemi ou un allié C'est pas adapté dans ce cas là, mais c'est surtout un exemple de comment utiliser les listes de priorités, c'est super pratique! Lol, je sais, je cite que mes exemples, mais c'est les seuls que je connais par cœur :p |
|
| |
Adrix Pas mal
Messages : 35 Localisation : Là
| Sujet: Re: [MI-RESOLU] Probleme Jeu 30 Déc 2010 - 19:21 | |
| Merci! j'avais essayé une autre methode mais j'ai retesté celle-ci et ca marche Sinon j'ai remarqué un truc : lorsque je vise qqun (zombie ou allie) a l'horizontale, il faut visé vers la moitié inferieure du sprite... Est-ce qu'il faudrait utiliser ta méthode pour pointer au pixel près ? Sinon merci, j'ai résolu mon pb!! et je comptais utiliser la priorité plus tard ! |
|
| |
M@d_Doc Modérateur
Messages : 6600 Localisation : 47°44'8.04 Projet Actuel : aucun
| Sujet: Re: [MI-RESOLU] Probleme Jeu 30 Déc 2010 - 20:56 | |
| en fait, le coup du laser sert plutôt à trouver , sur une ligne droite, à quel pixel la collision se passe. Donc en théorie, ça marche sur l'intégrale du sprite. Oh, et si jamais (je continue à citer mes propres documents, lol), sur le site ( www.lecbna.org ), section tutorial, il y en a un sur les collisions, tu trouveras peut être quelquechose d'utile dedans... [EDIT] En fait, pour le coup de détecter tout le sprite, ça dépend du mask de l'objet : s'il est égal au sprite, pas de soucis, sinon... ben on peux rien faire, c'est le mask de l'objet qui définit la forme "physique" de l'objet. |
|
| |
Adrix Pas mal
Messages : 35 Localisation : Là
| Sujet: Re: [MI-RESOLU] Probleme Jeu 30 Déc 2010 - 21:11 | |
| j'ai mis un mask carré recouvrant tout le sprite (carré 32*32) et ca ne résout rien... J'ai remarqué que l'orientation du personnage jouait de "l'endroit " où il fallait viser...
poutant seules les variables "w1_range" (distance) et "direction" sont importées du Joueur... |
|
| |
M@d_Doc Modérateur
Messages : 6600 Localisation : 47°44'8.04 Projet Actuel : aucun
| Sujet: Re: [MI-RESOLU] Probleme Ven 31 Déc 2010 - 1:08 | |
| les collision_line partent bien du MILIEU du joueur?
Ah, et dans la même fonction, le deuxieme set de coordonnées, t'as pas oublié de rajouter les coordonnées de départ? un lengthdir suffit pas!
bref :
collision_line(j1.x,j1.y,j1.x+lengthdir_x(j1.w1_range,j1.direction),j1.y+lengthdir_y(j1.w1_range,j1.direction),j2,true,true)
et comme dit, vérifie aussi que j1.x, j1.y est bien le milieu de ton joueur |
|
| |
Adrix Pas mal
Messages : 35 Localisation : Là
| Sujet: Re: [MI-RESOLU] Probleme Ven 31 Déc 2010 - 10:09 | |
| C'était la première fois que j'utilisait cette fonction , je ne savait pas trop quels arguments donner...sinon ca fonctionne à peu près, mais il est vrai que les coordonnées ne partent pas du milieu du sprite, peut-on régler ceci par une fonction sans modifier le point d'origine du sprite ? Ca m'enbeterait de mettre des lengthdir un peu partout... PS: C'est tôt 1h |
|
| |
M@d_Doc Modérateur
Messages : 6600 Localisation : 47°44'8.04 Projet Actuel : aucun
| Sujet: Re: [MI-RESOLU] Probleme Ven 31 Déc 2010 - 10:27 | |
| si l'origine de ton sprite est en 0,0, tu rajoute sprite_get_width(sprite_index)/2 à x et rajoutes sprite_get_height(sprite_index)/2 à y
la fonction collision_line nécessite le point de depart et le point d'arrivée, dans le même système de coordonnées : si tu met juste le lengthdir en deuxième, c'est les coordonnées relatives au prmier point :p |
|
| |
Adrix Pas mal
Messages : 35 Localisation : Là
| Sujet: Re: [MI-RESOLU] Probleme Ven 31 Déc 2010 - 10:40 | |
| merci mais je ne comprend pas très bien...
je met sprite_get_width comme ca ? j1.sprite_get_width(spr_j1_a1)/2 au lieu de x1 et x2 (en gardant le lengthdir bien sûr)
Et mon sprite n' a pas 0,0 en origine, mais ca change quand même rien au code...
|
|
| |
M@d_Doc Modérateur
Messages : 6600 Localisation : 47°44'8.04 Projet Actuel : aucun
| Sujet: Re: [MI-RESOLU] Probleme Ven 31 Déc 2010 - 11:13 | |
| centre de ton sprite : x-sprite_get_xoffset(sprite_index)+sprite_get_width(sprite_index)/2 y-sprite_get_yoffset(sprite_index)+sprite_get_height(sprite_index)/2
bref, c'est là où tu le place, MOINS l'offset du sprite(pour revenir comme si l'origine etait en 0,0 ), PLUS la moitie de la taille, pour aller au milieu, pardi!
faut le marquer tel quel, si le sprite affiché est le sprite défini pour l'objet. (sprite_index est la variable qui correspond à ce sprite) ça, c'est pour un bon point de départ pour ta ligne, bien au centre du sprite affiché !
pour le deuxième point, tu veux les coordonnées d'un point à la distance "l" avec un angle "ang" par rapport au point précédent (qu'on appellera x1,y1, c'est plus court) le deuxième point sera donc :
x1+lengthdir_x(l,ang) y1+lengthdir_y(l,ang) |
|
| |
Adrix Pas mal
Messages : 35 Localisation : Là
| Sujet: Re: [MI-RESOLU] Probleme Ven 31 Déc 2010 - 17:14 | |
| |
|
| |
Contenu sponsorisé
| Sujet: Re: [MI-RESOLU] Probleme | |
| |
|
| |
| [MI-RESOLU] Probleme | |
|