Zarok RPG Maker
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.



 
AccueilDernières imagesS'enregistrerConnexion

Partagez | 
 

 [Ruby/RGSS1][COURS] Custom Title System personnalisé !

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
Paran0iaK
Paran0iaK


Masculin Messages : 1101
Age : 33
Date d'inscription : 01/03/2007

Caractéristiques du membre
Evolution: Atome
Job:
XP:
[Ruby/RGSS1][COURS] Custom Title System personnalisé ! Left_bar_bleue20/20[Ruby/RGSS1][COURS] Custom Title System personnalisé ! Empty_bar_bleue  (20/20)

[Ruby/RGSS1][COURS] Custom Title System personnalisé ! Empty
MessageSujet: [Ruby/RGSS1][COURS] Custom Title System personnalisé !   [Ruby/RGSS1][COURS] Custom Title System personnalisé ! EmptyMer 30 Déc 2009 - 13:00

CUSTOM MENU SYSTEM


Salut,
Pour mon premier cours je vais vous apprendre à faire un custom menu system en Ruby/RGSS (en script en fait ^^'), le but est que vous appreniez quelques commande de Ruby et que vous utilisiez le moins d'event possible, pour éviter le plus de lag possible Wink
Alors, je vous propose de commencer de suite =D


Pour ce cour, nous allons en fait analyser certaines commandes du script de base Scene_title.
Pour mieux comprendre nous allons effacer le contenu du script Scene_title.

Ensuite vous allez collez ce bout de code, qui est indispensable au bon fonctionnement du script:

Code:
#==============================================================================
#  Scene_Title
#------------------------------------------------------------------------------
# Fait par {Votre Pseudo}
#==============================================================================

class Scene_Title
  #--------------------------------------------------------------------------
  # Initialisation
  #--------------------------------------------------------------------------
  def main
    if $BTEST
      battle_test
      return
    end
    # Chargement des fichiers
    $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

$data_actors = load_data("Data/Actors.rxdata") Les lignes de ce types sont là pour charger les différents fichiers.
$data_actor est ce que l'on appelle un variable locale, j'vous dis ça juste pour la culture nous n'en auront pas besoin pour ce tuto Wink
Remarque: Ce petit bout de code est en fait le début du script d'origine que vous venez d'effacer ^^

Vous allez me dire, "c'est bien tout ça, mais quand est-ce qu'on commence ?". Je pense qu'il est primordiale que je vous explique tout ce que je peux pour que vous puissiez savoir à quoi vous pouvez (ou ne pas) toucher dans un script Wink
Bon on va bientôt commencer, encore un petit bout de code et on entre dans le scriptage pur.

Code:
@sprite = Sprite.new
 @sprite.bitmap = RPG::Cache.title($data_system.title_name)

Ces deux lignes sont juste là pour qu'il y ait un fond dans votre écran titre, sans cela il le fond serai tout noir, vous pourrez essayer de l'enlevé à la fin du script. Ces deux lignes là aussi sont dans le script original.
Libre à vous de l'insérer ou pas dans le script final Wink

Vous allez donc pouvoir scripter maintenant en suivant mes instructions.
Donc, maintenant, on va s'intéresser aux différents choix que le joueur aura sur l'écran titre, les plus courants sont: "Nouvelle Partie", "Charger" et "Quittez le jeu".
Ce qui nous fait trois possibilités, mais sachez que vous pouvez en mettre autant que vous voulez, pour les bonus ou les crédits, je vous expliquerai plus tard comment on fait pour rediriger les choix vers d'autres script ^^

Donc, pour insérer les choix, il nous suffit d'insérer ceci à la suite de ce que vous avez déjà inséré:
Code:
s1 = "Le nom de votre choix"
s2= "Le nom de votre choix"
s3= "le nom de votre choix"
s4= "le nom de votre choix"
etc….. (Je pense que vous avez compris le principe ^^)

Ensuite, on va insérer la fenêtre de choix, mais on ne veux pas la voir (En fait, techniquement on pourrait ne pas la mettre mais il faudrait faire appelle à des variables d'instances et vous apprendriez moins de choses, donc au final on la met quand même, ne vous inquiétez pas, le résultat est le même Wink ).
Pour ceci, on ajoute la ligne:

Code:
@command_window = Window_Command.new(192, [s1, s2,s3])

Dans les crochets, vous mettez autant de "s" que vous en avez mis en haut !

Exemple: Si on met 4 choix:

Code:
s1 = "Le nom de votre choix"
s2= "Le nom de votre choix"
s3= "le nom de votre choix"
s4= "le nom de votre choix"

Alors la ligne serait:
Code:
@command_window = Window_Command.new(192, [s1, s2,s3,s4])

Après cette ligne, on ajoute les commande qui servent à régler l'opacité, ainsi que la position x (horizontale) et la position y (verticale) du cadre.

Remarque: Pour me souvenir à quoi correspond "x" et "y", je me réfère au repère (orthonormé), vue à partir de la 3eme avec x qui correspond à l'axe horizontal (axe des abscisses) et y qui correspond à l'axe vertical (axe des ordonnées), vous pouvez en faire de même si vous le voulez, surtout que ça vous évitera de confondre vos axes en physique si vous faite des études dans la section scientifique ;-)

Assez de blabla, voici le code ;-)

Code:
@command_window.back_opacity = 0
@command_window.x = 999
@command_window.y = 999

Le but du jeu, comme je vous l'ai dit plus haut, est de ne plus voir ce fameux cadre, voila pourquoi j'ai mis des chiffres très grand pour les positions x et y, et que je n'ai pas mis d'opacité Wink

Bon, puisque vous avez été sages, je vous mets le code que vous devriez avoir si vous avez bien suivis ce que j'ai dit (et si vous n'avez pas tout compris ^^').

Code:
#==============================================================================
# Scene_Title by Paran0iaK
#==============================================================================

class Scene_Title
  #--------------------------------------------------------------------------
  # Initialisation
  #--------------------------------------------------------------------------
  def main
    if $BTEST
      battle_test
      return
    end
    # Données
    $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
  @sprite = Sprite.new
    @sprite.bitmap = RPG::Cache.title($data_system.title_name)
    # Commandes
    s1 = "Nouvelle Partie"
    s2 = "Charger"
    s3 = "Quitter"
    @command_window = Window_Command.new(192, [s1, s2,s3])
    @command_window.back_opacity = 0
    @command_window.x = 999
    @command_window.y = 999

Remarque: Les lignes commençant pas des "#" sont des lignes de commentaire, c'est-à-dire que rpg maker n'y pas attention pendant qu'il lit le script, vous pouvez donc marquer ce que vous voulez dans ce lignes (éviter de marqué des choses méchantes sur les admin, vous pourriez avoir des problèmes >.<) et vous pouvez en mettre autant que vous voulez.
Je vous recommande d'ailleurs, d'en abuser et de mettre le plus de commentaire, et de conseil pour que votre script soit lisible par les autres, et pour puissiez vous y retrouvé vous-même Wink
Vous n'êtes pas obliger de les mettre, pour ce script, même si je vous le conseil.

[Ruby/RGSS1][COURS] Custom Title System personnalisé ! Important Ne chercher pas à voir le résultat, le script n'est pas complet donc vous tomberez sur une erreur !

Maintenant que les commandes sont rentré nous allons, indiquer les images que nous utiliseront pour les différents choix (Nouvelle partie, Charger, Quitter).
Pour cela, on commence par insérer la ligne suivante:

Code:
@np = Sprite.new

Vous vous demandé pourquoi il y a plein de ligne avec des "@".
Tous simplement parce que ce sont des variables d'instance. Elles seront donc accessibles tout au long de la vie de notre objet, et de n'importe quel endroit de notre objet.
En gros, cela nous permettra de les utilisés tout au long de ce script Wink
Et j'ai mis np pour nouvelle partie mais vous pouvez mettre le nom que vous voulez ^^

Code:
@np.bitmap = RPG::Cache.picture("Nom de votre image")

Cette ligne nous permet d'attribuer l'image à la variable d'instance en indiquant sont emplacement et son nom.
"picture" indique l'emplacement, (donc dans le dossier picture, vous l'aurez deviné)
Et entre guillemet il vous suffit de mettre le nom de votre image.
Et pour finir vous mettez la position de l'image…Et oui nos fameux x et y reviennent Wink
Code:
@np.x =0
@np.y = 0

[Ruby/RGSS1][COURS] Custom Title System personnalisé ! Important: _La valeur maximal de x est 640
_La valeur maximal de y est 480
Si vous dépasser ces valeurs, vos images sortirons de l'écran et vous ne les verrez pas.

Et bien voila, nous avons créé le choix Nouvelle partie.
Et il faudra le faire autant de fois que vous avez créé de choix.
Je vous le fait pour le choix "Charger".

Code:
@cp = Sprite.new
 @cp.bitmap = RPG::Cache.picture("Charger")
 @cp.x = 400
 @cp.y = 200

Maintenant à vous de le faire pour le troisième choix: "Quitter"
C'est en forgeant que l'on devient forgerons Wink
Mais ne vous inquiétez pas je vous montre ce que j'ai fait en exemple pour ceux qui sont perdu.

Code:
#==============================================================================
# Scene_Title by Paran0iaK
#==============================================================================

class Scene_Title
  #--------------------------------------------------------------------------
  # Initialisation
  #--------------------------------------------------------------------------
  def main
    if $BTEST
      battle_test
      return
    end
    # Données
    $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
  @sprite = Sprite.new
    @sprite.bitmap = RPG::Cache.title($data_system.title_name)
    # Commandes
    s1 = "Nouvelle Partie"
    s2 = "Charger"
    s3 = "Quitter"
    @command_window = Window_Command.new(192, [s1, s2,s3])
    @command_window.back_opacity = 0
    @command_window.x = 999
    @command_window.y = 999
    #Mise en place des images
    @np = Sprite.new
    @np.bitmap = RPG::Cache.picture("1")
    @np.x = 200
    @np.y = 300
    @cp = Sprite.new
    @cp.bitmap = RPG::Cache.picture("2")
    @cp.x = 400
    @cp.y = 200
    @qp = Sprite.new
    @qp.bitmap = RPG::Cache.picture("3")
    @qp.x = 0
    @qp.y = 0

Vous ne pouvez toujours pas voir le résultat, mais si vous obtenez à peu près ceci, vous êtes sur la bonne voie ^^

Bon là on va faire un bloc de copier coller, car ça ne touche pas la partie graphique et c'est déjà présent dans le script original, et je vous ai mis des commentaires dans le code Wink
Code:
# @continue_enabled true, false
    @continue_enabled = false
    for i in 0..3
      if FileTest.exist?("Sauvegarde#{i+1}.rxdata")
        @continue_enabled = true
      end
    end
    # continue
    if @continue_enabled
      @command_window.index = 1
    else
      @command_window.disable_item(1)
    end
    # BGM Son
    $game_system.bgm_play($data_system.title_bgm)
    # Fin BGS et ME  Fin du son
    Audio.me_stop
    Audio.bgs_stop
    # Transition 1
    Graphics.transition
    loop do
      # update images
      Graphics.update
      Input.update
      update
      if $scene != self
        break
      end
    end
    # Transitions 2
    Graphics.freeze

Maintenant on va faire en sorte que les images soient effacer une fois que l'écran titre est passé.
Pour cela on utilise la commande ".dispose" comme ceci:

Code:
@command_window.dispose
    @np.dispose

Et on rajoute pour chaque choix, pour obtenir:

Code:
@command_window.dispose
@np.dispose
@cp.dispose
@qp.dispose
 end

Et voila, nous avons terminé la partie initialisation =D
A là fin de cette partie, vous devriez obtenir quelque chose de ce genre:

Code:
#==============================================================================
# Scene_Title by Paran0iaK
#==============================================================================

class Scene_Title
  #--------------------------------------------------------------------------
  # Initialisation
  #--------------------------------------------------------------------------
  def main
    if $BTEST
      battle_test
      return
    end
    # Données
    $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
  @sprite = Sprite.new
    @sprite.bitmap = RPG::Cache.title($data_system.title_name)
    # Commandes
    s1 = "Nouvelle Partie"
    s2 = "Charger"
    s3 = "Quitter"
    @command_window = Window_Command.new(192, [s1, s2,s3])
    @command_window.back_opacity = 0
    @command_window.x = 999
    @command_window.y = 999
    #Mise en place des images
    @np = Sprite.new
    @np.bitmap = RPG::Cache.picture("1")
    @np.x = 200
    @np.y = 300
    @cp = Sprite.new
    @cp.bitmap = RPG::Cache.picture("2")
    @cp.x = 400
    @cp.y = 200
    @qp = Sprite.new
    @qp.bitmap = RPG::Cache.picture("3")
    @qp.x = 0
    @qp.y = 0
      # @continue_enabled true, false
    @continue_enabled = false
    for i in 0..3
      if FileTest.exist?("Sauvegarde#{i+1}.rxdata")
        @continue_enabled = true
      end
    end
    # continue
    if @continue_enabled
      @command_window.index = 1
    else
      @command_window.disable_item(1)
    end
    # BGM Son
    $game_system.bgm_play($data_system.title_bgm)
    # Fin BGS et ME Fin du son
    Audio.me_stop
    Audio.bgs_stop
    # Transition 1
    Graphics.transition
    loop do
      # update images
      Graphics.update
      Input.update
      update
      if $scene != self
        break
      end
    end
    # Transitions 2
    Graphics.freeze
@command_window.dispose
@np.dispose
@cp.dispose
@qp.dispose
 end

Bon et bien, ce n'est pas mal tout ça, si vous y êtes arrivé vous pouvez être fière de vous =D
Sinon, persistez et vous y arriverez ^^

Et si je vous dis que nous avons fait le plus dur et le plus long ?
Ah je savais que ça vous plairait.
Maintenant on va y allez à coup de copier collez, et je commenterai les commandes Wink
Vous coller ceci à la suite de ce que nous avons déjà fait ^^


Code:
#--------------------------------------------------------------------------
  #  Update
  #--------------------------------------------------------------------------
  def update
    # Rafraichissement
    @command_window.update
    @np.update
    @cp.update
    @qp.update
    update_command

De la même manière que l'on a utilisé la commande dispose, nous allons utiliser la commande update.
Elle fonctionne de la même manière comme vous pouvez le constater ;-)
Pareil vous en mettez autant qu'il y a de choix au départ.

Ensuite, nous allons indiquer à RPG Maker XP à quelles commandes correspondent tout ces choix.
Pour cela nous utilisons les conditions "if" et "when":

# Touche action
if Input.trigger?(Input::C)
case @command_window.index
when 0
command_new_game
when 1
command_continue
when 2
command_shutdown
end
end
end

Le "0" correspond au premier choix, le 1 au second etc…
Vous mettez autant de "when" qu'il y a de choix.

Remarque: Pour un éventuel quatrième choix, il faudrait faire appelle à la commande du script que vous utiliseriez.

Voila pour la partie 2, c'était plutôt rapide ^^
Pour les 3 parties suivantes nous allons faire un gros copié collé sans nous attarder puisque ce n'est pas important dans notre customisation.

Code:
#--------------------------------------------------------------------------
  # Définition des commandes - Commencer -
  #--------------------------------------------------------------------------
  def command_new_game
    # Nouveau jeu
    $game_system.se_play($data_system.decision_se)
    # Fin BGM
    Audio.bgm_stop
    Graphics.frame_count = 0
    # Données
    $game_temp          = Game_Temp.new
    $game_system        = Game_System.new
    $game_switches      = Game_Switches.new
    $game_variables    = Game_Variables.new
    $game_self_switches = Game_SelfSwitches.new
    $game_screen        = Game_Screen.new
    $game_actors        = Game_Actors.new
    $game_party        = Game_Party.new
    $game_troop        = Game_Troop.new
    $game_map          = Game_Map.new
    $game_player        = Game_Player.new
    $game_party.setup_starting_members
    $game_map.setup($data_system.start_map_id)
    $game_player.moveto($data_system.start_x, $data_system.start_y)
    $game_player.refresh
    $game_map.autoplay
    $game_map.update
    # Début du jeu
    $scene = Scene_Map.new
  end
  #--------------------------------------------------------------------------
  # Définition des commandes - Continue -
  #--------------------------------------------------------------------------
  def command_continue
    # Continue
    unless @continue_enabled
      # SE
      $game_system.se_play($data_system.buzzer_se)
      return
    end
    # SE
    $game_system.se_play($data_system.decision_se)
    # Chargement
    $scene = Scene_Load.new
  end
#--------------------------------------------------------------------------
  # Définition des commandes - Quitter -
  #--------------------------------------------------------------------------
  def command_shutdown
    # Fin
    $game_system.se_play($data_system.decision_se)
    # BGM、BGS、ME
    Audio.bgm_fade(800)
    Audio.bgs_fade(800)
    Audio.me_fade(800)
    $scene = nil
  end

[Ruby/RGSS1][COURS] Custom Title System personnalisé ! Important Il doit y avoir autant de partie que de choix !
Si par exemple vous ne mettez pas la possibilité de quitter, alors supprimer la 3eme partie !

Bon bah ce n'était pas trop dur ^^
Voici un récapitulatif de ce que vous avez obtenu (à quelque exceptions)

Code:
#==============================================================================
# Scene_Title by Paran0iaK
#==============================================================================

class Scene_Title
  #--------------------------------------------------------------------------
  # Initialisation
  #--------------------------------------------------------------------------
  def main
    if $BTEST
      battle_test
      return
    end
    # Données
    $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
  @sprite = Sprite.new
    @sprite.bitmap = RPG::Cache.title($data_system.title_name)
    # Commandes
    s1 = "Nouvelle Partie"
    s2 = "Charger"
    s3 = "Quitter"
    @command_window = Window_Command.new(192, [s1, s2,s3])
    @command_window.back_opacity = 0
    @command_window.x = 999
    @command_window.y = 999
    #Mise en place des images
    @np = Sprite.new
    @np.bitmap = RPG::Cache.picture("1")
    @np.x = 200
    @np.y = 300
    @cp = Sprite.new
    @cp.bitmap = RPG::Cache.picture("2")
    @cp.x = 400
    @cp.y = 200
    @qp = Sprite.new
    @qp.bitmap = RPG::Cache.picture("3")
    @qp.x = 0
    @qp.y = 0
      # @continue_enabled true, false
    @continue_enabled = false
    for i in 0..3
      if FileTest.exist?("Sauvegarde#{i+1}.rxdata")
        @continue_enabled = true
      end
    end
    # continue
    if @continue_enabled
      @command_window.index = 1
    else
      @command_window.disable_item(1)
    end
    # BGM Son
    $game_system.bgm_play($data_system.title_bgm)
    # Fin BGS et ME  Fin du son
    Audio.me_stop
    Audio.bgs_stop
    # Transition 1
    Graphics.transition
    loop do
      # update images
      Graphics.update
      Input.update
      update
      if $scene != self
        break
      end
    end
    # Transitions 2
    Graphics.freeze
@command_window.dispose
@np.dispose
@cp.dispose
@qp.dispose
 end

  #--------------------------------------------------------------------------
  # ● Update
  #--------------------------------------------------------------------------
  def update
    # Rafraichissement
    @command_window.update
    @np.update
    @cp.update
    @qp.update
    update_command
    # Appuis C
    if Input.trigger?(Input::C)
      case @command_window.index
      when 0
        command_new_game
      when 1
        command_continue
      when 2
        command_shutdown
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● Définition des commandes - Commencer -
  #--------------------------------------------------------------------------
  def command_new_game
    # Nouveau jeu
    $game_system.se_play($data_system.decision_se)
    # Fin BGM
    Audio.bgm_stop
    Graphics.frame_count = 0
    # Données
    $game_temp          = Game_Temp.new
    $game_system        = Game_System.new
    $game_switches      = Game_Switches.new
    $game_variables    = Game_Variables.new
    $game_self_switches = Game_SelfSwitches.new
    $game_screen        = Game_Screen.new
    $game_actors        = Game_Actors.new
    $game_party        = Game_Party.new
    $game_troop        = Game_Troop.new
    $game_map          = Game_Map.new
    $game_player        = Game_Player.new
    $game_party.setup_starting_members
    $game_map.setup($data_system.start_map_id)
    $game_player.moveto($data_system.start_x, $data_system.start_y)
    $game_player.refresh
    $game_map.autoplay
    $game_map.update
    # Début du jeu
    $scene = Scene_Map.new
  end
  #--------------------------------------------------------------------------
  # ● Définition des commandes - Continue -
  #--------------------------------------------------------------------------
  def command_continue
    # Continue
    unless @continue_enabled
      # SE
      $game_system.se_play($data_system.buzzer_se)
      return
    end
    # SE
    $game_system.se_play($data_system.decision_se)
    # Chargement
    $scene = Scene_Load.new
  end
#--------------------------------------------------------------------------
  # ● Définition des commandes - Quitter -
  #--------------------------------------------------------------------------
  def command_shutdown
    # Fin
    $game_system.se_play($data_system.decision_se)
    # BGM、BGS、ME
    Audio.bgm_fade(800)
    Audio.bgs_fade(800)
    Audio.me_fade(800)
    $scene = nil
  end

Bon maintenant nous allons passez à une partie importante car c'est ce qui va permettre de personnalisé vraiment le script ^^

On va définir ce qu'il se passe quand l'on se trouve sur Nouveau jeu, charger etc….
Et pour cela nous allons utiliser l'opacité des images.
Je vais vous montrez pour le choix "0" (Donc ici, Nouvelle partie):

Code:
def update_command
    case @command_window.index
when 0
@np.opacity = 255
@cp.opacity = 100
@qp.opacity = 100

Les valeurs de l'opacité doivent être comprises entre 0 et 255, 0 pour invisible et 255 pour opaque.
Ici j'ai mis 255 pour np, et 100 pour le reste, histoire de mettre Nouvelle Partie en valeur ^^
Mais on aurait bien pu mettre 0 pour le reste pour ne plus rien voir.

Si on à un second choix, on ajoute :

Code:
when 1
@np.opacity = 100
@cp.opacity = 255
@qp.opacity = 100

Je vous laisse faire pour le troisième choix si vous en avez mis un Wink
A la fin vous devriez obtenir quelque chose de ce genre:

Code:
#--------------------------------------------------------------------------
# Opacité, visibilité etc....
#--------------------------------------------------------------------------
  def update_command
    case @command_window.index
when 0
@np.opacity = 255
@cp.opacity = 100
@qp.opacity = 100
when 1
@np.opacity = 100
@cp.opacity = 255
@qp.opacity = 100
when 2
@np.opacity = 100
@cp.opacity = 100
@qp.opacity = 255
end
end

Remarque: Les end sont la pour "terminer" le "def" et le "case", je n'en dit pas plus mais si vous voulez en savoir plus, je pense faire des cours de Ruby/RGSS Wink

Et pour finir, on va collez ça et vous pourrez admirer le résultat:

Code:
#--------------------------------------------------------------------------
  # Fin
  #--------------------------------------------------------------------------
  def battle_test
    # Test
    $data_actors        = load_data("Data/BT_Actors.rxdata")
    $data_classes      = load_data("Data/BT_Classes.rxdata")
    $data_skills        = load_data("Data/BT_Skills.rxdata")
    $data_items        = load_data("Data/BT_Items.rxdata")
    $data_weapons      = load_data("Data/BT_Weapons.rxdata")
    $data_armors        = load_data("Data/BT_Armors.rxdata")
    $data_enemies      = load_data("Data/BT_Enemies.rxdata")
    $data_troops        = load_data("Data/BT_Troops.rxdata")
    $data_states        = load_data("Data/BT_States.rxdata")
    $data_animations    = load_data("Data/BT_Animations.rxdata")
    $data_tilesets      = load_data("Data/BT_Tilesets.rxdata")
    $data_common_events = load_data("Data/BT_CommonEvents.rxdata")
    $data_system        = load_data("Data/BT_System.rxdata")
    Graphics.frame_count = 0
    $game_temp          = Game_Temp.new
    $game_system        = Game_System.new
    $game_switches      = Game_Switches.new
    $game_variables    = Game_Variables.new
    $game_self_switches = Game_SelfSwitches.new
    $game_screen        = Game_Screen.new
    $game_actors        = Game_Actors.new
    $game_party        = Game_Party.new
    $game_troop        = Game_Troop.new
    $game_map          = Game_Map.new
    $game_player        = Game_Player.new
    $game_party.setup_battle_test_members
    $game_temp.battle_troop_id = $data_system.test_troop_id
    $game_temp.battle_can_escape = true
    $game_map.battleback_name = $data_system.battleback_name
    # SE
    $game_system.se_play($data_system.battle_start_se)
    # BGM
    $game_system.bgm_play($game_system.battle_bgm)
    # Combat
    $scene = Scene_Battle.new
  end
end

Voila, le cours touche à sa fin, je vous donne les images pour essayer, mais après vous pouvez les faires vous-même avec des effets diverses Wink
[Ruby/RGSS1][COURS] Custom Title System personnalisé ! 85855661
[Ruby/RGSS1][COURS] Custom Title System personnalisé ! 46784482
[Ruby/RGSS1][COURS] Custom Title System personnalisé ! 77952110


Ah et le code que j'ai obtenu pour comparer:
Code:
#==============================================================================
# Scene_Title by Paran0iaK
#==============================================================================

class Scene_Title
  #--------------------------------------------------------------------------
  # Initialisation
  #--------------------------------------------------------------------------
  def main
    if $BTEST
      battle_test
      return
    end
    # Données
    $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
  @sprite = Sprite.new
    @sprite.bitmap = RPG::Cache.title($data_system.title_name)
    # Commandes
    s1 = "Nouvelle Partie"
    s2 = "Charger"
    s3 = "Quitter"
    @command_window = Window_Command.new(192, [s1, s2,s3])
    @command_window.back_opacity = 0
    @command_window.x = 999
    @command_window.y = 999
    #Mise en place des images
    @np = Sprite.new
    @np.bitmap = RPG::Cache.picture("1")
    @np.x = 0
    @np.y = 350
    @cp = Sprite.new
    @cp.bitmap = RPG::Cache.picture("2")
    @cp.x = 0
    @cp.y = 380
    @qp = Sprite.new
    @qp.bitmap = RPG::Cache.picture("3")
    @qp.x = 0
    @qp.y =410
    # @continue_enabled true, false
    @continue_enabled = false
    for i in 0..3
      if FileTest.exist?("Sauvegarde#{i+1}.rxdata")
        @continue_enabled = true
      end
    end
    # continue
    if @continue_enabled
      @command_window.index = 1
    else
      @command_window.disable_item(1)
    end
    # BGM Son
    $game_system.bgm_play($data_system.title_bgm)
    # Fin BGS et ME  Fin du son
    Audio.me_stop
    Audio.bgs_stop
    # Transition 1
    Graphics.transition
    loop do
      # update images
      Graphics.update
      Input.update
      update
      if $scene != self
        break
      end
    end
    # Transitions 2
    Graphics.freeze
@command_window.dispose
@np.dispose
@cp.dispose
@qp.dispose
 end

  #--------------------------------------------------------------------------
  # ● Update
  #--------------------------------------------------------------------------
  def update
    # Rafraichissement
    @command_window.update
    @np.update
    @cp.update
    @qp.update
    update_command
    # Appuis C
    if Input.trigger?(Input::C)
      case @command_window.index
      when 0
        command_new_game
      when 1
        command_continue
      when 2
        command_shutdown
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● Définition des commandes - Commencer -
  #--------------------------------------------------------------------------
  def command_new_game
    # Nouveau jeu
    $game_system.se_play($data_system.decision_se)
    # Fin BGM
    Audio.bgm_stop
    Graphics.frame_count = 0
    # Données
    $game_temp          = Game_Temp.new
    $game_system        = Game_System.new
    $game_switches      = Game_Switches.new
    $game_variables    = Game_Variables.new
    $game_self_switches = Game_SelfSwitches.new
    $game_screen        = Game_Screen.new
    $game_actors        = Game_Actors.new
    $game_party        = Game_Party.new
    $game_troop        = Game_Troop.new
    $game_map          = Game_Map.new
    $game_player        = Game_Player.new
    $game_party.setup_starting_members
    $game_map.setup($data_system.start_map_id)
    $game_player.moveto($data_system.start_x, $data_system.start_y)
    $game_player.refresh
    $game_map.autoplay
    $game_map.update
    # Début du jeu
    $scene = Scene_Map.new
  end
  #--------------------------------------------------------------------------
  # ● Définition des commandes - Continue -
  #--------------------------------------------------------------------------
  def command_continue
    # Continue
    unless @continue_enabled
      # SE
      $game_system.se_play($data_system.buzzer_se)
      return
    end
    # SE
    $game_system.se_play($data_system.decision_se)
    # Chargement
    $scene = Scene_Load.new
  end
#--------------------------------------------------------------------------
  # ● Définition des commandes - Quitter -
  #--------------------------------------------------------------------------
  def command_shutdown
    # Fin
    $game_system.se_play($data_system.decision_se)
    # BGM、BGS、ME
    Audio.bgm_fade(800)
    Audio.bgs_fade(800)
    Audio.me_fade(800)
    $scene = nil
  end
#--------------------------------------------------------------------------
# Opacité, visibilité etc....
#--------------------------------------------------------------------------
  def update_command
    case @command_window.index
when 0
@np.opacity = 255
@cp.opacity = 100
@qp.opacity = 100
when 1
@np.opacity = 100
@cp.opacity = 255
@qp.opacity = 100
when 2
@np.opacity = 100
@cp.opacity = 100
@qp.opacity = 255
end
end
  #--------------------------------------------------------------------------
  # Fin
  #--------------------------------------------------------------------------
  def battle_test
    # Test
    $data_actors        = load_data("Data/BT_Actors.rxdata")
    $data_classes      = load_data("Data/BT_Classes.rxdata")
    $data_skills        = load_data("Data/BT_Skills.rxdata")
    $data_items        = load_data("Data/BT_Items.rxdata")
    $data_weapons      = load_data("Data/BT_Weapons.rxdata")
    $data_armors        = load_data("Data/BT_Armors.rxdata")
    $data_enemies      = load_data("Data/BT_Enemies.rxdata")
    $data_troops        = load_data("Data/BT_Troops.rxdata")
    $data_states        = load_data("Data/BT_States.rxdata")
    $data_animations    = load_data("Data/BT_Animations.rxdata")
    $data_tilesets      = load_data("Data/BT_Tilesets.rxdata")
    $data_common_events = load_data("Data/BT_CommonEvents.rxdata")
    $data_system        = load_data("Data/BT_System.rxdata")
    Graphics.frame_count = 0
    $game_temp          = Game_Temp.new
    $game_system        = Game_System.new
    $game_switches      = Game_Switches.new
    $game_variables    = Game_Variables.new
    $game_self_switches = Game_SelfSwitches.new
    $game_screen        = Game_Screen.new
    $game_actors        = Game_Actors.new
    $game_party        = Game_Party.new
    $game_troop        = Game_Troop.new
    $game_map          = Game_Map.new
    $game_player        = Game_Player.new
    $game_party.setup_battle_test_members
    $game_temp.battle_troop_id = $data_system.test_troop_id
    $game_temp.battle_can_escape = true
    $game_map.battleback_name = $data_system.battleback_name
    # SE
    $game_system.se_play($data_system.battle_start_se)
    # BGM
    $game_system.bgm_play($game_system.battle_bgm)
    # Combat
    $scene = Scene_Battle.new
  end
end

Voila, s'en est terminer de ce premier cour, vous pouvez être fière de vous car pour la pluparts d'entre vous, ce sera votre premier script qui porte votre nom =O.
Pour toute question, suggestion, remarque etc… poster à la suite et je vous répondrai ^^
Et poster moi vos créations à la suite, ça fait toujours plaisir de voir ce que vous avez réussi à faire =D
Je tiens aussi à vous dire que mes cours seront mis régulièrement à jour avec de nouvelles possibilités de customisations Wink

Je compte faire un prochain tuto pour faire un Custom Menu System, alors restez à la page.


Cordialement,
Paran0iaK, Tueur à Gage de Zarok.
Revenir en haut Aller en bas
Invité
Invité



[Ruby/RGSS1][COURS] Custom Title System personnalisé ! Empty
MessageSujet: Re: [Ruby/RGSS1][COURS] Custom Title System personnalisé !   [Ruby/RGSS1][COURS] Custom Title System personnalisé ! EmptyMer 30 Déc 2009 - 14:55

Merci du tuto parano' ! J'ai tout lu, ça a du te prendre pas mal de temps d'écrire tout ça. C'est bien expliqué, et t'as mis en valeur les choses importantes... Que dire de plus que "bravos" ? Smile
"Le Ruby pour les Nuls, by Paran0ïak"
Revenir en haut Aller en bas
Gray-Fox
Embryon
Embryon
Gray-Fox


Masculin Messages : 1145
Age : 30
Loisirs : Tuer
Date d'inscription : 01/06/2008

Caractéristiques du membre
Evolution: Atome
Job: Parti
XP:
[Ruby/RGSS1][COURS] Custom Title System personnalisé ! Left_bar_bleue20/20[Ruby/RGSS1][COURS] Custom Title System personnalisé ! Empty_bar_bleue  (20/20)

[Ruby/RGSS1][COURS] Custom Title System personnalisé ! Empty
MessageSujet: Re: [Ruby/RGSS1][COURS] Custom Title System personnalisé !   [Ruby/RGSS1][COURS] Custom Title System personnalisé ! EmptyMer 30 Déc 2009 - 18:17

Super tutoriel. Mais ceci n'explique pas tout, car dans une Scene, il y a beaucoup de zones d'ombre. Sinon, beau tutoriel !
Revenir en haut Aller en bas
guero
Atome
Atome


Messages : 42
Date d'inscription : 09/01/2010

[Ruby/RGSS1][COURS] Custom Title System personnalisé ! Empty
MessageSujet: Re: [Ruby/RGSS1][COURS] Custom Title System personnalisé !   [Ruby/RGSS1][COURS] Custom Title System personnalisé ! EmptyDim 10 Jan 2010 - 14:33

Je suis au début et j'ai déjà une question.(trop fort ou nul comme vous vouler)^^

Donc la ou il y a marquer s1, s2, s3, ect on doit mettre un choix comme dans le menu ?

Si oui imaginon que j'ai envie d'ajouter un bestiaire comme dans FF j'ai déja le scripte et il marche mais si je veut le mettre à cet endroit je fait comment ?
Revenir en haut Aller en bas
Gray-Fox
Embryon
Embryon
Gray-Fox


Masculin Messages : 1145
Age : 30
Loisirs : Tuer
Date d'inscription : 01/06/2008

Caractéristiques du membre
Evolution: Atome
Job: Parti
XP:
[Ruby/RGSS1][COURS] Custom Title System personnalisé ! Left_bar_bleue20/20[Ruby/RGSS1][COURS] Custom Title System personnalisé ! Empty_bar_bleue  (20/20)

[Ruby/RGSS1][COURS] Custom Title System personnalisé ! Empty
MessageSujet: Re: [Ruby/RGSS1][COURS] Custom Title System personnalisé !   [Ruby/RGSS1][COURS] Custom Title System personnalisé ! EmptyDim 10 Jan 2010 - 20:13

Bien sur, n'oublie surtout pas les guillemets. Et qu'en t'entends-tu par "cet endroit" ? Si tu veux ajouter ta bestiaire, tu ajoutes premièrement ton choix dans l'un des s1 s2 s3 ... Puis après
Code:
      case @command_window.index

Tu trouveras:
Code:
when 0
blabla

when 1
blabla

when 2
blabla

Blabla correspond à la commande voulue, si tu veux entrer dans une scene comme ta bestiaire, tu dois mettre when et le nombre est celui du "s", puis tu remplaces blabla par la commande ressemblante celle dans "insérer un script", un exemple, pour ouvrir ma bestiaire, je dois aller dans la commande insérer un script et taper :
Code:
$scene = Scene_Liste_Monstres.new
Alors je vais vers mon script et je fais premièrement les choix :
Code:
    s1 = "Objet"
    s2 = "Skill"
    s3 = "Équipement"
    s4 = "Status"
    s5 = "Save"
    s6 = "End Game"
    s7 = "Bestiaire"

Puis je vais aprés case @command_window.index et je mets :
Code:
when 6
        #Pour jouer un effet sonore
        $game_system.se_play($data_system.decision_se)
        # Pour aller à la bestiaire
        $scene = Scene_Liste_Monstres.new
Il est préférable de respecter l'ordre de numérotation des "when"

Enjoy.

Si tu ne comprends pas, relis une deuxième lecture.
Revenir en haut Aller en bas
Contenu sponsorisé



[Ruby/RGSS1][COURS] Custom Title System personnalisé ! Empty
MessageSujet: Re: [Ruby/RGSS1][COURS] Custom Title System personnalisé !   [Ruby/RGSS1][COURS] Custom Title System personnalisé ! Empty

Revenir en haut Aller en bas
 

[Ruby/RGSS1][COURS] Custom Title System personnalisé !

Voir le sujet précédent Voir le sujet suivant Revenir en haut 

 Sujets similaires

-
» [Ruby] Cours n°1 : Les variables
» Custom Dialog System - Par Ox -
» [Ruby] Cours n°4 : structure if
» [Ruby] Cours n°7 : Boucle For
» [Ruby] Cours n°6 : Boucle Loop do et while
Page 1 sur 1

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Zarok RPG Maker :: 

 :: TUTORIELS :: Tutoriels de Programmation
-
Sauter vers: