CONNEXION
  • RetourJeux
    • Tests
    • Soluces
    • Previews
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Tous les Jeux
  • RetourActu
    • Culture Geek
    • Astuces
    • Réalité Virtuelle
    • Rétrogaming
    • Toutes les actus
  • Black Friday
  • RetourHigh-Tech
    • Actus JVTECH
    • Bons plans
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTECH
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch
    • Xbox Series
    • Overwatch 2
    • FUT 23
    • League of Legends
    • Genshin Impact
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • PS4
  • One
  • Switch
  • Wii U
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Etoile Abonnement RSS

Sujet : J'aide les personne dans Game maker

DébutPage précedente
«1  ... 7374757677787980818283  ... 108»
Page suivanteFin
JIJI_Black JIJI_Black
MP
Niveau 2
17 août 2015 à 22:45:12

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é ^^

labascule labascule
MP
Niveau 5
17 août 2015 à 23:16:50

J'utilise comme testeur : si la tourelle.vie < 100 alors elle sera visé.

utilises

si la tourelle.vie >= 100

pour faire stoper le heal ?

JIJI_Black JIJI_Black
MP
Niveau 2
17 août 2015 à 23:27:58

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é.

revhunter revhunter
MP
Niveau 5
18 août 2015 à 04:57:01

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 :hap:

Soul-Caribou Soul-Caribou
MP
Niveau 10
18 août 2015 à 10:03:02

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. ^^

Soul-Caribou Soul-Caribou
MP
Niveau 10
18 août 2015 à 18:39:03

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é ^^.

AjukIX AjukIX
MP
Niveau 14
18 août 2015 à 18:47:14

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 ?

Message édité le 18 août 2015 à 18:47:38 par AjukIX
revhunter revhunter
MP
Niveau 5
18 août 2015 à 20:12:23

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 :hap:

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 :hap:

AjukIX AjukIX
MP
Niveau 14
18 août 2015 à 20:17:37

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...

revhunter revhunter
MP
Niveau 5
18 août 2015 à 20:22:13

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 :hap:

AjukIX AjukIX
MP
Niveau 14
18 août 2015 à 20:34:39

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

revhunter revhunter
MP
Niveau 5
18 août 2015 à 21:31:18

De rien!

Perso je n'utilise jamais "bounce", par ailleurs je peux te suggérer:

Dans collision event
motion_set(<direction en degrés>, <vitesse>);

Dans step event
image_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 :hap:

AjukIX AjukIX
MP
Niveau 14
18 août 2015 à 21:49:50

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...

revhunter revhunter
MP
Niveau 5
18 août 2015 à 22:04:06

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 objet
var 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 objet
var 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é :ok:

JIJI_Black JIJI_Black
MP
Niveau 2
18 août 2015 à 22:18:03

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.

revhunter revhunter
MP
Niveau 5
19 août 2015 à 01:24:09

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 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.

C'est peut-être pas du tout ça que tu cherches si c'est le cas re-explique le problème :hap:

AjukIX AjukIX
MP
Niveau 14
19 août 2015 à 08:51:53

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 ....

JIJI_Black JIJI_Black
MP
Niveau 2
19 août 2015 à 18:24:21

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.

AjukIX AjukIX
MP
Niveau 14
19 août 2015 à 18:40:48

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 ;)

JIJI_Black JIJI_Black
MP
Niveau 2
19 août 2015 à 22:12:40

"mp_potential_step_object" en demandant d'éviter les autres object enemy.

Ah bien vu AjuklX vois-tu je n'aurais pas fais mieux ^^

DébutPage précedente
«1  ... 7374757677787980818283  ... 108»
Page suivanteFin
Répondre
Prévisu
?
Victime de harcèlement en ligne : comment réagir ?
La vidéo du moment