Bah le problème est que la tourelle de soin reste toujours sur la même cible malgré celle ci à 100 de ses vie pendant que les autres s'endommage .
Comme si il y avais une variable qui était déjà présente don je ne connais pas son nom pour la modifier.
Faudrait arriver a changer cette variable au moment au les vie sont a 100 mais je vois pas comment c'est la que ça coince .
J'utilise comme testeur : si la tourelle.vie < 100 alors elle sera visé.
Bon comme tu l'as dis !
faudra attendre une personne plus compétente
Merci d'avoir essayé ^^
J'utilise comme testeur : si la tourelle.vie < 100 alors elle sera visé.
utilises
si la tourelle.vie >= 100
pour faire stoper le heal ?
Oui et ça stop seulement le heal mais ne change pas de cible et des qu'une autre tourelle est endommagé elle recommence a heal mais pas sur la cible endommagé.
Le 10 juillet 2015 à 19:12:05 Soul-Caribou a écrit :
La fonction est en effet obsolète et il faut te créer ton propre système de choix de dialogue toi même, c'est dommage en effet mais ce n'est pas si compliqué.Personnellement mon système marche dans les grandes lignes comme ça :
- J'initialise plusieurs variables globales dans un objet Controller (obj_ctrl_dialogues par exemple) qui regroupe tous mes dialogues et textes en général, sous cette nomenclature "global.idPnJ_dialogX[langue,id_text]", voilà ce que ça veut dire pour moi :
- global. : pour que ce soit une variable globale.
- idPNJ : représente le nom du personnage à qui on parlera
- dialogX : le X représente les potentiels différents dialogues du PNJ : 1,2,3... au choix
- ensuite pour la partie tableau/arrays (merci chopsueys), j'ai ma variable langue qui est choisie par le joueur.
- id_text : représente un nombre qui sera attribué à chaque phrase.
Avec par exemple un obj_marchand voilà ce que ça donnerait dans ce tableau de variables :
//Dialogue du Marchand : global.obj_marchand_dialog1[fr,1] : "Bonjour, vous voulez marchander?" //amorce du dialogue global.obj_marchand_answer1[fr,1] : "Oui pourquoi pas" //premier choix de réponse global.obj_marchand_answer1[fr,2] : "Peut être plus tard" //deuxième choix de réponse global.obj_marchand_dialog1[fr,2] : "Ok, regardez ce que j'ai" //réponse favorable au premier dialogue global.obj_marchand_dialog1[fr,3] : "N'hésitez pas à revenir" //réponse défavorable au premier dialogue global.obj_marchand_dialog2[fr,1] : "Oh encore vous? vous voulez marchander?" //amorce du dialogue global.obj_marchand_answer2[fr,1] : "Oui pourquoi pas" //premier choix de réponse global.obj_marchand_answer2[fr,2] : "Pas pour le moment." //deuxième choix de réponse global.obj_marchand_dialog2[fr,2] : "Ok, regardez mes derniers arrivages" //réponse favorable au premier dialogue global.obj_marchand_dialog2[fr,3] : "A bientôt!" //réponse défavorable au premier dialogue (avec en doublette de chaque ligne la version "en" à la place de "fr" pour la trad)
De là libre à toi de rajouter des id_text en plus pour plus de réponses, ou d'autres dialogues et sous dialogues.
Ensuite et c'est la qu'il faut coder, mais pour résumer :
- j'ai un objet parent qui sert à dessiner la boite de dialogue, et les différents dialogues/réponses/textes
- ces textes sont appelés en deux temps : par des variables locales qui ne sont pas elles créées dans l'objet parent, mais directement dans les objets des pnj, et qui elles mêmes pointent vers les variables globales de notre fichier plus haut.
- Par exemple pour mon marchand, j'ai un obj_marchand avec tout son fonctionnement spécifique, mais où sont aussi déclarées des variables "dialog1[fr,1]", "answer1[fr,1]", "answer1[fr,2], etc... ces variables renvoies vers les variables "global.obj_marchand_dialog1[fr,1]" associées.
- Du coup quand l'objet parent dessine l'interface, puis le dialogue en appelant les variables locales (des objets enfants), il dessine au final les textes contenus dans les variables globales créées auparavant. Il suffit ensuite de placer à ta convenance dans la fenêtre les différents textes voir autres éléments (avatars,...)
- Il suffit ensuite de rajouter à ça dans le système un système de sélection de réponse, avec une variable locale "selectionchoix" par exemple.
- Cette variable dessinera par exemple en rouge un des textes en fonction de sa valeure : par exemple si selectionchoix est égal à 1, alors l'answer1[global.langue, 1] sera dessiné plus gros et en rouge, et la deuxième réponse plus petit en gris. Si elle vaut 2, ce sera l'inverse.
- Si tu appuies sur gauche droite, tu changes la valeur de selectionchoix.
- si tu appuies sur Entrée, cela valide ta réponse et affiche le dialogue suivant voir conclut le dialogue.
J'ai essayé d'être complet mais en te laissant quand même quelques points plus flous à déduire toi même, si tu bloques vraiment n'hésite pas à revenir demander un coup de pouce ;)
Je suis encore un rookie, donc ça reste très probablement optimisable.
Hello, ça marche tip-top les Arrays 2D en variable globale, mais si tu en mets des centaines voire + ça ralentit le jeu après un certain temps et quelques chutes importantes de Fps aussi, je me demande si un switch ne serait pas + optimisé par exemple un script dans lequel tu mets tous tes dialogues et l'argument0 le texte choisi:
var arText= argument0; // Soit arText le numéro du dialogue sélectionné
var r;
switch(arText)
{
case 0: r = "Ton premier dialogue"; break;
case 1: r = "Ton second dialogue la discussion continue"; break;
case 2: r = "Ton troisième dialogue"; break;
case 3: r = "Au revoir"; break;
default: r = " "; break; // Par défaut un texte vide
}
return(r); // On rend le texte choisit
Donc en gros on choisit le texte, et si le texte n'existe pas il rend un vide " "
Et ensuite tu utilises ton dialogue en faisant:
global.obj_marchand_dialog[fr] = scr_dialog_marchand_FR(0); // Le '0' est le dialogue choisit
Voilà c'est juste une suggestion de mon système peut-être je me suis trompé je te laisse juger et j'ai peut-être fait des erreurs je ne sais plus
Je vais faire des tests, mais je pense que tu as totalement raison! Merci beaucoup! (encore une chance que je n'ai pas encore fait tant de dialogues que ça xD )
JIJI je vais essayer de voir pour ton soucis de tourelle cette après midi, je te promets rien cependant j'ai pas énormément de temps non plus. ^^
Bon je n'ai pas réussi à faire un truc fonctionnel, car partit sur une mauvaise piste. Je ne trouve pas un moyen simpliste de choper TOUTES les ids d'instances en collision de la portée de la tourelle de soin, je pense passer à côté du réel problème.
J'ai quelques autres pistes (avec des variables globales créée avec les tourelles qui stockeraient individuellement les IDs) où je vois à peut prés comment il faudrait faire mais c'est un peu au dessus de mon niveau encore, et je vais probablement te dire des bêtises. J'essaierai d'y repenser et de retester des trucs malgré tout, je te dirai si je trouve quelque chose mais c'est pas gagné pour moi vu que j'ai aussi mon projet à côté ^^.
Salut.
Je me remet un peu à la creation de jeux. J'avais essayé il y a longtemps avec la vieille version de GM. J'ai DL la dernière version standard et je bloque déjà. Impossible d'afficher un simple texte. Pourtant je met bien un objet qui affiche un texte, j'ai défini une police etc mais rien... Serait-ce car il faut la version pro du logiciel et que la version Free nous empeche de mettre du texte ?
Le 18 août 2015 à 10:03:02 Soul-Caribou a écrit :
Je vais faire des tests, mais je pense que tu as totalement raison! Merci beaucoup! (encore une chance que je n'ai pas encore fait tant de dialogues que ça xD )
De rien j'avais vu un truc du genre sur un forum anglais du coup je me suis dis pourquoi pas
Le 18 août 2015 à 18:47:14 AjukIX a écrit :
Salut.
Je me remet un peu à la creation de jeux. J'avais essayé il y a longtemps avec la vieille version de GM. J'ai DL la dernière version standard et je bloque déjà. Impossible d'afficher un simple texte. Pourtant je met bien un objet qui affiche un texte, j'ai défini une police etc mais rien... Serait-ce car il faut la version pro du logiciel et que la version Free nous empeche de mettre du texte ?
Normalement tu peux utiliser les fonctions de texte même en version free, je pense que dans la version standard free la seule chose que tu ne peux pas faire c'est créer un éxécutable corrigez-moi si je dis nimp
Si non montre moi ton bout de code je vais look
bah j'ai juste mis un objet dans la room et dans cet objet j'ai fait un event "create" puis "draw a text" genre hello avec x:30 et y: 30 mais rien ne s'affiche. Après ça fait longtemps que j'ai pas utiliser GM. Je me rappelle plus si en mettant un draw text dans un "create" le texte reste afficher constamment...
Le 18 août 2015 à 20:17:37 AjukIX a écrit :
bah j'ai juste mis un objet dans la room et dans cet objet j'ai fait un event "create" puis "draw a text" genre hello avec x:30 et y: 30 mais rien ne s'affiche. Après ça fait longtemps que j'ai pas utiliser GM. Je me rappelle plus si en mettant un draw text dans un "create" le texte reste afficher constamment...
Non tu dois mettre tout ce qui se dessine dans l'event "Draw" ou "Draw GUI" et ça devrait marcher.
L'event "Create" tu ne peux pas mettre de fonctions de dessins si non ça ne va rien faire
Merci beaucoup Revhunter je ne me souvenait plus de ça. Et autre question, j'ai créé des objets qui bounce sur des obstacles et j'aimerait que lorsque les objets changent de direction l'avant du sprite se tourne dans la direction de deplacement. Donc après l'action "bounce" je crait un code "image_angle=direction" mais là les objets se bloquent contre les obstacles... et si je place le code avant l'action "bounce" ils se tournent dans la direction du depacement precedent mais ne se bloquent pas par contre
De rien!
Perso je n'utilise jamais "bounce", par ailleurs je peux te suggérer:
Dans collision eventmotion_set(<direction en degrés>, <vitesse>);
Dans step eventimage_angle = direction;
donc le "motion_set" permet de faire aller ton objet dans la direction souhaitée avec la vitesse choisie et ensuite dans step event tu peux récupérer la direction en tant qu'image_angle, tu peux aussi utiliser "motion_add" pour ajouter de la vitesse, si tu veux en savoir + : http://docs.yoyogames.com/ marque motion_set ou motion_add dans l'index.
Je ne sais pas si ça t'aide ou si ça répond à ta question mais tu peux essayer et me tenir au courrant si ça te convient
Ok merci. Et est-ce qu'avec motion_set on peut mettre une direction aléatoire ? C'est vrai qu'il y a longtemps (1 - 2 ans) je n'utilisait pas "bounce" car ça faisait un peu n'importe quoi avec les directions mais comme ça fait longtemps j'ai oublié pas mal de truc, me reste que des bribes comme les alarmes, Time Line etc...
Oui bien sûr
Pour une direction random (utilise irandom() pour une valeur ronde et random() pour une valeur aléatoire ronde ou décimale) :motion_set(irandom(360), <vitesse>)
Tu peux aussi aller en direction d'un objetvar dir = point_direction(x, y, obj_wall.x, obj_wall.y);
motion_set(dir, <vitesse>);
Là ton objet ira en direction des points x et y de l'objet 'obj_wall' par exemple
Tu peux également aller en direction opposée d'un objetvar dir = point_direction(x, y, obj_wall.x, obj_wall.y) + 180;
motion_set(dir, <vitesse>);
Le '180' en + c'est pour inverser la direction simplement
Bon c'est la base après pour aller + loin je te laisse réfléchir c'est pas compliqué
Le 18 août 2015 à 18:39:03 Soul-Caribou a écrit :
J'ai quelques autres pistes (avec des variables globales créée avec les tourelles qui stockeraient individuellement les IDs) où je vois à peut prés comment il faudrait faire mais c'est un peu au dessus de mon niveau encore, et je vais probablement te dire des bêtises. J'essaierai d'y repenser et de retester des trucs malgré tout, je te dirai si je trouve quelque chose mais c'est pas gagné pour moi vu que j'ai aussi mon projet à côté ^^.
J'ai pensé aussi que cela serait l'affaire des IDs.
Mais de là a les stocker individuellement je pense aussi que ça surpasse mon niveau étant donné que je m'en sors pas trop sur du gml..
Je comprend pour ton projet mais là dessus pas de problème , j'ai tout mon temps et je recherche aussi de mon coté ^^
Merci bien et si je trouve, je l'indiquerais car ça m'a plutôt l'air compliqué si d'autres personnes recherche peut être cette astuce.
Le 18 août 2015 à 22:18:03 JIJI_Black a écrit :
Le 18 août 2015 à 18:39:03 Soul-Caribou a écrit :
J'ai quelques autres pistes (avec des variables globales créée avec les tourelles qui stockeraient individuellement les IDs) où je vois à peut prés comment il faudrait faire mais c'est un peu au dessus de mon niveau encore, et je vais probablement te dire des bêtises. J'essaierai d'y repenser et de retester des trucs malgré tout, je te dirai si je trouve quelque chose mais c'est pas gagné pour moi vu que j'ai aussi mon projet à côté ^^.
J'ai pensé aussi que cela serait l'affaire des IDs.
Mais de là a les stocker individuellement je pense aussi que ça surpasse mon niveau étant donné que je m'en sors pas trop sur du gml..
Je comprend pour ton projet mais là dessus pas de problème , j'ai tout mon temps et je recherche aussi de mon coté ^^
Merci bien et si je trouve, je l'indiquerais car ça m'a plutôt l'air compliqué si d'autres personnes recherche peut être cette astuce.
Salut, je pense pouvoir t'éclairer, donc à chaque fois qu'une tourelle est créée dans l'event create tu écris une variable qui va permettre de stocker son numéro de création, comment? comme ça:
dans create eventtourelle_id = instance_number(obj_tourelle);
ensuite si la tourelle possède le tourelle_id 4 par exemple il va heal
dans step event (par exemple)if tourelle_id == 4 and hp < 100
{
heal += 1;
}
Même si tu crées 10 tourelles d'1 coup en réalité elles vont se créer 1 par 1 mais trop rapidement pour que tu saches le voir du coup elles auront chacune une variable tourelle_id différente et donc après tu sais leur donner des noms par rapport à ça.
C'est peut-être pas du tout ça que tu cherches si c'est le cas re-explique le problème
Merci Revhunter pour ces précisions. J'ai réussi à bien avancer dans mon concept. Mais à présent je rencontre un autre problème : j'ai créé un object ennemy qui poursuit le player, jusque là pas de soucis, mais quand je met plusieurs ennemis ils finissent par se superposer et former un amas très moche. Et quand je tente des les éloigner un peu avec l'event "collision" ils ne se superposent plus mais finissent par se bloquer entre eux et restent figer.... C'est assez problématique ....
Salut!
Essaye donc ça dans l'event Step de ton ennemy .
if collision_circle(x,y,20,obj_ennemy,1,1)
{
move_towards_point(obj_ennemy.x,obj_ennemy.y,-0.51)
}
else if instance_exists(obj_player) && not collision_circle(x,y,20,obj_ennemy,1,1)
{
move_towards_point(obj_player.x,obj_player.y,0.5)
}
Mais il restera encore quelque souci don je ne pourrais pas vraiment aider là dessus.
Revhunter
à chaque fois qu'une tourelle est créée dans l'event create tu écris une variable qui va permettre de stocker son numéro de création, comment? comme ça:
dans create event
tourelle_id = instance_number(obj_tourelle);
ensuite si la tourelle possède le tourelle_id 4 par exemple il va heal
dans step event (par exemple)
if tourelle_id == 4 and hp < 100
{
heal += 1;
}
Même si tu crées 10 tourelles d'1 coup en réalité elles vont se créer 1 par 1 mais trop rapidement pour que tu saches le voir du coup elles auront chacune une variable tourelle_id différente et donc après tu sais leur donner des noms par rapport à ça.
Ok ça je le savais mais je ne pensais pas qu'il était aussi possible de lui mettre l'instance_number().
Ça ne fonctionne pas si je le met dans créate event de l'instance même mais fonctionne si je le place dans créate event de l'instance même mais que je coche sur un autre objet que celui ci.
Le problème restera le même, la tourelle de soin visera donc une cible à < 100 vie mais continuera a viser la cible même si celle ci étant à 100 vie.
Voici donc mon code sur le Step de la tourelle de soin.
if instance_exists(obj_Cible)
{
image_angle = point_direction(x,y,instance_exists(obj_Cible.vie<100).x,instance_exists(obj_Cible.vie<100).y)
}
C'est son image_angle qui la permet de visé une cible.
Le reste , son tir etc.. est cadré sur cette image_angle donc aucun problème.
Le problème c'est que son image_angle reste sur la même cible et donc heal la même cible alors que d'autres cibles en ont besoin.
Hello. Bon au final après quelques essais et prise de tête j'ai trouvé comment faire: j'ai utilisé un "mp_potential_step_object" en demandant d'éviter les autres object enemy. Comme ça je n'ai plus aucun problèmes. Les enemy ne se superposent plus et ne se coincent plus et le tout rend bien et est fluide ;)
"mp_potential_step_object" en demandant d'éviter les autres object enemy.
Ah bien vu AjuklX vois-tu je n'aurais pas fais mieux ^^