|
|
| [TUTO] VOTRE Menu (choix + fenêtre + fond) | |
| Auteur | Message |
---|
3dwardMatière
Messages : 144 Age : 32 Date d'inscription : 03/08/2008
Caractéristiques du membre Evolution: Atome Job: Scripts XP: (20/20)
| Sujet: [TUTO] VOTRE Menu (choix + fenêtre + fond) Jeu 28 Aoû 2008 - 7:26 | |
| Bonjour à tous ^^ [AVANT-PROPOS] Comme promis précédemment, je me devais de vous faire un cours sur une scene personnalisée. Alors aujourd'hui, je vous propose une scene qui incorporera une fenêtre quelconque, que vous ferez de vous même si vous voulez. [C'est surtout pour voir comment ajouter une fenêtre dans une scene] Pour cela, je vous prie de vous reporter au cours en question, pour voir comment créer une fenêtre. On insèrera également un choix, pour ça, je ne ferais qu'une copie de mon précédent tuto, auquel je vous renvoie ! Et enfin, on ajoutera un fond qui sera, soit une image fixe, comme ça on pourra voir comment en mettre une, soit la map, ce qui est franchement de tout le plus simple et pourtant, si recherché ^^ Bien bien, après vous avoir exposé les faits, commençons. [/AVANT-PROPOS] Dans l'ordre : La scene avec le choix intégré ^^ [Ce cours ce voudra être un récapitulatif des précédents, il vous permet de faire un menu en quelque sorte !] La scene de base :- Spoiler:
Comme promis, on reprend l'ancienne pour ajouter le choix [si vous en voulez une vide allez dans le Tuto Une Scene et partez de la scene exposée dans celui-ci] : - Code:
-
class Scene_xxx def main s1 = "xxx" s2 = "xxx" s3 = "xxx" @command_window = Window_Command.new(160,[s1, s2, s3]) @command_window.back_opacity = 100 @command_window.y = 0 @command_window.x = 0 @command_window.active = true @command_window.visible = false Graphics.transition loop do Graphics.update Input.update update if $scene != self break end end Graphics.freeze @command_window.dispose
end
def update @command_window.update
if Input.trigger?(Input::C) case @command_window.index when 0 $game_system.se_play($data_system.validation_se) $scene = Scene_xxxx.new when 1 $game_system.se_play($data_system.validation_se) $scene = Scene_xxxxx.new when 2 $game_system.se_play($data_system.validation_se) $scene = Scene_xxxxxx.new end end
if Input.trigger?(Input::B) $game_system.se_play($data_system.cancel_se) $scene = Scene_xx.new return end
end end J'ai effacé les sprites pour l'instant, c'est notre base, la suite dans le spoiler suivant
Bien maintenant qu'on connait notre base dont le fonctionnement a déjà été décrit, passons à la suite soit : Insérer une fenêtre:- Spoiler:
Bien, on avait déjà rapidement vu ça, quand on avait ajouté le choix, revoyons donc la chose : D'abord, il faut initialiser la fenêtre et l'intégrer à la scene. Nous passons donc à ce code-ci : - Code:
-
class Scene_xxx def main s1 = "xxx" s2 = "xxx" s3 = "xxx" @command_window = Window_Command.new(160,[s1, s2, s3]) @command_window.back_opacity = 100 @command_window.y = 0 @command_window.x = 0 @command_window.active = true @command_window.visible = false
@fenetre = Window_Vide.new # <= Ici on initialise la fenêtre dans la variable @fenetre @fenetre.x = 0 # <= Ici on définit sa position x @fenetre.y = 0 # <= Ici on définit sa position y Graphics.transition loop do Graphics.update Input.update update if $scene != self break end end Graphics.freeze @command_window.dispose
end
def update @command_window.update
if Input.trigger?(Input::C) case @command_window.index when 0 $game_system.se_play($data_system.validation_se) $scene = Scene_xxxx.new when 1 $game_system.se_play($data_system.validation_se) $scene = Scene_xxxxx.new when 2 $game_system.se_play($data_system.validation_se) $scene = Scene_xxxxxx.new end end
if Input.trigger?(Input::B) $game_system.se_play($data_system.cancel_se) $scene = Scene_xx.new return end
end end Qu'est-ce qui a changé ? D'abord dans le main, on a rajouté : - Code:
-
@fenetre = Window_Vide.new @fenetre.x = 0 @fenetre.y = 0 Je vous explique ce que c'est : D'abord, on crée la fenêtre qu'on enregistre dans @fenetre avec - Code:
-
@fenetre = Window_Vide.new On appele, comme vous l'aurez compris, Window_Vide. À savoir, on appelera toujours une fenêtre comme une scene avec la méthode .new, pour une fenêtre, elle lance l'initialize, pour une scene, le main. Donc pour une fenêtre quelconque ici celle que nous avons créé qui a pour class Window_Vide, nous l'appelons en tapant Window_Vide.new Maintenant, on ajoute le dispose et l'update à leurs places ce qui nous donne : - Code:
-
class Scene_xxx def main s1 = "xxx" s2 = "xxx" s3 = "xxx" @command_window = Window_Command.new(160,[s1, s2, s3]) @command_window.back_opacity = 100 @command_window.y = 0 @command_window.x = 0 @command_window.active = true @command_window.visible = false
@fenetre = Window_Vide.new @fenetre.x = 0 @fenetre.y = 0 Graphics.transition loop do Graphics.update Input.update update if $scene != self break end end Graphics.freeze @command_window.dispose @fenetre.dispose # <= Notre dispose
end
def update @command_window.update @fenetre.update # <= Notre update
if Input.trigger?(Input::C) case @command_window.index when 0 $game_system.se_play($data_system.validation_se) $scene = Scene_xxxx.new when 1 $game_system.se_play($data_system.validation_se) $scene = Scene_xxxxx.new when 2 $game_system.se_play($data_system.validation_se) $scene = Scene_xxxxxx.new end end
if Input.trigger?(Input::B) $game_system.se_play($data_system.cancel_se) $scene = Scene_xx.new return end
end end Grâce à ça, la fenêtre se fermera avec la scene (dispose) et elle sera mise à jour régulièrement (update). [Si on crée dans la fenêtre une méthode update custom, elle sera effectuée à chaque fois que la scene update.]
Maintenant que nous avons ajouté notre fenêtre, que nous avons celle avec nos choix (insérée à la base), Nous pouvons continuer pour ajouter en fond, une image ou la map. D'abord : Afficher la Map pour fond d'une scene :- Spoiler:
Comment faire alors pour afficher la map au fond d'une scene ? C'est très simple : D'abord, on doit initialiser dans le main le Spriteset_Map Ensuite, faire un update et un dispose, et le tour est joué ^^ Bien, donc pour cet exemple, j'ajoute d'abord le Spriteset_Map à la suite des différentes fenêtres comme ceci : - Code:
-
class Scene_xxx def main s1 = "xxx" s2 = "xxx" s3 = "xxx" @command_window = Window_Command.new(160,[s1, s2, s3]) @command_window.back_opacity = 100 @command_window.y = 0 @command_window.x = 0 @command_window.active = true @command_window.visible = false
@fenetre = Window_Vide.new @fenetre.x = 0 @fenetre.y = 0 @spriteset = Spriteset_Map.new # <= Le fameux Spriteset_Map initialisé dans la variable @spriteset [Hum, c'est juste une parti découpée, évidemment, vous ajoutez la dernière ligne à votre scene si vous avez tout suivi ^^] Ensuite, je place le dispose et l'update : - Code:
-
Graphics.freeze @command_window.dispose @fenetre.dispose @spriteset.dispose # <= Notre dispose - Code:
-
def update @command_window.update @fenetre.update @spriteset.update # <= Notre update Encore une fois, vous devez ajouter la ligne à la suite des autres, surtout pas recopier ces petits extraits du code complet ^^
Si on préfère afficher une image en fond :- Spoiler:
ça tourne toujours au même ^^ D'abord, on crée le sprite et le bitmap du sprite (comme pour afficher une image dans le menu avec images précédemment présenté) - Code:
-
class Scene_xxx def main
@sprite = Sprite.new # <= On crée un Sprite dans la variable @sprite @sprite.bitmap = RPG::Cache.picture("nom_de_limage") # <= On définit pour bitmap du sprite de la variable @sprite l'image dans le dossier pictures portant le nom nom_de_limage s1 = "xxx" s2 = "xxx" s3 = "xxx" @command_window = Window_Command.new(160,[s1, s2, s3]) @command_window.back_opacity = 100 @command_window.y = 0 @command_window.x = 0 @command_window.active = true @command_window.visible = false
@fenetre = Window_Vide.new @fenetre.x = 0 @fenetre.y = 0
Ensuite, on crée le dispose : - Code:
-
Graphics.freeze @command_window.dispose @fenetre.dispose @sprite.bitmap.dispose # <= On dispose l'image @sprite.dispose # <= On dispose le sprite Et l'update, cette fois-ci, on ne le fait pas ! Car l'image ne change pas ^^ Enfin, dernière étape importante, définir les superpositions ^^ On a ça : - Code:
-
class Scene_xxx def main
@sprite = Sprite.new @sprite.bitmap = RPG::Cache.picture("nom_de_limage") s1 = "xxx" s2 = "xxx" s3 = "xxx" @command_window = Window_Command.new(160,[s1, s2, s3]) @command_window.back_opacity = 100 @command_window.y = 0 @command_window.x = 0 @command_window.active = true @command_window.visible = false
@fenetre = Window_Vide.new @fenetre.x = 0 @fenetre.y = 0
On va rajouter les z un peu partout, pas pour nous rappeler Zorro, juste pour s'occuper de superposer correctement les fenêtres et sprites ^^ Voici donc le système : plus le z est grand, plus la fenêtre est haute, et inversement évidemment. Donc ici, en fond, on va placer le sprite et ensuite au même niveau juste au dessus les fenêtres, voici donc le résultat, je vous laisse réfléchir à comment ça fonctionne ^^ - Code:
-
class Scene_xxx def main
@sprite = Sprite.new @sprite.bitmap = RPG::Cache.picture("nom_de_limage") @sprite.z = 0 # <= On définit un z égal à 0, le plus bas possible s1 = "xxx" s2 = "xxx" s3 = "xxx" @command_window = Window_Command.new(160,[s1, s2, s3]) @command_window.back_opacity = 100 @command_window.y = 0 @command_window.x = 0 @command_window.active = true @command_window.visible = false @command_window.z = 1 # <= On définit un z égal à 1 donc supérieur à 0 donc plus haut que le fond
@fenetre = Window_Vide.new @fenetre.x = 0 @fenetre.y = 0 @fenetre.z = 1 # <= On définit un z égal à 1 donc supérieur à 0 donc plus haut que le fond
Voilà voilà, ce cours s'achève, je vous laisse faire des essais, j'espère que vous aurez compris ce qui a été fait ! Vous pouvez maintenant faire vos petits choix, insérer des fenêtres, gérer la superposition et tout ça ^^ J'espère que ça vous sera utile. D'ailleurs, vous avez aussi un peu de notions, donc vous pouvez modifier des scenes pré-existantes à vous limitant à ce que vous pouvez comprendre ^^ 3dward. |
| | | paturauxAtome
Messages : 21 Age : 31 Date d'inscription : 10/07/2008
| Sujet: Re: [TUTO] VOTRE Menu (choix + fenêtre + fond) Jeu 28 Aoû 2008 - 9:25 | |
| Bon beh je dois dire MERCI ! PS : J'ai hate que fasse le tutoriel pour savoir comment mettre un point de départ dans le script ! |
| | | 3dwardMatière
Messages : 144 Age : 32 Date d'inscription : 03/08/2008
Caractéristiques du membre Evolution: Atome Job: Scripts XP: (20/20)
| Sujet: Re: [TUTO] VOTRE Menu (choix + fenêtre + fond) Jeu 28 Aoû 2008 - 10:03 | |
| Ah oui, c'est vrai, faisons une extension ^^ Ajouter une commande pour les choix :- Spoiler:
Je partirais de la scene avec la map en fond. Je vous propose d'ajouter une commande pour la route ^^ Histoire de commencer à entrevoir comment insérer des commandes. Pour cet exemple, je vais proposer de téléporter le joueur sur la carte à l'endroit voulu (je ne sais pas si c'est ce que tu entends par point de départ..) On utilisera mon script personnel ^^ Nous avons donc notre scene : - Code:
-
class Scene_xxx def main s1 = "xxx" s2 = "xxx" s3 = "xxx" @command_window = Window_Command.new(160,[s1, s2, s3]) @command_window.back_opacity = 100 @command_window.y = 0 @command_window.x = 0 @command_window.active = true @command_window.visible = false
@fenetre = Window_Vide.new @fenetre.x = 0 @fenetre.y = 0 @spriteset = Spriteset_Map.new
Graphics.transition loop do Graphics.update Input.update update if $scene != self break end end Graphics.freeze @command_window.dispose @fenetre.dispose @spriteset.dispose
end
def update @command_window.update @fenetre.update @spriteset.update
if Input.trigger?(Input::C) case @command_window.index when 0 $game_system.se_play($data_system.validation_se) $scene = Scene_xxxx.new when 1 $game_system.se_play($data_system.validation_se) $scene = Scene_xxxxx.new when 2 $game_system.se_play($data_system.validation_se) $scene = Scene_xxxxxx.new end end
if Input.trigger?(Input::B) $game_system.se_play($data_system.cancel_se) $scene = Scene_xx.new return end
end end Maintenant, je vais ajouter ma méthode "teleporter(x,y,map_id,fondue,direction)" Pour cela, c'est très simple, avant le dernier end du script qui ferme la class, je vais insérer le def teleporter(x,y,map_id,fondue,direction) Ainsi, dans le script on pourra appeler la méthode teleporter... Voici donc ce que ça donne : - Code:
-
class Scene_xxx def main s1 = "xxx" s2 = "xxx" s3 = "xxx" @command_window = Window_Command.new(160,[s1, s2, s3]) @command_window.back_opacity = 100 @command_window.y = 0 @command_window.x = 0 @command_window.active = true @command_window.visible = false
@fenetre = Window_Vide.new @fenetre.x = 0 @fenetre.y = 0 @spriteset = Spriteset_Map.new
Graphics.transition loop do Graphics.update Input.update update if $scene != self break end end Graphics.freeze @command_window.dispose @fenetre.dispose @spriteset.dispose
end
def update @command_window.update @fenetre.update @spriteset.update
if Input.trigger?(Input::C) case @command_window.index when 0 $game_system.se_play($data_system.validation_se) $scene = Scene_xxxx.new when 1 $game_system.se_play($data_system.validation_se) $scene = Scene_xxxxx.new when 2 $game_system.se_play($data_system.validation_se) $scene = Scene_xxxxxx.new end end
if Input.trigger?(Input::B) $game_system.se_play($data_system.cancel_se) $scene = Scene_xx.new return end
end
def teleporter(x,y,map_id,fondue,direction=0)
$game_temp.player_transferring = true
$game_temp.player_new_map_id = map_id $game_temp.player_new_x = x $game_temp.player_new_y = y $game_temp.player_new_direction = direction
if fondue = true Graphics.freeze $game_temp.transition_processing = true $game_temp.transition_name = "" end $scene = Scene_Map.new
end end Enfin, il me reste à appeler la méthode à un moment ou un autre. Donc pour cela, je vais choisir de changer le troisième choix, notre s3. Déjà, je vais l'appeler "téléporter" et ensuite lui associer la méthode de téléport ^^ - Code:
-
class Scene_xxx def main s1 = "xxx" s2 = "xxx" s3 = "Téléporter" # <= J'ai changé la chaîne de caractère pour "Téléporter" @command_window = Window_Command.new(160,[s1, s2, s3]) @command_window.back_opacity = 100 @command_window.y = 0 @command_window.x = 0 @command_window.active = true @command_window.visible = false
@fenetre = Window_Vide.new @fenetre.x = 0 @fenetre.y = 0 @spriteset = Spriteset_Map.new
Graphics.transition loop do Graphics.update Input.update update if $scene != self break end end Graphics.freeze @command_window.dispose @fenetre.dispose @spriteset.dispose
end
def update @command_window.update @fenetre.update @spriteset.update
if Input.trigger?(Input::C) case @command_window.index when 0 $game_system.se_play($data_system.validation_se) $scene = Scene_xxxx.new when 1 $game_system.se_play($data_system.validation_se) $scene = Scene_xxxxx.new when 2 $game_system.se_play($data_system.validation_se) teleporter(1,1,1,true,0) # <= j'ai choisi ma variable et ses arguments. end end
if Input.trigger?(Input::B) $game_system.se_play($data_system.cancel_se) $scene = Scene_xx.new return end
end
def teleporter(x,y,map_id,fondue,direction=0)
$game_temp.player_transferring = true
$game_temp.player_new_map_id = map_id $game_temp.player_new_x = x $game_temp.player_new_y = y $game_temp.player_new_direction = direction
if fondue = true Graphics.freeze $game_temp.transition_processing = true $game_temp.transition_name = "" end $scene = Scene_Map.new
end end Je n'ai pas pris l'exemple le plus simple à vrai dire, je vais vous expliquer la même chose pour utiliser la méthode command_new_game de Scene_Title par exemple ^^ On peut l'appeler à distance, dans ce cas, si Scene_Title existe toujours je n'aurais qu'à faire : $scene = Scene_Title.new.command_new_game ceci me téléportera au point de départ. Sinon je peux la copier dans le script comme précédemment décrit. Donc ici, si pour le choix trois on met le command_new_game de Scene_Title : - Code:
-
if Input.trigger?(Input::C) case @command_window.index when 0 $game_system.se_play($data_system.validation_se) $scene = Scene_xxxx.new when 1 $game_system.se_play($data_system.validation_se) $scene = Scene_xxxxx.new when 2 $game_system.se_play($data_system.validation_se) $scene = Scene_Title.new.command_new_game end end
Enfin, dernière chose, l'autre oubli de ce tutoriel : Jouer un BGM, BGS, SE ou ME :- Spoiler:
Comme vous avez pu le remarquer, j'ai oublié de parler des - Code:
-
$game_system.se_play($data_system.validation_se) par exemple ^^ Alors, je vais vous dire comment insérer un son ! C'est très simple, ça se fait toujours en une ligne ^^ Il y a quatre solutions, une par type de son. Commençons : BGM : Pour appeler un BGM, on fera : Audio.bgm_play("Audio/BGM/ficher", volume, pitch) volume étant le volume, et pitch la vitesse de lecture. Audio.bgm_play("Audio/BGM/001-Battle01",100,100) [Ici, on charge dans le dossier Audio/BGM le fichier 001-Battle01 qui va à un volume de 100 et un pitch de 100] Pour l'arrêter : Audio.bgm_stop BGS : Pour appeler un BGS, on fera : Audio.bgs_play("Audio/BGS/ficher", volume, pitch) Pour l'arrêter : Audio.bgs_stop SE : Pour appeler un SE, on fera : Audio.se_play("Audio/SE/fichier", volume, pitch) Pour l'arrêter : Audio.se_stop ME : Pour appeler un ME, on fera : Audio.me_play("Audio/ME/fichier", volume, pitch) Pour l'arrêter : Audio.me_stop Vous pouvez les mettre partout dans vos scripts, ici on voit qu'il joue le son de decision, stoqué dans "Système" dès qu'on fait un choix. [Je ne vous donne pas tous les raccourcis, ça me demanderait un temps de recherche important ^^'] Si vous voulez jouer un BGM donc pour cette scene, insérez le dans le main, juste avant le - Code:
-
@command_window = par exemple.
Voici ^^ 3dward. |
| | | Contenu sponsorisé
| Sujet: Re: [TUTO] VOTRE Menu (choix + fenêtre + fond) | |
| |
| | | | [TUTO] VOTRE Menu (choix + fenêtre + fond) | |
|
Page 1 sur 1 | |
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |
|