Partagez
Aller en bas
avatar
ZangtherOld
Membre

Nombre de messages : 1711
Date d'inscription : 07/08/2009

RGSS2 : Modifier un module en cours de jeu ?[ Résolu ]

le Ven 8 Jan 2010 - 22:24
Bonjour a tous les scripters !

Aujourd'hui, une petit question qui me taraudait depuis un moment : est-ce possible par le biais d'un évènement déclenché en cours de jeu, de modifier le contenu d'une variable dans un module d'un script et que ce changement soit effectif dans le jeu.

Si c'est possible, serait-ce possible qu'on me donne un exemple de comment faire ? Exemple avec données genre je veux modifier la valeur Z dans le module Zang du script Zangther.
( Ouais je m'aime et alors ? )

Merci de vos réponses !!


Dernière édition par Zangther le Ven 8 Jan 2010 - 23:53, édité 1 fois
avatar
Berka
Administrateur

Nombre de messages : 1831
Age : 28
Localisation : Paris
Distinction : rubyste déglingué
9ème dan en scripting-no-jutsu

Nouveau Justine Beber ;P
Date d'inscription : 16/12/2007
http://rpgruby.olympe-network.com

Re: RGSS2 : Modifier un module en cours de jeu ?[ Résolu ]

le Ven 8 Jan 2010 - 23:29
Ton exemple doit s'organiser comme ça, si je comprends bien:
Code:
module Zang
  Z = 1
end
Sauf que Z n'est pas une variable mais une constante. Elle porte bien son nom: elle ne change pas. Je ne sais pas si Rgss le fait, mais Ruby plante en cas de réassignation de constante:
Code:
Z = 1
Z = 2
Peut etre que Rgss le supporte, mais conventionnellement (et éthiquement) tu ne peux pas le faire. Cela dit, j'ai jamais essayé.

Comment faire ?

Deux solutions: soit garder les constantes, soit faire sans.

1) De nombreux scripteurs utilisent les variables de jeu pour faire évoluer leur constante. Tu as du souvent voir: ID_VAR_VIE = 1
En effet, on peut utiliser des variables dont l'id est renseigné dans la constante pour afficher plus tart dans le script:
Code:
print($game_variables[ID_VAR_VIE].to_s)
Mais là encore faut etre prudent: il faut savoir que les variables de jeux ne sont utilisables qu'après l'ouverture de la Scene_Title et le chargement des données.

2) A la place, tu dois utiliser des variables globales $variable.
Et pour pousser le perfectionnisme, tu devrais les nommer: $VARIABLE. Elle garde la meme fonction, elle reste une variable globale comme les autres, mais le codeur constate par convention que cette variable joue un rôle de réglage. Elle ne varie que très rarement.

En résumé il faut toujours se soumettre aux conventions de codage. Meme si le résultat est invisible dans le code et le programme. Elles servent à guider l'utilisateur ou le codeur qui passe après.

Bonne soirée,

Berka
avatar
ZangtherOld
Membre

Nombre de messages : 1711
Date d'inscription : 07/08/2009

Re: RGSS2 : Modifier un module en cours de jeu ?[ Résolu ]

le Ven 8 Jan 2010 - 23:36
Tout d'abord merci de ta réponse ^^

Hum, donc si j'ai bien compris à moins de commencer à modifier le script au niveau des constantes on ne peut pas ?

Et si on créait plusieurs modules mais qui seraient différents, ce serait possible que par les biais d'une variable on puisse aller de l'un à l'autre sans problème ?

Ou alors mettre des conditions dans le module.
Si ModuleChoix est égal à 1
Alors Z = 1
Sinon Z = 2

Je me demande surtout si ça posera des problème au niveau du script ou pas.
avatar
Berka
Administrateur

Nombre de messages : 1831
Age : 28
Localisation : Paris
Distinction : rubyste déglingué
9ème dan en scripting-no-jutsu

Nouveau Justine Beber ;P
Date d'inscription : 16/12/2007
http://rpgruby.olympe-network.com

Re: RGSS2 : Modifier un module en cours de jeu ?[ Résolu ]

le Ven 8 Jan 2010 - 23:49
Ca posera des problemes en effet.

L'interpreteur lorsqu'il commence son boulot, lit d'abord les constantes. Il les assigne puis exécute le reste.
si on a :
Code:
module A
if ??? = true
B = 1
else
B = 2
end
end
Déjà, que mettre à la place des ??? ? Si on met une constante, ca ne sert à rien.
Si on met une globale :
- soit elle n'a pas été initialisée, donc ne sera pas true => B = 2 pour de bon
- soit elle a déja été initialisée, meme principe, B sera initialisée aussi définitivement.
Meme si on change sa valeur, il est trop tard: B est une constante, elle le restera. (Et puis, soit dit en passant, il faudra trouver le moyen de dire à Ruby de revenir sur ses pas et de réévaluer la ligne, ce qui est totalement illogique: le code est en dehors d'une méthode).
Pareil pour tout autre variable:
- les variables de classes: @@variable
- les variables d'instance @variable
- et encore moins les variables locales: variable

Il faut savoir aussi en ruby que l'on ne peut pas définir de constante dans une méthode. Donc exit tous les :
Code:
def init_cons(a)
  case a
    when 1 then A = 1
    when 2 then A = "ok"
    else
        A = 0
  end
end

berka
avatar
ZangtherOld
Membre

Nombre de messages : 1711
Date d'inscription : 07/08/2009

Re: RGSS2 : Modifier un module en cours de jeu ?[ Résolu ]

le Ven 8 Jan 2010 - 23:52
Ok, donc le plus simple pour un gars qui ne fait que bidouiller au niveau des scripts c'est encore de ne pas essayer de faire ça, exact ?

M'enfin merci de tes réponses, j'essayerais de voir cette histoire de constantes quand j'aurais pris quelques cours de Ruby/ RGSS2 x)
avatar
Berka
Administrateur

Nombre de messages : 1831
Age : 28
Localisation : Paris
Distinction : rubyste déglingué
9ème dan en scripting-no-jutsu

Nouveau Justine Beber ;P
Date d'inscription : 16/12/2007
http://rpgruby.olympe-network.com

Re: RGSS2 : Modifier un module en cours de jeu ?[ Résolu ]

le Ven 8 Jan 2010 - 23:55
Si tu vas bidouiller, c'est comme ça qu'on apprend plein de trucs.

tu peux faire:

Code:
module Reglages
  $REGLAGE_MAP = 1
end

def methode
  super_effet_map($REGLAGE_MAP)
end

et dans ton event, tu peux parfaitement modifier la variable globale et t'en servir comme une sorte de constante (mais qui n'en est pas parce qu'une constante ne varie pas ^^)

berka
avatar
ZangtherOld
Membre

Nombre de messages : 1711
Date d'inscription : 07/08/2009

Re: RGSS2 : Modifier un module en cours de jeu ?[ Résolu ]

le Sam 9 Jan 2010 - 0:00
Ok merci de tes conseils ^^
Contenu sponsorisé

Re: RGSS2 : Modifier un module en cours de jeu ?[ Résolu ]

Revenir en haut
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum