RM-Land : le forum
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.



Bienvenue sur RM-Land : Le forum !
Après votre inscription, vous aurez accès à tout le forum : Partage de ressources, de scripts, résolution de vos problèmes, présentations de projets et montage de teams.
 
AccueilLe sitePortailDernières imagesRechercherS'enregistrerConnexion
Le Deal du moment : -21%
LEGO® Icons 10329 Les Plantes Miniatures, ...
Voir le deal
39.59 €

 

 le fonctionnement d'une scène ^^

Aller en bas 
AuteurMessage
Invité
Invité




le fonctionnement d'une scène ^^ Empty
MessageSujet: le fonctionnement d'une scène ^^   le fonctionnement d'une scène ^^ Icon_minitimeLun 28 Avr - 18:52

Domaine de compétences : RGSS
Niveau : Moyen


Ce tutorial vous expliquera le fonctionnement d’un écran quelconque sous RMXP, pour que vous puissiez créer les votre à l’avenir.

Le principe général du moteur de RMXP, est une grande boucle, tournant à l’infini jusqu’à l’on lui dise de quitter.

Que voit on en regardant le script Main ?
La création d’une variable globale $scene recevant pour valeur un nouvel objet de Scene_Title.
Puis une première boucle.
Cette boucle exécute la méthode « Main » de la classe Scene_xxxx actuelle tant que $scene est un objet de type Scene_xxxx (plus précisément tant que $scene n’est pas nulle).
Quand $scene sera nulle, la boucle s’arrêtera, et le jeu sera fermé en conséquence.

Maintenant intéressons nous à Scene_xxxx.
De quoi est composée une classe Scene_xxxx ?
- D’une méthode « Initialize » prenant, selon les besoins, des paramètres.
- D’une méthode « Main »
- D’une méthode « Update »
Ensuite selon les Scenes, et les besoins du programmeur, d’autres méthodes sont ajoutées ou non.

Décrivons ces 3 méthodes :

- Initialize :

Cette méthode, propre à toutes les classes (Scene ou autre) est appelée pour initialiser une instance (un objet), de cette classe. Ce qui se résume en terme de code à cela :
Code:
 
...
$scene = Scene_xxxx.new()
...

Le new correspond au Initialize.

Vous insèrerez donc dans cette méthode, les valeurs par défaut, nécessaire au fonctionnement de la Scene_xxxx. Pour les paramètres, j’y reviendrai un peu plus tard.

Cette méthode est facultative, vous n’êtes pas obligé de la définir si vous n’en avez pas besoin.


- Main :

Main, est la fonction principale (d’où son nom), de la classe Scene_xxxx. Toutes les classes de type Scene_xxxx suivent la même structure, et c’est cette structure que je vais vous détailler.
Voici la méthode sous sa forme la plus simple, c'est-à-dire comportant le minimum nécessaire à un fonctionnement correct.
Code:
 
01| def main
02| Graphics.transition
03| loop do
04| Graphics.update
05| Input.update
06| update
07| if $scene != self
08| break
09| end
10| end
11| Graphics.freeze
12| end

Note : Si vous recopiez ce code directement, pensez à enlevez les numéros de lignes et le symbole vertical.

. Ligne 2 : Exécution de la Transition Graphique.
. Ligne 3 à 10 : Boucle principale de la Scene_xxxx
___ . Ligne 4 : Mise à jour des graphismes, changement visible à l’écran.
___ . Ligne 5 : Mise à jour de l’état des touches, pour savoir quelles touches sont pressées ou pas.
___ . Ligne 6 : Appel de la méthode « Update » de la classe. C’est la que ce fait le fonctionnement de la classe, la gestion des actions voulues selon les touches appuyées, la mise à jour des fenêtres affichées...
___ . Ligne 7 à 9 : Test de changement de Scene. Si $Scene ne correspond pas à l’objet actuel du type de la classe Scene_xxxx alors :
___ ___ . Ligne 8 : On casse la boucle (pour en sortir).
. Ligne 11 : On gèle l’écran pour préparer le prochain objet Scene.

Ce qui varie dans « Main » entre les différentes classes de type Scene_xxxx, c’est le code disposé entre la ligne 1 et 2, et entre la ligne 10 et 11. Puis bien entendu le code de la méthode « Update ».
On a donc en général, la création des fenêtres nécessaires, entre les lignes 1 et 2, et leurs destructions entre les lignes 10 et 11.
La création se fait comme ceci :
Code:
 
...
@fenetre = Window_xxxx.new()
...

La destruction se fait comme ceci :
Code:
 
...
@fenetre.dispose
...

Il faut bien comprendre que la méthode « Main » n’est appelée qu’une fois, mais que la méthode « Update » est appelée à chaque frame.

Voyons maintenant la méthode « Update »

- Update :

Que doit comporter cette méthode ? Les appels pour la mise à jour des fenêtres affichées, le code pour quitter la scène en appuyant sur la touche voulue, et le code pour ce qui doit se passer avec cet écran…

Jusque là rien de bien compliqué…
Le code pour la mise à jour d’une fenêtre :
Code:
 
@fenetre.update

Voici le bout de code nécessaire pour quitter la scene (et donc en arriver sur une autre) :
Code:
 
...
if Input.trigger?(Input::B)
$game_system.se_play($data_system.cancel_se)
$scene = Scene_Map.new
return
end
...

Donc Input::B correspond en général à la touché d’annulation qui par défaut correspond à la touché Echap.
Donc si cette touche Vient d’être pressée, on joue le son d’annulation, puis j’attribue à $scene, un nouvel objet de type Scene_xxxx, ici Scene_Map (on arrivera donc sur la map de jeu en cours).

$scene ne correspond plus à « self », la boucle de « Main » détectera ce changement et cassera la boucle et « Main » de Scene_xxxx s’arretera pour lancer le « Main » de Scene_Map. (Grâce à la boucle du Script « Main »).

J’espère avoir été assez clair pour l’explication du principe de fonctionnement.

Bon pour l’histoire des paramètres…
Disons que vous avez besoin de placez un curseur dans la prochaine scène selon la valeur de la variable truc dans la scène actuelle…

Et Bien à la création de la prochaine Scene vous donnerez en paramètre à « new » (donc à « initialize ») la valeur de la variable truc.
Bien sur cela implique que vous ayez prévu dans le code de « initialize » ce fameux paramètre pour vous en servir, sinon vous aurez droit à une erreur de syntaxe.
Ensuite le paramètre s’affectera (si vous lui dites) à une variable d’instance, et celle-ci sera utilisée dans votre main ou votre update…
Un ptit exemple :
Code:
 
def Initialize(param)
@pos_curseur = param + 1
#vous vous servirez alors de @pos_curseur dans votre code.
end

Votre appel du new ressemblera à cela :
Code:
 

$scene = Scene_xxxx.new(truc)


Voilà !! le fonctionnement d'une scène ^^ 196303

staiber
Revenir en haut Aller en bas
 
le fonctionnement d'une scène ^^
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» [Demande] scene map
» scene intro

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
RM-Land : le forum :: Quartier des makers :: Salle d'entrainement-
Sauter vers: