RPG Creator : créez votre MMORPG ou RPG sans aucune connaissance en programmation
Disponible le 4 Juin !
- Jouez à votre jeu sur tablettes tactiles, Smartphones et navigateurs Web
- Personnalisez vos menus
- Dessinez facilement et rapidement vos cartes
- Créez des actions pour le combat A-RPG
Auteur: Bad_maker Script: EasyWindowsCreator Description: Permet de créer des fenêtres facilement via la commande "insérer script" en événement. Ce script est avant tout dédié aux makers n'ayant pas de connaissance particulière en ruby. Le code est à copier et coller dans un nouveau script au dessus de main. La fenêtre est créée et le joueur peut encore contrôler son personnage car il n'y a pas eu de changement de scène. Utilisation:
J'ai crée une fenêtre qui s'appelle fenetre1. Par défaut la fenêtre est aux positions x: 0 et y: 0 (en pixels) et elle mesure 640 pixels de large sur 480 en hauteur. Cette fenêtre est invisible car elle à une opacité égale à 0 (opacité = transparence) ce qui est très pratique! On peut à l'avance créer ses fenêtres avec les propriétés que l'on veut et les faire apparaître et disparaître quand on le souhaite.
Cette fenêtre prend tout l'écran, on peut en modifier les dimensions et les positions.
nom = "fenetre1" # nom de la fenêtre à modifier x = 32 # position x de la fenêtre y = 32 # position y de la fenêtre width = 200 # largeur de la fenêtre height = 200 # longueur de la fenêtre redimensionner_fenetre(nom, x , y, width, height)
Ça y est la fenêtre est redimensionnée, mais on ne la voit toujours pas. On verra comment l'afficher juste après. D'abord je vais vous montrer comment afficher un texte dans cette fenêtre.
nom = "fenetre1" texte = "Super une fenêtre !" x = 0 # On peut raccourcir y = 0 # ici assez facilement en écrivant positions = [x, y] # positions = [0, 0] id = 1 # texte n°1 (il faut préciser l'id du texte pour en afficher # plusieurs sur la même fenêtre texte_fenetre(nom, texte, positions, id)
texte_fenetre("fenetre1", "Super une fenêtre !", [0, 0], 1)
Là le code que l'on écrit va écrire dans la fenêtre "fenetre1" le texte Super une fenêtre ! aux positions x: 0 et y: 0; en modifiant x on décale le texte horizontalement et y, verticalement.
- Mouais, pas terrible tous ça je vois rien! - Attends j'y viens... juste après t'avoir montré comment on affiche une icone
nom = "fenetre1" nom_icone = "001-Weapon01" # c'est le nom de l'icone présent dans les rtp de xp. positions = [0, 32] # ce sont les positions x et y de l'icône. id = 1 # icône numéro 1, fonctionne comme pour le texte. icone_fenetre(nom, nom_icone, positions, id)
Voilà la fenêtre s'affiche mais pas à 35%! (C'est pas visible mais je le sais ) J'ai fait exprès une erreur (enfin erreur est un grand mot). Quand on tente d'afficher une fenêtre avec une opacité inférieur à 100, et pas 100% je change automatiquement celle-ci à 100 (Pour bien marquer la différence entre une fenêtre cachée et affichée, car on peut cacher une fenêtre en lui laissant une opacité supérieure à 0 et inférieure à 50. Oui cacher n'est pas forcément le bon terme mais bon. Résumons, le code aurait pu s'écrire:
Bon pour l'instant la fenêtre ne s'efface pas car on a pas dit de la supprimer. Je vous laisse avec une liste des méthodes qui peuvent servir. J'en ajouterais bien sûr car le code n'est pas terminé.
Vous vous en êtes peut-être pas rendu compte mais vous avez fait du ruby! C'est bien hein?
Liste des méthodes:
Les astérisques(*) désignent des champs facultatifs.
creer_fenetre(nom) Permet de créer une fenêtre. nom: lettres entre guillemets
afficher_fenetre(nom, opacité*) Permet d'afficher une fenêtre. nom: lettres entre guillemets opacité: nombre
cacher_fenetre(nom, opacité*) Permet de cacher une fenêtre et son contenu. nom: lettres entre guillemets opacité: nombre
cacher_fenetreW(nom, opacité*) Permet de cacher uniquement la fenêtre et d'en voir le contenu. nom: lettres entre guillemets opacité: nombre
cacher_fenetreC(nom, opacité*) Permet de cacher uniquement le contenu d'une fenêtre. nom: lettres entre guillemets opacité: nombre
hauteur_fenetre(nom, hauteur) Permet de régler la priorité d'affichage d'une fenêtre; sa hauteur. nom: lettres entre guillemets hauteur: nombre
actualiser_fenetre(nom) Permet de mettre à jour une fenêtre. Très important pour certaines méthodes, gère tous ce qui varie dans la fenêtre, temps, jeux d'opacité etc, donc à ne pas oublier /!\ nom: lettres entre guillemets
supprimer_fenetre(nom) Permet de supprimer une fenêtre. nom: lettres entre guillemets
redimensionner_fenetre(nom, x, y, width, height) Permet de redimensionner et déplacer la fenêtre. nom: lettres entre guillemets x, y, width, height: nombre
texte_fenetre(nom, texte, positions*, id*) Permet d'afficher un texte dans une fenêtre. nom: lettres entre guillemets texte: lettres entre guillemets positions: tableau id: nombre
icone_fenetre(nom, nom_icone, positions*, id*) Permet d'afficher une icône dans une fenêtre. nom: lettres entre guillemets nom_icone: lettres entre guillemets positions: tableau id: nombre
perso_fenetre(nom, id_personnage, positions*, id*) Permet d'afficher le charas d'un personnage selon sa position dans l'équipe. nom: lettres entre guillemets. id_personnage: nombre positions: tableau id: nombre
bddperso_fenetre(nom, id_personnage, positions*, id*) Permet d'afficher le charas d'un personnage selon son id dans la base de données. nom: lettres entre guillemets id_personnage: nombre positions: tableau id: nombre
image_fenetre(nom, nom_image, positions*, id*) Permet d'afficher une image du dossier Pictures. nom: lettres entre guillemets nom_image: lettres entre guillemets positions: tableau id: nombre
variable_fenetre(nom, id_variable, positions*, id*) Permet d'afficher la valeur d'une variable. nom: lettres entre guillemets id_variable: nombre positions: tableau id: nombre
monnaie_fenetre(nom, positions) Permet d'afficher le montant d'argent possédé. nom: lettres entre guillemets positions: tableau
pas_fenetre(nom, positions) Permet d'afficher le nombre de pas. nom: lettres entre guillemets positions: tableau
temps_fenetre(nom, positions) Permet d'afficher le temps de jeu. nom: lettres entre guillemets positions: tableau
bloquer_le_heros Permet de bloquer les mouvements du héros.
debloquer_le _heros Permet de débloquer les mouvements du héros.
# ============================================================================== # Window_Base # ============================================================================== class Window_Base < Window # -------------------------------- # draw_icon # -------------------------------- def draw_one_icon(name, pos=[0, 0]) self.contents.clear bitmap = RPG::Cache.icon(name) x = pos[0] ; y = pos[1] cw = bitmap.width ; ch = bitmap.height src_rect = Rect.new(0, 0, cw, ch) self.contents.blt(x, y, bitmap, src_rect) end # -------------------------------- # draw_picture # -------------------------------- def draw_one_picture(name, pos=[0, 0]) bitmap = RPG::Cache.picture(name) x = pos[0] ; y = pos[1] cw = bitmap.width ; ch = bitmap.height src_rect = Rect.new(0, 0, cw, ch) self.contents.blt(x, y, bitmap, src_rect) end end
# ============================================================================== # Fenetre_Text # ============================================================================== class Fenetre_Text < Window_Base def initialize(x, y, width, height) super(x, y, width, height) self.contents = Bitmap.new(width - 32, height - 32) $fontface = "Arial" if defined?($fontface).nil? $fontsize = 18 if defined?($fontsize).nil? self.contents.font.name = $fontface self.contents.font.size = $fontsize self.opacity = 0 end def set_text(text, pos) self.contents.clear self.contents.draw_text(pos[0], pos[1], self.width-32, 24, text) end def update end end
# ============================================================================== # Fenetre_Icon # ============================================================================== class Fenetre_Icon < Window_Base def initialize(x, y, width, height) super(x, y, width, height) self.contents = Bitmap.new(width - 32, height - 32) $fontface = "Arial" if defined?($fontface).nil? $fontsize = 18 if defined?($fontsize).nil? self.contents.font.name = $fontface self.contents.font.size = $fontsize self.opacity = 0 end end
# ============================================================================== # Fenetre_Var # ============================================================================== class Fenetre_Var < Window_Base def initialize(x, y, width, height) super(x, y, width, height) self.contents = Bitmap.new(width - 32, height - 32) $fontface = "Arial" if defined?($fontface).nil? $fontsize = 18 if defined?($fontsize).nil? self.contents.font.name = $fontface self.contents.font.size = $fontsize self.opacity = 0 end def update(nom, id) pos = $fenetre["#{nom}Variable#{id}Pos"] id_variable = $fenetre["#{nom}Variable#{id}id"] variable = $game_variables[id_variable] self.contents.clear self.contents.draw_text(pos[0], pos[1], self.width-32, 24, variable.to_s) end end
# ============================================================================== # Auteur: Bad_maker # ----------------- # Quelques méthodes qui permettent aux makers sans connaitre le vocabulaire # du ruby et ainsi gagner du temps sur mes menus customisés etc... # ============================================================================== def creer_fenetre(nom) $fenetre = Hash.new if $fenetre == nil $fenetre[nom] = Window_Base.new(0,0,640,480) width = $fenetre[nom].width height = $fenetre[nom].height $fenetre[nom].contents = Bitmap.new(width - 32, height - 32) $fontface = "Arial" if defined?($fontface).nil? $fontsize = 18 if defined?($fontsize).nil? $fenetre[nom].contents.font.name = $fontface $fenetre[nom].contents.font.size = $fontsize $fenetre[nom].opacity = 0 end def afficher_fenetre(nom, opacity = 255) opacity = 100 if opacity < 100 $fenetre[nom].opacity = opacity $fenetre[nom].contents_opacity = 255 end def cacher_fenetre(nom, opacity = 0) opacity = 50 if opacity > 50 $fenetre[nom].opacity = opacity $fenetre[nom].contents_opacity = opacity end def cacher_fenetreW(nom, opacity = 0) opacity = 50 if opacity > 50 $fenetre[nom].opacity = opacity for i in 1..50 if $fenetre["#{nom}Text#{i}"] != nil $fenetre["#{nom}Text#{i}"].opacity = opacity end if $fenetre["#{nom}Icon#{i}"] != nil $fenetre["#{nom}Icon#{i}"].opacity = opacity end if $fenetre["#{nom}Charas#{i}"] != nil $fenetre["#{nom}Charas#{i}"].opacity = opacity end if $fenetre["#{nom}bddCharas#{i}"] != nil $fenetre["#{nom}bddCharas#{i}"].opacity = opacity end if $fenetre["#{nom}Picture#{i}"] != nil $fenetre["#{nom}Picture#{i}"].opacity = opacity end if $fenetre["#{nom}Variable#{i}"] != nil $fenetre["#{nom}Variable#{i}"].opacity = opacity end end if $fenetre["#{nom}Playtime"] != nil $fenetre["#{nom}Playtime"].opacity = opacity end if $fenetre["#{nom}Gold"] != nil $fenetre["#{nom}Gold"].opacity = opacity end if $fenetre["#{nom}Steps"] != nil $fenetre["#{nom}Steps"].opacity = opacity end end def cacher_fenetreC(nom, opacity = 0) opacity = 50 if opacity > 50 $fenetre[nom].contents_opacity = opacity for i in 1..50 if $fenetre["#{nom}Text#{i}"] != nil $fenetre["#{nom}Text#{i}"].contents_opacity = opacity end if $fenetre["#{nom}Icon#{i}"] != nil $fenetre["#{nom}Icon#{i}"].opacity = opacity end if $fenetre["#{nom}Charas#{i}"] != nil $fenetre["#{nom}Charas#{i}"].opacity = opacity end if $fenetre["#{nom}bddCharas#{i}"] != nil $fenetre["#{nom}bddCharas#{i}"].opacity = opacity end if $fenetre["#{nom}Picture#{i}"] != nil $fenetre["#{nom}Picture#{i}"].opacity = opacity end if $fenetre["#{nom}Variable#{i}"] != nil $fenetre["#{nom}Variable#{i}"].opacity = opacity end end if $fenetre["#{nom}Playtime"] != nil $fenetre["#{nom}Playtime"].opacity = opacity end if $fenetre["#{nom}Gold"] != nil $fenetre["#{nom}Gold"].opacity = opacity end if $fenetre["#{nom}Steps"] != nil $fenetre["#{nom}Steps"].opacity = opacity end end def hauteur_fenetre(nom, z) ; $fenetre[nom].z = z ; end def actualiser_fenetre(nom) for i in 1..50 $fenetre[nom].update if $fenetre["#{nom}Text#{i}"] != nil $fenetre["#{nom}Text#{i}"].update end if $fenetre["#{nom}Icon#{i}"] != nil $fenetre["#{nom}Icon#{i}"].update end if $fenetre["#{nom}Charas#{i}"] != nil $fenetre["#{nom}Charas#{i}"].update end if $fenetre["#{nom}bddCharas#{i}"] != nil $fenetre["#{nom}bddCharas#{i}"].update end if $fenetre["#{nom}Picture#{i}"] != nil $fenetre["#{nom}Picture#{i}"].update end if $fenetre["#{nom}Variable#{i}"] != nil $fenetre["#{nom}Variable#{i}"].update(nom, i) end end if $fenetre["#{nom}Playtime"] != nil $fenetre["#{nom}Playtime"].update end if $fenetre["#{nom}Gold"] != nil $fenetre["#{nom}Gold"].refresh end if $fenetre["#{nom}Steps"] != nil $fenetre["#{nom}Steps"].refresh end end def supprimer_fenetre(nom) $fenetre[nom].dispose $fenetre[nom] = nil end def redimensionner_fenetre(nom, x, y, width, height) $fenetre[nom] = nil $fenetre[nom] = Window_Base.new(x, y, width, height) $fenetre[nom].contents = Bitmap.new(width - 32, height - 32) $fenetre[nom].contents.font.name = $fontface $fenetre[nom].contents.font.size = $fontsize end def texte_fenetre(nom, texte, pos = [0, 0], id = 1) x = $fenetre[nom].x y = $fenetre[nom].y width = $fenetre[nom].width height = $fenetre[nom].height if $fenetre[nom+"Text"+id.to_s] == nil $fenetre["#{nom}Text#{id}"] = Fenetre_Text.new(x, y, width, height) end $fenetre["#{nom}Text#{id}"].set_text(texte, pos) $fenetre["#{nom}Text#{id}"].z = $fenetre[nom].z+1 end def icone_fenetre(nom, nom_icone, pos = [0, 0], id = 1) x = $fenetre[nom].x y = $fenetre[nom].y width = $fenetre[nom].width height = $fenetre[nom].height if $fenetre[nom+"Icon"+id.to_s] == nil $fenetre["#{nom}Icon#{id}"] = Fenetre_Icon.new(x, y, width, height) end $fenetre["#{nom}Icon#{id}"].draw_one_icon(nom_icone, pos) $fenetre["#{nom}Icon#{id}"].z = $fenetre[nom].z+1 $fenetre["#{nom}Icon#{id}"].opacity = $fenetre[nom].opacity end def perso_fenetre(nom, id_heros, pos = [0, 0], id = 1) actor = $game_party.actors[id_heros] x = $fenetre[nom].x y = $fenetre[nom].y width = $fenetre[nom].width height = $fenetre[nom].height if $fenetre[nom+"Charas"+id.to_s] == nil $fenetre["#{nom}Charas#{id}"] = Fenetre_Icon.new(x, y, width, height) end $fenetre["#{nom}Charas#{id}"].draw_actor_graphic(actor, pos[0]+16, pos[1]+48) $fenetre["#{nom}Charas#{id}"].z = $fenetre[nom].z+1 $fenetre["#{nom}Charas#{id}"].opacity = $fenetre[nom].opacity end def bddperso_fenetre(nom, id_heros, pos = [0, 0], id = 1) actor = $game_actors[id_heros] x = $fenetre[nom].x y = $fenetre[nom].y width = $fenetre[nom].width height = $fenetre[nom].height if $fenetre[nom+"bddCharas"+id.to_s] == nil $fenetre["#{nom}bddCharas#{id}"] = Fenetre_Icon.new(x, y, width, height) end $fenetre["#{nom}bddCharas#{id}"].draw_actor_graphic(actor,pos[0]+16,pos[1]+48) $fenetre["#{nom}bddCharas#{id}"].z = $fenetre[nom].z+1 $fenetre["#{nom}bddCharas#{id}"].opacity = $fenetre[nom].opacity end def image_fenetre(nom, nom_image, pos = [0, 0], id = 1) x = $fenetre[nom].x y = $fenetre[nom].y width = $fenetre[nom].width height = $fenetre[nom].height if $fenetre[nom+"Picture"+id.to_s] == nil $fenetre["#{nom}Picture#{id}"] = Fenetre_Icon.new(x, y, width, height) end $fenetre["#{nom}Picture#{id}"].draw_one_picture(nom_image, pos) $fenetre["#{nom}Picture#{id}"].z = $fenetre[nom].z+1 $fenetre["#{nom}Picture#{id}"].opacity = $fenetre[nom].opacity end def variable_fenetre(nom, id_variable, pos = [0, 0], id = 1) x = $fenetre[nom].x y = $fenetre[nom].y width = $fenetre[nom].width height = $fenetre[nom].height if $fenetre[nom+"Variable"+id.to_s] == nil $fenetre["#{nom}Variable#{id}"] = Fenetre_Var.new(x, y, width, height) end $fenetre["#{nom}Variable#{id}"].z = $fenetre[nom].z+1 $fenetre["#{nom}Variable#{id}"].opacity = $fenetre[nom].opacity $fenetre["#{nom}Variable#{id}id"] = id_variable $fenetre["#{nom}Variable#{id}Pos"] = pos $fenetre["#{nom}Variable#{id}"].update(nom, id) end def monnaie_fenetre(nom, pos = [0, 0]) $fenetre["#{nom}Gold"] = Window_Gold.new $fenetre["#{nom}Gold"].x = $fenetre[nom].x+pos[0] $fenetre["#{nom}Gold"].y = $fenetre[nom].y+pos[1]-4 $fenetre["#{nom}Gold"].z = $fenetre[nom].z+1 $fenetre["#{nom}Gold"].opacity = 0 end def pas_fenetre(nom, pos = [0, 0]) $fenetre["#{nom}Steps"] = Window_Steps.new $fenetre["#{nom}Steps"].x = $fenetre[nom].x+pos[0] $fenetre["#{nom}Steps"].y = $fenetre[nom].y+pos[1]-4 $fenetre["#{nom}Steps"].z = $fenetre[nom].z+1 $fenetre["#{nom}Steps"].opacity = 0 end def temps_fenetre(nom, pos = [0, 0]) $fenetre["#{nom}Playtime"] = Window_PlayTime.new $fenetre["#{nom}Playtime"].x = $fenetre[nom].x+pos[0] $fenetre["#{nom}Playtime"].y = $fenetre[nom].y+pos[1] $fenetre["#{nom}Playtime"].z = $fenetre[nom].z+1 $fenetre["#{nom}Playtime"].opacity = 0 end def bloquer_le_heros $game_temp.message_window_showing = true end def debloquer_le_heros $game_temp.message_window_showing = false end
J'ajouterais d'autres méthodes en simplifiant le plus possible les codes, du mieux que je puisse faire en tous cas.
A venir: Afficher un charas selon sa place dans l'équipe fait Afficher une image (picture) fait Afficher un charas selon sa place dans la base de données fait Afficher une variable fait Afficher le montant d'argent fait Afficher le nombre de pas fait Afficher le temps de jeu fait Afficher le nom de la map Condition d'appel des méthodes simplifié Projet abandonné.
Effectivement, les possibilités sont encore limitées, mais en tout cas, c'est en bonne voie. Ça devrait permettre plein de trucs (huds, menus) une fois fini. Utile pour ceux qui n'aiment pas trop se prendre la tête avec les événements.
Merci du partage.
_________________ « Travailler en collaboration, cela veut dire prendre la moitié de son temps à expliquer aux autres que leurs idées sont stupides. » - Georges Molinski
« J'adore aider les gens mais je deteste aider des personnes qui n'en valent pas la peine. » - Lidenvice
Ya pas encore suffisament de possibilité pour que ce soit réellement utile comme tu l'as dit, mais en tout cas je suis persuader qu'une fois un peu plus développer ça sera très utile à quelqu'un de très mauvais en ruby comme moi. Merci ^^
J'ai éditer le post, j'ai ajouté deux fonctions bien utile. cacher_fenetreW et cacher_fenetreC. On peut soit cacher les contents soit le fond de la fenêtre. J'ai testé un début de HUD custom. J'ai rajouté d'autres petits trucs à faire en passant.
J'ai regardé et testé le script. L'idée de créer une petite API pour créer des fenêtres est bonne, pas seulement pour les débutants.
Concernant les fonctions, je n'ai pas grand chose à rajouter. Nous avons le minimum pour afficher une fenêtre. Peut être mettre le nom des fonctions en anglais, si souhaites faire partager le script à des utilisateurs non francophone. Mais ça, c'est toi qui voit
J'ai donc regarder le code et j'ai plusieurs remarques à faire.
1) Lorsque j'ai testé, j'ai une erreur à cause des variables $fontface et $fonsize. C'est dû à certaines versions de RMXP qui ne possèdent pas ces variables par défaut. Je te suggère donc de mettre ces lignes en entête de ton script :
$fontface = "Arial" if defined?($fontface).nil? $fontsize = 18 if defined?($fontsize).nil?
2) J'ai vu que tu as codé de façon procédurale et non orientée objet pour le côté de l'API. On sort du concept des scripts de RMXP qui utilise la POO. Surtout, que tu utilises une variable globale "$fenetre" pour stocker les différentes fenêtres créées. Si tu veux garder le côté procédurale, il est sûrement plus judicieux de faire :
RPG Creator permet de créer des RPG ou MMORPG sans aucune connaissance en programmation et de jouer au jeu sur les tablettes tactiles, Smartphones et navigateurs Web. Disponible le 4 Juin
J'y ai pensé, mais j'avais peur d'effrayer les makers français non anglophone c'est pour ça qu'il y a un mix anglais français dans le script ^^'. Je vais quand même essayer en anglais, on verra bien.
Samarium a écrit:
2) J'ai vu que tu as codé de façon procédurale et non orientée objet pour le côté de l'API. On sort du concept des scripts de RMXP qui utilise la POO. Surtout, que tu utilises une variable globale "$fenetre" pour stocker les différentes fenêtres créées. Si tu veux garder le côté procédurale, il est sûrement plus judicieux de faire :
Code: Tout sélectionner def creer_fenetre(nom) return Window_EasyWindows.new(nom) end
J'ignorais que "return" permettait de renvoyer autre choses que des valeurs. Cette manière à l'air beaucoup plus légère, (j'ai appris le ruby en piochant des infos à droite à gauche donc il n'est pas très beau on va dire ). Je vais essayer d'améliorer ça dans la prochaine version.
Utilisateurs parcourant actuellement ce forum : Aucun utilisateur inscrit et 2 invités
Vous ne pouvez pas publier de nouveaux sujets dans ce forum Vous ne pouvez pas répondre aux sujets dans ce forum Vous ne pouvez pas éditer vos messages dans ce forum Vous ne pouvez pas supprimer vos messages dans ce forum Vous ne pouvez pas insérer de pièces jointes dans ce forum