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

~ S'évader de la banalité... Et entrer dans l'imaginaire ! ~
 
AccueilGuelnika, le site de E-m !ChatS'enregistrerConnexion
-35%
Le deal à ne pas rater :
-35% sur la machine à café Expresso Delonghi La Specialista Arte
359.99 € 549.99 €
Voir le deal

 

 les sprites

Aller en bas 
4 participants
AuteurMessage
dani_nouvel_star
Maker experimenté Lv 9
Maker experimenté Lv 9
dani_nouvel_star


Nombre de messages : 279
Age : 44

les sprites Empty
MessageSujet: les sprites   les sprites Icon_minitimeMar 17 Juil 2007, 14:50

les images (bitmap) par la classe des sprites

Pour savoir comment fonctionne une scène de manière générale , n'hésitez pas à aller faire un tour sur le topic : la base de données RMXP et les scenes...

Les sprites :

Tout comme vous avez pu le voir dans mon précédent topic sur les scènes j'ai introduit un objet de la classe Window_Base.
Je vais maintenant mettre à la place de cet objet fenetre de dani, une image. Pour insérer une image on utilise un sprite. Le bitmap sera une des propriétés de ce sprite. La classe Bitmap existe mais elle n'a pas beauvoup de propriété, sa mnipulation reste donc assez limitée. On utilise donc les sprites pour faire des images que l'on peut bouger par exemple (propriété x et y).

Insérer à la place de main :

Code:
#==============================================================================
# ■ Scene_Dani
#    Le zoom_x et le zoom_y d'un sprite
#==============================================================================

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
   
    #initialisation et instance de classe
    @sprite_de_dani = Sprite.new
    @sprite_de_dani.bitmap = RPG::Cache.title($data_system.title_name)
   
    Graphics.transition(10)
    loop do
      Graphics.update
      Input.update
      update
      if $scene != self
        break
      end
    end
    Graphics.freeze 
    @sprite_de_dani.dispose
  end
  #--------------------------------------------------------------------------
  # ● update
  #--------------------------------------------------------------------------
  def update
    if Input.trigger?(Input::LEFT)
      @sprite_de_dani.zoom_x = [@sprite_de_dani.zoom_x-0.01,0].max
    end
    if Input.trigger?(Input::RIGHT)
      @sprite_de_dani.zoom_x = [@sprite_de_dani.zoom_x+0.01,1].min
    end
    if Input.trigger?(Input::UP)
      @sprite_de_dani.zoom_y = [@sprite_de_dani.zoom_y-0.01,0].max
    end
    if Input.trigger?(Input::DOWN)
      @sprite_de_dani.zoom_y = [@sprite_de_dani.zoom_y+0.01,1].min
    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

Si on appuie :
-> gauche : on diminue zoom_x
-> droite : on augmente zoom_x
-> bas : on augmente zoom_y
-> haut : on diminue zoom_y
-> C (entrée ou espace) : quitter

Voilà ce que ça donne en screen :

les sprites Spritededanivy3


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 :
les sprites Aidespritesx9
Normalement le zoom n'est pas aussi brutale que ce que montre ce gif animé car on incrémente ou on décrémente que de 0.01 à chaque appuie de touche ^^.

notation :
dani_tableau = [a,b,c,d] est un tableau à 4 éléments où :
->dani_tableau[0] = a
->dani_tableau[1] = b
->dani_tableau[2] = c
->dani_tableau[3] = d

Si a, b, c et d sont des nombres alors
dani_tableau.max renvoie le plus grand élément du tableau et
dani_tableau.min renvoie le plus petit élément du tableau.

Si vous avez des questions ou des remarques, n'hésitez pas à poster. Je pourrais facilement répondre je pense vu que ce script n'est pas trop compliqué ^^.

(A suivre sur ce même topic : faire un transfert de bloc, c'est à dire ne prendre qu'une partie de bitmap comme ce qui se fait pour les charas, les tilesets, les animation etc. )
Revenir en haut Aller en bas
Relm
---Fantôme--- Lv 0
Relm


Nombre de messages : 40942
Age : 33

les sprites Empty
MessageSujet: Re: les sprites   les sprites Icon_minitimeMer 18 Juil 2007, 01:21

C'est bête mais... A quoi ça sert ? ^^"

____________
Alex RE a écrit:
C'est comme utiliser une hache pour trancher du pain. Je suis peut-être trop vieux pour ça.
Revenir en haut Aller en bas
dani_nouvel_star
Maker experimenté Lv 9
Maker experimenté Lv 9
dani_nouvel_star


Nombre de messages : 279
Age : 44

les sprites Empty
MessageSujet: Re: les sprites   les sprites Icon_minitimeMer 18 Juil 2007, 02:03

En fait ça ne sert pas à grand chose pour le jeu mais juste à comprendre qu'est-ce qu'un sprite en rgss. Et quel genre de manipulation on peut en faire. Il n'y a qu'un seul sprite ici mais on peux en définir beaucoup plus.
Avec ce tuto, on a tous les outils pour introduire une cinématique par exemple.
La scene qui se déroule sur la map s'appelle la Scene_Map, il y a dans cette scene_map un objet de type "Window" (la fenetre de message) et tout un ensemble de sprite (les cases de la map et les différents sprite du Game_Player et des Events, et aussi les pictures, les fog et le panorama). Cet ensemble de sprite est réunis dans une seule classe pour simplifier sa génération à chaque fois que le Game_Player est transféré dans une nouvelle map. Cette ensemble de sprite est définis à l'aide de la classe Spriteset_Map. Si on regarde la classe "Scene_Map" on a en effet deux objets créés :
Code:
    # スプライトセットを作成
    @spriteset = Spriteset_Map.new
    # メッセージウィンドウを作成
    @message_window = Window_Message.new

D'un autre côté on a la scene ou se déroule les combats où il n'y a pas de map mais un background. L'ensemble des sprite créé dans cette scene n'est pas la même que celle créée dans la scene_map.
On se sert donc d'une autre classe (différente de Spriteset_Map) pour définir l'ensemble des sprites : Spriteset_Battle.

J'ai en fait envie d'expliquer progressivement comment marche le script par défaut de rmxp, mais pour l'instant je n'ai pas d'idée précise pour vous faire comprendre plus facilement pourquoi ce script est organisé de telle manière. Relm, je sais que toi et les scripts ça fait deux et que y a beaucoup de maker qui ont du mal mais je vais essayer de vous montrer que c'est pas si compliqué que ça de scripter.
Revenir en haut Aller en bas
Relm
---Fantôme--- Lv 0
Relm


Nombre de messages : 40942
Age : 33

les sprites Empty
MessageSujet: Re: les sprites   les sprites Icon_minitimeMer 18 Juil 2007, 03:16

A mon avis, tu commence difficilement.

Il faut du concret assez vite avant de rentrer dans les détails.

Et surtout il faut de l'"utile".

Par exemple : je veux savoir comment je peux déformer (si c'est possible) un sprite de chara pour une animation de combats dans un custom battle system.

En fait, au lieu d'expliquer la théorie qui peut ensuite s'appliquer à la pratique, il voudrait mieux expliquer la pratique en premier. Et rien de mieux que prendre des exemples de choses que l'on peu faire juste avec les scripts mais au niveau du jeu en soit. Tu me suis ?

Sinon, rien à dire, je comprends rien actuellement mais je ne doute pas une seconde que ton tuto est correct et serieux. cactus smile

Cependant je pense que la manière peut être revue. (Sachant que beaucoup de makers sont plus flemmards que moi par exemple).

____________
Alex RE a écrit:
C'est comme utiliser une hache pour trancher du pain. Je suis peut-être trop vieux pour ça.
Revenir en haut Aller en bas
dani_nouvel_star
Maker experimenté Lv 9
Maker experimenté Lv 9
dani_nouvel_star


Nombre de messages : 279
Age : 44

les sprites Empty
MessageSujet: Re: les sprites   les sprites Icon_minitimeMer 18 Juil 2007, 04:09

Il faut que je vois comment expliquer tout ça ^^.

Pour les sprite des battler en combat, ce sont des objet de type Sprite_Battler.

Pour les déformer en x par exemple, mettre ça avant main :
Code:
class Sprite_Battler < RPG::Sprite
  alias sprite_battler_update update 
  def update
    sprite_battler_update
    self.zoom_x = [self.zoom_x-0.01,0].max
  end
end

Ici en combat tous les battlers seront aplatis sans aucune condition ^^. On peut faire ce genre de chose pour un battler précis et pour une conditions précise. Il faut savoir exactement dans quelle condition faire une déformation, après une certaine attaque peut-être par exemple. Je trouve que c'est plus compliqué à comprendre quand je pose le code comme ça car on ne sais pas où est-ce que ce sprite_battler est utilisé. Il faut que j'explique l'alias et le self et même si je sais utiliser ce genre de chose je ne sais comment expliquer de manière simple mais avec d'autre exemple. Il faut aussi que je précise que ces sprite_battler sont appelé dans le spriteset_battle et comment est fait cette classe qui est après appelé dans la scene_battle. Bref, il faut que je vois comment expliquer tout ça. Je ne sais pas si je peux expliquer tout ça aussi simplement. Donc je vais y réfléchir Surprised .
Edit : Je crois que je vais laisser tomber, je sais pas comment expliquer de manière simple Very Happy .
Revenir en haut Aller en bas
Relm
---Fantôme--- Lv 0
Relm


Nombre de messages : 40942
Age : 33

les sprites Empty
MessageSujet: Re: les sprites   les sprites Icon_minitimeMer 18 Juil 2007, 04:41

C'est si décourageant ? Il n'y a pas de manières simples d'expliquer un peu ? Sad

____________
Alex RE a écrit:
C'est comme utiliser une hache pour trancher du pain. Je suis peut-être trop vieux pour ça.
Revenir en haut Aller en bas
coco
Dieu Maker Lv 44
Dieu Maker Lv 44
coco


Nombre de messages : 2989
Age : 30

les sprites Empty
MessageSujet: Re: les sprites   les sprites Icon_minitimeMer 18 Juil 2007, 09:04

Tu pourrai expliquer la comment modifier les noms des choix du menu, ceux de l'écran titre ou meme, comment faire une window toute simple a afficher sur la map...
Revenir en haut Aller en bas
Invité
Invité
Anonymous



les sprites Empty
MessageSujet: Re: les sprites   les sprites Icon_minitimeMer 18 Juil 2007, 12:31

moi non plus sur ce coup là j'y comprend rien, mais je suppose que c'est pour ceux qui ont un niveau avancé huhu
cela prouve par cela même que tu t'es bien cassé le fion, mais force d'avouer que tu as bien + d'année d'experience que beaucoup (rien qu'à voir ton âge) c'est plus mature et tout, faudrait juste descendre le niveau d'un cran mdr.
Mais je garde cette explication car ça n'a pas l'air courant, ça fait même un peu technique secret huhu
Revenir en haut Aller en bas
Empty
Mangeur de manettes Lv 65
Mangeur de manettes Lv 65
Empty


Nombre de messages : 16363
Age : 38

les sprites Empty
MessageSujet: Re: les sprites   les sprites Icon_minitimeMer 18 Juil 2007, 13:44

Moi j'aime ce genre de tuto qui ne servent à priori à rien !
Pour que les autres comprennent, le mieu ne serait-il pas de leur donner une démo ou vidéo en action ?!

____________
les sprites 206168MMCBan
Revenir en haut Aller en bas
https://e-magination.jeun.fr
dani_nouvel_star
Maker experimenté Lv 9
Maker experimenté Lv 9
dani_nouvel_star


Nombre de messages : 279
Age : 44

les sprites Empty
MessageSujet: Re: les sprites   les sprites Icon_minitimeMer 18 Juil 2007, 14:38

@Relm : Il faut que je vois comment vous faire aborder les scripts sans vous faire fuir XD.
@Shûji : Je n'ai pas vraiment beaucoup d'expérience en ruby, juste environ 7 mois. J'ai juste passé pas mal d'heure à scripter pour mon projet principal qui n'est pas le projet palateforme mais le projet dans lequel je vous ai dévoilé des personnages avec mes artworks. Cela explique pourquoi je connis pas mal ce script de rmxp.
@KoZzY : les deux topics que j'ai fait propose directement des script à insérer pour voir directement chez soi comment ça marche avec une possibilité d'intéraction en appuyant sur certaines touches. J'ai préféré l'insertion de script au téléchargelement d'une démo car c'est beaucoup plus pratique pour vous et pour moi ^^.
@coco : Les modification du menu de la Scene_Title est assez simple, en bidouillant l'argument de l'objet de type Window_Command dans le main de la Scene_Title. Et pour modifier les menus aussi, je crois d'ailleurs que ton tutos suffit pour comprendre tout cela. Après pour insérer une fenetre dans la scene_map ce n'est pas compliqué mais une peu long.
Pour afficher une fenêtre sur la map ce n'est pas compliqué mais un peu long à écrire.

Je me crée une classe Window_Map descendant de Window_Selectable comme ça il y a aussi possibilité de faire des menu avec sélection en jouant sur l'index différent de -1.

Dans la classe Scene_Map j'introduit cette objet de la même manière que ce que j'avais fait dans les post précédent quand il s'agit d'introduire un objet dans une scene. Il faut appeler l'update de l'objet instanciant Window_Map dans l'update de la scene_map. De manière générale une fenetre n'a pas besoin d'être modifié tous les frames car ces données ne change que à certains frame. Il faut donc ne pas mettre de modif dans cette update mais un refresh qui sera appelé sous certaines conditions. Ici j'appelle le refresh tous les 20 frames. Mais la condition peut se faire suivant le changement d'une variable que l'on affiche. Voilà pourquoi de manière générale, un objet qui n'est pas susceptible de varier à tous les frames passe indirectement par une méthode refresh.
J'ai rajouter la possibilité de faire disparaitre cette fenetre en changeant la valeur de la variable :
$game_temp.window_map_display = true or false.
on peut écrire cette modification partout dans le script et aussi dans les commandes d'évènement dans "insertion de script".
Après pour changer le contenu de la fenêtre il faut modifier le refresh de Window_Map. Pour cela il y a un des tutos de coco qui expliquer certaines des méthodes de Window_Base que l'on peut utiliser.

Insérer ce code avant "main" :

Code:
=begin
fenetre de dani dans la scene_map
=end

#==============================================================================
# ■ Window_Map
#    Objet descendant de la classe Window_Selectable
#==============================================================================
class Window_Map < Window_Selectable
 
  #--------------------------------------------------------------------------
  # ● Window_Map  / initialize
  #--------------------------------------------------------------------------
  def initialize
    super(0, 0, 640, 150)  # (x,y,width,heigth)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.contents.font.name = "Arial"
    self.contents.font.size = 14
    refresh
    self.active = false
    self.index = -1
  end
 
  #--------------------------------------------------------------------------
  # ● Window_Map / refresh
  #--------------------------------------------------------------------------
  def refresh 
    self.contents.clear
    self.contents.draw_text(10,10, 300, 32, "fenetre de dani")

  end
  #--------------------------------------------------------------------------
  # ● Window_Map / update
  #--------------------------------------------------------------------------
  def update
    super
    # cette fenetre test se modifiera si y a besoin
    # toutefois si y a besoin de le modifier à tous les frames ça peut ramer
    # Donc au minimum l'update se fera tous les 20 frames
    @frequence_min_update = 20
    return if Graphics.frame_count % @frequence_min_update != 0
    refresh
  end

 
end

#==============================================================================
# ■ Game_Temp
#==============================================================================
class Game_Temp

  attr_accessor :window_map_display  # true : afficher fenetre de la map
                            # false : ne pas afficher fenetre de la map

  alias window_map_gametemp_initialize initialize
 
  def initialize
    @window_map_display = true
    window_map_gametemp_initialize
  end
end

#==============================================================================
# ■ Scene_Map
#==============================================================================
class Scene_Map
 
  alias window_map_scenemap_main main
  alias window_map_scenemap_update update
 
  #--------------------------------------------------------------------------
  # ● Scene_Map / main
  #--------------------------------------------------------------------------
  def main
    if $game_temp.window_map_display
      #---------------------------------------------------------------
      # création d'un nouvel objet de type "Window_Map"
      @window_map = Window_Map.new
      #---------------------------------------------------------------
    end
    window_map_scenemap_main
    if $game_temp.window_map_display
      #---------------------------------------------------------------
      # après un freeze graphique on libère la mémoire
      @window_map.dispose
      #---------------------------------------------------------------
    end   
  end
  #--------------------------------------------------------------------------
  # ● Scene_Map / update
  #--------------------------------------------------------------------------
  def update
    window_map_scenemap_update
    if $game_temp.window_map_display
      #---------------------------------------------------------------
      # dans cet update, il y a le refresh donc la fréquence peut-être
      # modifié car vaut mieux ne pas rafraîchir tous les frames car ça
      # prend de la ressource
      @window_map.update
      #---------------------------------------------------------------
    end   
  end
end

Ici c'est pas compliqué mais très long à écrire =) .
Après si vous voulez faire des menus déroulant dans la scene_map, il faut encore rajouter des lignes de codes.
Revenir en haut Aller en bas
Contenu sponsorisé





les sprites Empty
MessageSujet: Re: les sprites   les sprites Icon_minitime

Revenir en haut Aller en bas
 
les sprites
Revenir en haut 
Page 1 sur 1

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
E-magination :: ~ Forums d'enrichissement ~ :: Apprentissage et partage :: RPG Maker XP :: Tutoriels / Scripts-
Sauter vers: