dani_nouvel_star Maker experimenté Lv 9
Nombre de messages : 279 Age : 44
| Sujet: la base de données RMXP et les scenes ... Lun 09 Juil 2007, 13:56 | |
| Je vais supposer que c'est monsieur l'ordinateur qui exécute les instructions qu'on lui donne dans le script. Il faut savoir que l'ordinateur lie le script dans un certain ordre de haut en bas. Pour les instructions, Il commence à lire après le "begin" et finit par le "end" qui lui est associé. Ce qui est logique. Dans Rpg Maker XP, il commence par lire ce fameux "main" que tout le monde connaît. En fait le "main" n'est que le titre d'une partie du script :Voir image ci dessous : - Spoiler:
La partie (1) de l'image ci-dessus peut-être nommé comme on le veut. L'important c'est de lui mettre un titre explicite qui est en rapport avec le script qui lui est associé. Dans ce main (2) il y a ce fameux "begin" (3) et "end" (4) entre lesquels se trouvent des instructions. Donc en gros, le script par défaut de rmxp est composé comme ceci : -> suite de definition de classes - Code:
-
class Objet_1 ... end class Objet_2 ... end -> programme principal : - Code:
-
begin #instruction end remarque : on peut définir des constantes ou des modules avant le "begin".Charger la base de donnéesDonc on a vu jusqu'à maintenant que le programme lit les instructions entre "begin" et "end". Avant de commencer à lire des instructions, il faudrait que l'ordinateur charge la base de données que l'on a fait dans rmxp. Voici l'endroit où on construit cette base de donnée : Je ne vais pas vous dire ce que c'est que cette boite de dialogue car tout le monde le sait je pense mais si vous savez pas, n'hésitez pas à demander. Dans cet boite de dialogue on a 13 onglets : Pour charger ces bases de données, on les stocke dans 13 objets : $data_actors, $data_classes, $data_skills, etc. On définit ces 13 objets comme ceci : - Code:
-
$data_actors = load_data("Data/Actors.rxdata") $data_classes = load_data("Data/Classes.rxdata") $data_skills = load_data("Data/Skills.rxdata") $data_items = load_data("Data/Items.rxdata") $data_weapons = load_data("Data/Weapons.rxdata") $data_armors = load_data("Data/Armors.rxdata") $data_enemies = load_data("Data/Enemies.rxdata") $data_troops = load_data("Data/Troops.rxdata") $data_states = load_data("Data/States.rxdata") $data_animations = load_data("Data/Animations.rxdata") $data_tilesets = load_data("Data/Tilesets.rxdata") $data_common_events = load_data("Data/CommonEvents.rxdata") $data_system = load_data("Data/System.rxdata") Ce chargement de base de données est à faire au début de la toute première scene du jeu : Scene_Title. Si jamais on veut scripter une scene d'intro qui se déroule avant le Scene_Title il ne faut pas oublier de charger ces différentes bases de données. Exemple pour le windowskin : TP : les scènesDans un projet vierge mettez ce script, à la place de main : SCRIPT 1 AVEC LES COMMENTAIRES : - Code:
-
#============================================================================== # ■ Main : par dani_nouvel_star # -> transitions graphique de 200 frames # -> création de l'objet "fenetre_de_dani" de la classe Window_Base # -> déplacement de cet objet par l'appuie des touches de direction # -> fin du programme si on appuie sur la touche action #==============================================================================
begin # début du programme # avant de faire les toutes première instructions il faut au préalable # charger toutes les données que vous avez vous même rentrer dans l'interface # de rmxp. # Chargement de la base de donnée $data_actors = load_data("Data/Actors.rxdata") $data_classes = load_data("Data/Classes.rxdata") $data_skills = load_data("Data/Skills.rxdata") $data_items = load_data("Data/Items.rxdata") $data_weapons = load_data("Data/Weapons.rxdata") $data_armors = load_data("Data/Armors.rxdata") $data_enemies = load_data("Data/Enemies.rxdata") $data_troops = load_data("Data/Troops.rxdata") $data_states = load_data("Data/States.rxdata") $data_animations = load_data("Data/Animations.rxdata") $data_tilesets = load_data("Data/Tilesets.rxdata") $data_common_events = load_data("Data/CommonEvents.rxdata") $data_system = load_data("Data/System.rxdata") # je vais créer un objet fenetre_de_dani de la classe Window_Base. Et je # je vais l'afficher de manière progressive en faisant une transition # graphique. Je pense que vous devriez savoir ce qu'est une transistion # graphique, car on peut en faire avec les commandes d'évènements. Si vous ne # savez pas de quoi il s'agit, demandez moi ^^. # voici comment faire une transition graphique. # une transition se fait toujours entre deux images. S'il n'y a pas de # première image, il n'y a pas de transition possible. # Ma première image est un freeze (une photo, un screenshot) de l'écran à ce # moment là du programme. Et à ce moment là, l'image est noire. Donc je prend # une photo de cette image noire. Graphics.freeze # la photo de cet écran noire étant prise, je vais faire créer cet objet # fenetre_de_dani de la classe Window_Base mais # avant de créer un objet de la classe Window_Base, il faut créer la # variable globale $game_system de la classe Game_System, car la classe # Window_Base utilise cette objet pour récupérer son "windowskin", en effet # si vous regardez de plus près l'initialize de cette classe Window_Base, on # récupère le windowskin dans : $game_system.windowskin_name $game_system = Game_System.new # je crée un objet fenetre_de_dani de la classe Window_Base fenetre_de_dani = Window_Base.new(0,0,100,150) # transition graphique qui se fait après entre la photo de l'écran noir et # l'affichage de l'objet "fenetre_de_dani" nouvellement crée. # entre parenthèse, l'argument représente le nombre de frames graphiques # pendant lesquelles va durer la transition. Pendant cette transition, il est # impossible de mettre une instruction. Graphics.transition(200) # 200 frames plus tard on arrive à la ligne suivante : # boucle infinie loop do # on avance d'une frame graphique Graphics.update # on met à jour les inputs Input.update # mes instructions qui seront exécuter après le Graphics.update, appelé # quelques lignes auparavant, autrement dit les instructions qui sont # dans cette boucle infinie seront exécutées une fois par frame # si on appuie sur la touche BAS if Input.trigger?(Input::DOWN) # je fait descendre l'objet fenetre_de_dani de 1 pixel fenetre_de_dani.y = fenetre_de_dani.y + 1 end # si on appuie sur la touche LEFT if Input.trigger?(Input::LEFT) # je déplace l'objet fenetre_de_dani à gauche de 1 pixel fenetre_de_dani.x = fenetre_de_dani.x - 1 end # si on appuie sur la touche RIGHT if Input.trigger?(Input::RIGHT) # je déplace l'objet fenetre_de_dani à droite de 1 pixel fenetre_de_dani.x = fenetre_de_dani.x + 1 end # si on appuie sur la touche UP if Input.trigger?(Input::UP) # je fait monter l'objet fenetre_de_dani de 1 pixel fenetre_de_dani.y = fenetre_de_dani.y - 1 end # si on appuie sur la touche C (action) if Input.trigger?(Input::C) break # on sort de la boucle infinie end end # fin de la boucle infinie # Quand on sort de la boucle infinie on arrive à cet endroit du programme # on gèle l'écran, freeze graphique Graphics.freeze # on libère la mémoire, on "efface" tous les objets crées durant le programme fenetre_de_dani.dispose # fin du programme end Ce script paraît long car j'ai mis beaucoup de commentaire mais voici le script sans aucun commentaires. Essayez de deviner ce que fait chaque ligne, si vous avez des difficulté à comprendre certaines lignes vous pouvez regarder une nouvelle fois le script avec les commentaires. SCRIPT 1 SANS LES COMMENTAIRES : - Code:
-
begin $data_actors = load_data("Data/Actors.rxdata") $data_classes = load_data("Data/Classes.rxdata") $data_skills = load_data("Data/Skills.rxdata") $data_items = load_data("Data/Items.rxdata") $data_weapons = load_data("Data/Weapons.rxdata") $data_armors = load_data("Data/Armors.rxdata") $data_enemies = load_data("Data/Enemies.rxdata") $data_troops = load_data("Data/Troops.rxdata") $data_states = load_data("Data/States.rxdata") $data_animations = load_data("Data/Animations.rxdata") $data_tilesets = load_data("Data/Tilesets.rxdata") $data_common_events = load_data("Data/CommonEvents.rxdata") $data_system = load_data("Data/System.rxdata") Graphics.freeze $game_system = Game_System.new fenetre_de_dani = Window_Base.new(0,0,100,150) Graphics.transition(200) loop do Graphics.update Input.update if Input.trigger?(Input::DOWN) fenetre_de_dani.y = fenetre_de_dani.y + 1 end if Input.trigger?(Input::LEFT) fenetre_de_dani.x = fenetre_de_dani.x - 1 end if Input.trigger?(Input::RIGHT) fenetre_de_dani.x = fenetre_de_dani.x + 1 end if Input.trigger?(Input::UP) fenetre_de_dani.y = fenetre_de_dani.y - 1 end if Input.trigger?(Input::C) break end end Graphics.freeze fenetre_de_dani.dispose end Voici ce que fait le script : Voici une autre version du script qui fait exactement la même chose. Insérer à la place de main le script suivant : SCRIPT 2 AVEC UTILISATION D'UNE CLASSE SCENE : - Code:
-
#============================================================================== # ■ Scene_Dani #==============================================================================
class Scene_Dani #-------------------------------------------------------------------------- # ● main #-------------------------------------------------------------------------- def main # Cette partie chargement ne doit être fait que pour la toute première scene # du jeu. # Chargement de la base de donnée $data_actors = load_data("Data/Actors.rxdata") $data_classes = load_data("Data/Classes.rxdata") $data_skills = load_data("Data/Skills.rxdata") $data_items = load_data("Data/Items.rxdata") $data_weapons = load_data("Data/Weapons.rxdata") $data_armors = load_data("Data/Armors.rxdata") $data_enemies = load_data("Data/Enemies.rxdata") $data_troops = load_data("Data/Troops.rxdata") $data_states = load_data("Data/States.rxdata") $data_animations = load_data("Data/Animations.rxdata") $data_tilesets = load_data("Data/Tilesets.rxdata") $data_common_events = load_data("Data/CommonEvents.rxdata") $data_system = load_data("Data/System.rxdata") $game_system = Game_System.new @fenetre_de_dani = Window_Base.new(0,0,100,150) Graphics.transition(200) loop do Graphics.update Input.update update if $scene != self break end end Graphics.freeze @fenetre_de_dani.dispose end #-------------------------------------------------------------------------- # ● update #-------------------------------------------------------------------------- def update if Input.trigger?(Input::DOWN) @fenetre_de_dani.y = @fenetre_de_dani.y + 1 end if Input.trigger?(Input::LEFT) @fenetre_de_dani.x = @fenetre_de_dani.x - 1 end if Input.trigger?(Input::RIGHT) @fenetre_de_dani.x = @fenetre_de_dani.x + 1 end if Input.trigger?(Input::UP) @fenetre_de_dani.y = @fenetre_de_dani.y - 1 end if Input.trigger?(Input::C) $scene = nil end end end
#============================================================================== # ■ Main : par dani_nouvel_star #==============================================================================
begin Graphics.freeze $scene = Scene_Dani.new while $scene != nil $scene.main end end Dans cet deuxième version, je me définis ma scene dans une classe Scene_Dani. J'ai enlevé volonatairement les commentaires dans cette deuxième version pour que vous puissez y réfléchir plus longuement chez vous. Les scripts 1 et 2 font la même chose. Et si vous avez des questions, n'hésitez pas à poster sur ce topic.
Dernière édition par le Lun 09 Juil 2007, 14:21, édité 1 fois | |
|
Invité Invité
| Sujet: Re: la base de données RMXP et les scenes ... Lun 09 Juil 2007, 14:18 | |
| alors là, ça mérite des compliments, j'ai pas eu besoin d'ouvrir rpg maker pour plus ou moins comprendre pas mal |
|
coco Dieu Maker Lv 44
Nombre de messages : 2989 Age : 30
| Sujet: Re: la base de données RMXP et les scenes ... Lun 09 Juil 2007, 14:29 | |
| :oops: :oops: :oops: :oops: :oops: Ouah Avec mon tuto tout pourri j'ai honte qu'en je vois le tien | |
|
Relm ---Fantôme--- Lv 0
Nombre de messages : 40942 Age : 33
| Sujet: Re: la base de données RMXP et les scenes ... Lun 09 Juil 2007, 17:55 | |
| Merci Dani, ça me semble très technique mais aussi pas mal complet et clair... C'est un tutorial de toi-même ? ____________ - Alex RE a écrit:
- C'est comme utiliser une hache pour trancher du pain. Je suis peut-être trop vieux pour ça.
| |
|
dani_nouvel_star Maker experimenté Lv 9
Nombre de messages : 279 Age : 44
| Sujet: Re: la base de données RMXP et les scenes ... Lun 09 Juil 2007, 19:50 | |
| oui ce tuto est bien de moi, j'essaie de faire un petit forum en ce moment et j'ai fait ça il y a pas mal de temps mais normalement j'explique un peu plus en détail ce qu'est cette classe Window_Base avant d'arriver à ce petit tuto qui n'est pas si technique que ça en fait ^^. J'avais aussi fait ça pour un autre forum. Si tu veux des détails MP moi car l'admin va effacer mon message si je fais de la pub . | |
|
Relm ---Fantôme--- Lv 0
Nombre de messages : 40942 Age : 33
| Sujet: Re: la base de données RMXP et les scenes ... Lun 09 Juil 2007, 22:47 | |
| - Citation :
- J'avais aussi fait ça pour un autre forum. Si tu veux des détails MP moi car l'admin va effacer mon message si je fais de la pub
Tu confond avec Creative, du moment que la "pub" est justifiée, je m'en fiche, ça m'inquiète pas du tout... Donc bravo pour ton tuto ! Tu mérite une belle récompenses ! ____________ - Alex RE a écrit:
- C'est comme utiliser une hache pour trancher du pain. Je suis peut-être trop vieux pour ça.
| |
|
Uzumaki Naruto RTP de base Lv 1
Nombre de messages : 18 Age : 29
| Sujet: Re: la base de données RMXP et les scenes ... Mar 10 Juil 2007, 15:00 | |
| C'est koa la récompense ?! | |
|
Quelqu'un Boulet Lv 1
Nombre de messages : 2549 Age : 33
| Sujet: Re: la base de données RMXP et les scenes ... Mar 10 Juil 2007, 17:31 | |
| Des points d'expérience et de l'or sur le forum. P.S.: Evites de faire du HS Naruto. Si tu as quelque chose à dire, fais-le ICI, Merci. ____________ J'ai faim ! Clic | |
|
dani_nouvel_star Maker experimenté Lv 9
Nombre de messages : 279 Age : 44
| Sujet: Re: la base de données RMXP et les scenes ... Mar 17 Juil 2007, 14:45 | |
| Si vous désirez voir quelles sont les autres propriétés que vous pouvez modifier vous pouvez regardez dans l'aide de RMXP : Voici un screen : | |
|
Contenu sponsorisé
| Sujet: Re: la base de données RMXP et les scenes ... | |
| |
|