Apprendre


Vous êtes
nouveau sur
Oniromancie?

Visite guidée
du site


Découvrir
RPG Maker

RM 95
RM 2000/2003
RM XP
RM VX/VX Ace
RM MV/MZ

Apprendre
RPG Maker

Tutoriels
Guides
Making-of

Dans le
Forum

Section Entraide

News: / Annonces du mois d'octobre / Jeux: Happiness Adventure / Jeux: Digital Shadow / Sorties: [RMVXACE] Digital Shadow - (...) / Chat

Bienvenue
visiteur !




publicité RPG Maker!

Statistiques

Liste des
membres


Contact

Mentions légales

166 connectés actuellement

11853092 visiteurs
depuis l'ouverture

91 visiteurs
aujourd'hui



Barre de séparation

Partenaires

Indiexpo

Akademiya RPG Maker

Hellsoft

Planète Glutko

RPG Maker Détente

Le Studio du Chat Vert

Leo-Games

Eclipso

Le Temple de Valor

Tous nos partenaires

Devenir
partenaire



[RGSS] Apprendre le RGSS : Structure de base classe Scene et Window

Série de tutoriels sur le RGSS. On aborde les structures de Scene et Window.

Ecrit par Tonyryu le 02/08/2013


❤ 0

Sommaire

Ruby
Les variables
Les tableaux
Les booléens et les calculs logiques
Structure de if
Structure de case
Boucles loop do et while
Boucle for
Fonctions et procédures
POO - Classes et objets

RGSS
Débuter avec le RGSS
Module Input
Bitmap, Color, Sprite
>> Structure de base des classes Scene et Window <<




[RGSS] Tuto 4 : Structure de base classe Scene et Window


Vous avez pu constater dans les scripts fournis par défaut avec RPG Maker XP, que la plupart se nomment Scene_.. et Window_.., cependant comment fonctionne-t-il réellement et surtout comment arriver a faire ses propres scripts d'affichages personnalisés.
Tout d'abord, il faut savoir qu'une classe Scene définit une interface avec l'utilisateur, alors que les classe Window permettent d'afficher quelque chose. Il ne faut pas perdre cela de vue, si l'on veut respecter un minimum le standard mis en place par les scripts par défaut : Scene gère l'interaction avec l'utilisateur en gérant les windows, alors que les windows ne servent qu'a faire de l'affichage. Cependant, n'oubliez pas que les fenêtres sont gérés dans les scènes.

Pour simplifier le tout, j'ai pris le temps de faire un squelette de script Scene et de script Window :

- Pour le script Scene

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#==============================================================================
# ■ Scene_Squel
#------------------------------------------------------------------------------
#  Squelette de script scene
#==============================================================================
 
class Scene_Squel
  #--------------------------------------------------------------------------
  # ● initialize
  #      Permet d'initialiser des variables de classes à la construction de l'objet
  #--------------------------------------------------------------------------
  def initialize
    # [ A COMPLETER ]
 
  end
 
  #--------------------------------------------------------------------------
  # ● main
  #--------------------------------------------------------------------------
  def main
    # Création des objets Window [ A COMPLETER ]
 
 
 
    # Transition graphique
    Graphics.transition
    # Boucle
    loop do
      # MAJ graphique
      Graphics.update
      # MAJ clavier
      Input.update
      # Appel de la méthode update
      update
      # Si la scene est diférente de celle-ci
      if $scene != self
        # Sortir de la scene
        break
      end
    end
    # Figer les graphisme
    Graphics.freeze
    # Détruire les fenêtres créés [ A COMPLETER ]
 
 
   end
 
  #--------------------------------------------------------------------------
  # ● update
  #      Permet de gérer les interventions utilisateurs
  #--------------------------------------------------------------------------
  def update
 
    # Appeler les méthodes update des fenêtres créés [ A COMPLETER ]
 
 
 
    # Si touche annulation appuyé
    if Input.trigger?(Input::B)
      # Jouer le son d'annulation
      $game_system.se_play($data_system.cancel_se)
 
      # Action a faire en cas d'annulation [ A COMPLETER ]
 
 
      return
    end
 
    # Si touche validation appuyé
    if Input.trigger?(Input::C)
      # Jouer le son de validation
      $game_system.se_play($data_system.decision_se)
 
      # Action a faire en cas de validation [ A COMPLETER ]
 
 
 
      return
    end
  end
end 


Avec les commentaires que j'ai mis, il ne devrait pas y avoir de dificulté de compréhension, et si en plus je vous dis, que ce script de scene est parfaitement fonctionnel, vous ne me croyez pas?? Et bien faites le test, ajouter un nouveau script au dessus de main, appelez le comme vous voulez 'test' par exemple, copiez y le squelette Scene, ajoutez un évènement sur votre carte avec la commande script :

Portion de code : Tout sélectionner

1
$scene = Scene_Squel.new


Comment ça, ça ne fonctionne pas??? Vous obtenez bien un écran noir avec aucune intérraction possible, vous entendez juste les sons d'annulation et de validation selon la touche appuyée, mais vous ne pouvez plus en sortir. Et bien c'est donc parfaitement opérationnel, il ne reste plus qu'a le personnaliser pour en faire ce que vous voulez.
Par exemple, dans l'action d'annulation, rajoutez :

Portion de code : Tout sélectionner

1
$scene = Scene_Map.new


Et dans l'action de validation, rajoutez :

Portion de code : Tout sélectionner

1
print "Bouton validé appuyé."


et refaites le test, en appuyant sur les boutons de validation et d'annulation. Et voila, vous venez de commencer à personnaliser votre Scene.

Vous comprenez bien que même si rien n'est affiché, l'on peut quant même interagir avec une scène, se balader dans un tableau en gérant l'index en variable de classe de la scène puis en fonction de l'appuie de haut ou bas, incrémenter ou décrémenter cette index, et ainsi de suite. Mais il est évident, qu'il est plus agréable de rajouter quelque fenêtre pour avoir un peu de visuel de ce que l'on fait.

Nous allons donc passer à la création d'une fenêtre via un script Window vierge :

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#==============================================================================
# ■ Window_Squel
#------------------------------------------------------------------------------
#  Squelette de script Window héritant de Window_Base
#==============================================================================
 
class Window_Squel < Window_Base
  #--------------------------------------------------------------------------
  # ● initialize
  #      Permet d'initialiser des variables de classes à la construction de l'objet
  #--------------------------------------------------------------------------
  def initialize
    # Appel de la méthode initialize de la classe mère (x, y, largeur, hauteur) [ Valeur a modifier ]
    super(0, 0, 200, 200)
    # Définition du Bitmap permettant d'afficher des données
    self.contents = Bitmap.new(width - 32, height - 32)
    # Définition de la police d'écriture sur ce Bitmap
    self.contents.font.name = $fontface
    self.contents.font.size = $fontsize
 
    # Autre action à réaliser dans initialize [ A COMPLETER ]
 
 
 
    # Appel de la méthode refresh
    refresh
  end
 
  #--------------------------------------------------------------------------
  # ● refresh
  #--------------------------------------------------------------------------
  def refresh
    # Effacer le Bitmap
    self.contents.clear
 
    # Dessin à effectuer sur le Bitmap [ A COMPLETER ]
 
  end
end 


Ce script héritant de la classe Window_Base, ne permet aucune gestion de curseur, mais permet quant même d'afficher tout ce que l'on veut. Cependant je rappel qu'une fenêtre doit être géré dans une classe Scene. Pour cela il faut instancié un objet de la classe fenêtre pour pouvoir la manipuler. "Instanciation" ça vous parle pas beaucoup je suppose, en gros c'est une action pour créer une variable ayant pour modèle, une classe. Tout comme le squelette de Scene, cette fenêtre est complétement opérationnelle.
On va donc la tester, ajoutez un script au dessus du script de Scene_Squel, puis copiez-y la classe de Window_Squel. Ensuite dans le script Scene, à l'endroit où il est question de "Création des objets Window" ajouter cette ligne :

Portion de code : Tout sélectionner

1
2
# Création des objets Window  [ A COMPLETER ]
@squel_window = Window_Squel.new



Pour la destruction :

Portion de code : Tout sélectionner

1
2
# Détruire les fenêtres créés [ A COMPLETER ]
@squel_window.dispose



Pour la mise à jour :

Portion de code : Tout sélectionner

1
2
# Appeler les méthodes update des fenêtres créés [ A COMPLETER ]
@squel_window.update




Source
- Tonyryu, "[RGSS] Tuto 4 : Structure de base classe Scene et Window", TonyryuDev, écrit le 2 août 2013 [consulté le 4 juillet 2021], https://web.archive.org/web/20181202044023/https://www.tonyryudev.com/joomla3/index.php/menu-mes-developpements/menu-cours-ruby-rgss/14-rgss-tuto-4-structure-de-base-classe-scene-et-window
Ce tutoriel a été posté avec l'accord de son auteur.


Aucun commentaire n'a été posté pour le moment.

Suite à de nombreux abus, le post en invités a été désactivé. Veuillez vous inscrire si vous souhaitez participer à la conversation.

Haut de page

Merci de ne pas reproduire le contenu de ce site sans autorisation.
Contacter l'équipe - Mentions légales

Plan du site

Communauté: Accueil | Forum | Chat | Commentaires | News | Flash-news | Screen de la semaine | Sorties | Tests | Gaming-Live | Interviews | Galerie | OST | Blogs | Recherche
Apprendre: Visite guidée | RPG Maker 95 | RPG Maker 2003 | RPG Maker XP | RPG Maker VX | RPG Maker MV | Tutoriels | Guides | Making-of
Télécharger: Programmes | Scripts | Ressources | Packs de ressources | Midis | Eléments séparés | Sprites
Jeux: Au hasard | Notre sélection | Sélection des membres | Tous les jeux | Jeux complets | Le cimetière | RPG Maker 95 | RPG Maker 2000 | RPG Maker 2003 | RPG Maker XP | RPG Maker VX | RPG Maker VX Ace | RPG Maker MV | Autres | Proposer
Ressources RPG Maker 2000/2003: Chipsets | Charsets | Panoramas | Backdrops | Facesets | Battle anims | Battle charsets | Monstres | Systems | Templates
Ressources RPG Maker XP: Tilesets | Autotiles | Characters | Battlers | Window skins | Icônes | Transitions | Fogs | Templates
Ressources RPG Maker VX: Tilesets | Charsets | Facesets | Systèmes
Ressources RPG Maker MV: Tilesets | Characters | Faces | Systèmes | Title | Battlebacks | Animations | SV/Ennemis
Archives: Palmarès | L'Annuaire | Livre d'or | Le Wiki | Divers