| E-magination ~ S'évader de la banalité... Et entrer dans l'imaginaire ! ~ |
|
| les sprites | |
| | Auteur | Message |
---|
dani_nouvel_star Maker experimenté Lv 9
Nombre de messages : 279 Age : 44
| Sujet: les sprites Mar 17 Juil 2007, 14:50 | |
| les images (bitmap) par la classe des spritesPour 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 : 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 : 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. ) | |
| | | Relm ---Fantôme--- Lv 0
Nombre de messages : 40942 Age : 33
| Sujet: Re: les sprites Mer 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.
| |
| | | dani_nouvel_star Maker experimenté Lv 9
Nombre de messages : 279 Age : 44
| Sujet: Re: les sprites Mer 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. | |
| | | Relm ---Fantôme--- Lv 0
Nombre de messages : 40942 Age : 33
| Sujet: Re: les sprites Mer 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. 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.
| |
| | | dani_nouvel_star Maker experimenté Lv 9
Nombre de messages : 279 Age : 44
| Sujet: Re: les sprites Mer 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 . Edit : Je crois que je vais laisser tomber, je sais pas comment expliquer de manière simple . | |
| | | Relm ---Fantôme--- Lv 0
Nombre de messages : 40942 Age : 33
| Sujet: Re: les sprites Mer 18 Juil 2007, 04:41 | |
| C'est si décourageant ? Il n'y a pas de manières simples d'expliquer un peu ? ____________ - Alex RE a écrit:
- C'est comme utiliser une hache pour trancher du pain. Je suis peut-être trop vieux pour ça.
| |
| | | coco Dieu Maker Lv 44
Nombre de messages : 2989 Age : 30
| Sujet: Re: les sprites Mer 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... | |
| | | Invité Invité
| Sujet: Re: les sprites Mer 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 |
| | | Empty Mangeur de manettes Lv 65
Nombre de messages : 16363 Age : 38
| Sujet: Re: les sprites Mer 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 ?! | |
| | | dani_nouvel_star Maker experimenté Lv 9
Nombre de messages : 279 Age : 44
| Sujet: Re: les sprites Mer 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. | |
| | | Contenu sponsorisé
| Sujet: Re: les sprites | |
| |
| | | | les sprites | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |
|