Sujet n°11944
Posté par
Nuri Yuri le
22 Aoû - 08:54 (2012)Titre :
Questions RubyBonjour, j'ai décidé de créer un topic dans lequel vous pourrez poser quelques questions à propos du ruby pour vous aider à réaliser vos scripts ou simplement apprendre, je pense que ça sera une manière un peu plus simple car la rédaction d'un cours complet est long compliqué et quand on le rédiges on se demande à chaque fois qu'est-ce qu'on va expliquer d'abord car en ruby le fait que tout soit objet lie tout à tout et c'est dure de parler de quelque choses sans expliquer tout ce qui l'entour.
Les questions que vous pourrez poster porterons sur les manières de coder ou ce que sont certains choses par exemple "c'est quoi une classe, comment ça se fait" ou "quelles sont les manières de faire un bloc itératif / énumératif" mais je préviens quand même de certaines choses, je ne répondrait pas à certaines questions en profondeur comme les RegExp car c'est une chose que je ne maitrise pas entièrement mais cela n'empêche pas aux autres scripteurs d'y répondre. Vous pourrez aussi poser des questions sur le fonctionnement des classes ruby ou RGSS mais attention il ne s'agira pas de vous faire un script.
J'espère pouvoir partager assez de connaissance et aider ceux qui veulent apprendre ou ceux qui ne comprennent pas les tutos sur internet
PS : Je ne sais pas vraiment dans quelle sous-forum mettre ça car le type de sujet fait que c'est à la fois une offre du support technique et du script en même temps mais il faut pas déranger le fonctionnement des autres sections non plus donc...
Posté par
Xyrram le
22 Aoû - 11:08 (2012)Bonjour je vient te demander ton aide car je n'ai pas conpris comment fonctione les condition en ruby.
pourait-tu expliquer?
Posté par
Ram' le
28 Aoû - 17:52 (2012)Youri, tu penserais quoi au fur et à mesure que tu réponds à des messages sur ce sujet qu'on les déplace dans un forum ou un sujet dédié où il n'y aurait que tes réponses et pas les questions? Et où ça serait un peu organisé?
Posté par
Nuri Yuri le
28 Aoû - 18:49 (2012)Ça peut être bien
J'essaierais de voir ça quand je réécrirais la première réponse.
Posté par
Elric le
29 Aoû - 13:51 (2012)Hello à toi !
Je te remercie pour ce Topic génial !
Je voudrais te demander une chose :
Comment on fait pour faire défiler le dummy des messages de y = 336 à y = 283 (par exemple)
J'ai essayé de me baser sur Pokemon_Battle_Trainer (où les trainers défilent) nénamoins, je n'ai réussi qu'à faire bugger le jeu (à cause d'une boucle infinie qui ne break pas)...
Merci d'avance !
Posté par
Arc-Arceus le
29 Aoû - 18:03 (2012)Yay !! Génial ce topic ! Je pense que pas mal de monde en rêvait.
On peut poser des questions ?! Vrai ?! Alors j'y vais :
Dand un script, je crée une entité sous forme de tableau contenant des caractéristiques variables. Dans la suite, je veux affecter automatiquement une valeur aux variables du tableau en allant pêcher ces dernières dans une matrice préalablement définie. Donc en fonction d'une $Variable, je vais sur (I ligne, J colonne) et je retranscris ça dans l'Objet tableau... c'est peut-être très con mais je pêche...
Peux-tu m'aider (*s'teuplait ?*) =3
Posté par
Nuri Yuri le
29 Aoû - 18:28 (2012)Je comprends pas entièrement le sens de ta question... Donne moi un exemple du tableau / de la matrice et de ce que ça devrait donner au final ou reformule.
Posté par
Arc-Arceus le
29 Aoû - 18:34 (2012)Ok :
Au début, on a la matrice A(n,p). Définie.
Ensuite :
array = [a, b, c]
=> Si $Variable == desfrites
alors array = [paramètres de la case i,j dans A]
etc...
Je pense pas arriver à être plus explicite... XD mais il me manque la méthode...
Posté par
Nuri Yuri le
29 Aoû - 18:49 (2012) Code: |
array=[1,2,3,4,5,6] matrice=Marshal.load("matrice") #supposons que matrice contient l'objet voulu if $Variables == :desfrites array.clear array.push(matrice[i,j]) #Dans le cas où matrice est une Table ce qui implique que des fixnums au final array=[matrice[i,j]] elsif $Variable == :rien matrice[i][j].each_index do |k| array[k]=matrice[i][j][k] #Dans le cas où la matrice est un ensemble de tableaux #Tu peux aussi faire traitement_tablea(k,array,matrice) si tu veux faire des choses spéciales comme des additions. end end |
Sérieusement je vois pas quel est ton but dans tout ça donc je sens que ce que je te donne n'est pas bon donc...
Posté par
Arc-Arceus le
29 Aoû - 18:56 (2012)Merci, je vais essayer (en sachant que la matrice ne contient pas que des Fixnum). ^^
Posté par
Elric le
30 Aoû - 10:52 (2012)Merci Nyuki ! Je vais essayer ça tout de suite !
EDIT : Je remplace "i" par quoi ?
Posté par
Nuri Yuri le
30 Aoû - 13:35 (2012)Tu peux remplacer i par j ou ma_variable, c'est une variable locale.
Posté par
Arc-Arceus le
30 Aoû - 13:49 (2012)@elric : Ce n'est pas i qu'il faut remplacer, mais "dummy" en fonction du nom qu'il porte dans le reste du script. =)
Je pense que c'était le but du commentaire de Nyuky.
Posté par
Elric le
30 Aoû - 16:10 (2012)N'empêche que ça marche pas ! Où est-ce que je dois mettre ce code ?
Posté par
The_Doctor le
30 Aoû - 20:58 (2012)Nyuky j'ai une demande y'a t'il un script ( pas pour un event mais un vrai script ) pour la condition de " si le heros est tourné vers " merci d'avance au grand(e) Nyuky ( je suis pas sur si t'es un gars ou une fille )
Posté par
og_loc-TATOO le
30 Aoû - 23:11 (2012)Il est les deux pour éviter la jalousie
Posté par
Nuri Yuri le
30 Aoû - 23:22 (2012)$game_player.direction
À toi de voir quelle valeur tu veux.
Posté par
Elric le
31 Aoû - 00:43 (2012)J'ai un problème avec ton code. Le truc, c'est que le dummy s'affiche directement à 283, on ne le voit pas défiler ! Aurais-tu une idée du problème ?
Posté par
Nuri Yuri le
31 Aoû - 00:47 (2012)Envois le code exacte que t'as mis.
Posté par
Elric le
31 Aoû - 00:53 (2012)J'ai mis exactement le même que le tien, mais voilà :
Code: |
#============================================================================== # ■ Window_Message # Pokemon Script Project - Krosk # 18/07/07 #----------------------------------------------------------------------------- # Scène à ne pas modifier de préférence #----------------------------------------------------------------------------- # #-----------------------------------------------------------------------------
class Window_Message < Window_Selectable #-------------------------------------------------------------------------- # #-------------------------------------------------------------------------- def initialize # Redéfinition taille du cadre super(21, 342, 597, 126) self.contents = Bitmap.new(width - 32, height - 32) self.visible = false self.z = 9998 self.opacity = 0 @dummy = Sprite.new @dummy.bitmap = RPG::Cache.picture(POKEMON_S::MSG) @dummy.visible = false @dummy.z = 9997 @fade_in = false @fade_out = false @contents_showing = false @cursor_width = 0 @speed_defilement = POKEMON_S::SPEED_MSG self.active = false self.index = -1 end #-------------------------------------------------------------------------- # #-------------------------------------------------------------------------- def reset_window # Redéfinition if $game_temp.in_battle self.y = 342 @dummy.y = 336 else case $game_system.message_position when 0 # 上 self.y = 6 @dummy.y = 0 when 1 # 中 self.y = 166 @dummy.y = 160 when 2 # Redéfinition position du cadre inférieur self.y = 342 @dummy.y = 336 336.step(283,-1) do |i| @dummy.y=i #A remplacer par la bonne variable Graphics.update end when 3 self.y = $position + 6 @dummy.y = $position $game_system.message_position = 2 end end case $game_system.message_frame when 0 #self.opacity = 255 @dummy.opacity = 255 when 1 #self.opacity = 0 @dummy.opacity = 0 when 2 #self.opacity = $opacite @dummy.opacity = $opacite $game_system.message_frame = 0 else #self.opacity = 0 @dummy.opacity = 0 end self.back_opacity = 255 end #-------------------------------------------------------------------------- # #-------------------------------------------------------------------------- def update super # フェードインの場合 if @fade_in self.contents_opacity += 24 if @input_number_window != nil @input_number_window.contents_opacity += 24 end if self.contents_opacity == 255 @fade_in = false if @speed_defilement != 0 refresh end end return end # 数値入力中の場合 if @input_number_window != nil @input_number_window.update # 決定 if Input.trigger?(Input::C) $game_system.se_play($data_system.decision_se) $game_variables[$game_temp.num_input_variable_id] = @input_number_window.number $game_map.need_refresh = true # 数値入力ウィンドウを解放 @input_number_window.dispose @input_number_window = nil $nb_min = nil $nb_max = nil terminate_message end return end # メッセージ表示中の場合 if @contents_showing # 選択肢の表示中でなければポーズサインを表示 if $game_temp.choice_max == 0 self.pause = true end # キャンセル if Input.trigger?(Input::B) if $game_temp.choice_max > 0 and $game_temp.choice_cancel_type > 0 $game_system.se_play($data_system.cancel_se) $game_temp.choice_proc.call($game_temp.choice_cancel_type - 1) terminate_message end end # 決定 if Input.trigger?(Input::C) if $game_temp.choice_max > 0 $game_system.se_play($data_system.decision_se) $game_temp.choice_proc.call(self.index) end terminate_message end return end # フェードアウト中以外で表示待ちのメッセージか選択肢がある場合 if @fade_out == false and $game_temp.message_text != nil @contents_showing = true $game_temp.message_window_showing = true reset_window if @speed_defilement == 0 refresh end self.visible = true @dummy.visible = true Graphics.frame_reset self.contents_opacity = 0 if @input_number_window != nil @input_number_window.contents_opacity = 0 end @fade_in = true return end # 表示すべきメッセージがないが、ウィンドウが可視状態の場合 if self.visible @fade_out = true @dummy.opacity = 0 #self.opacity -= 48 if @dummy.opacity == 0 #self.opacity == 0 self.visible = false @dummy.visible = false @fade_out = false $game_temp.message_window_showing = false end return end end #-------------------------------------------------------------------------- # #-------------------------------------------------------------------------- def refresh self.contents.clear self.contents.font.color = normal_color self.contents.font.name = $fontface self.contents.font.size = $fontsize text_count = 0 x = y = 0 push = false @cursor_width = 0 # 選択肢なら字下げを行う if $game_temp.choice_start == 0 x = 8 end # 表示待ちのメッセージがある場合 if $game_temp.message_text != nil text = $game_temp.message_text # 制御文字処理 begin last_text = text.clone text.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] } # MODIF text.gsub!(/\\[Pp]\[([0-9]+)\]/) { $string[$1.to_i] } end until text == last_text text.gsub!(/\\[Nn]\[([0-9]+)\]/) do $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : "" end # 便宜上、"\\\\" を "\000" に変換 text.gsub!(/\\\\/) { "\000" } # "\\C" を "\001" に、"\\G" を "\002" に変換 text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" } text.gsub!(/\\[Gg]/) { "\002" } # c に 1 文字を取得 (文字が取得できなくなるまでループ) while ((c = text.slice!(/./m)) != nil) # \\ の場合 if c == "\000" # 本来の文字に戻す c = "\\" end # \C[n] の場合 if c == "\001" # 文字色を変更 text.sub!(/\[([0-9]+)\]/, "") color = $1.to_i if color >= 0 and color <= 7 self.contents.font.color = text_color(color) end # 次の文字へ next end # \G の場合 if c == "\002" # ゴールドウィンドウを作成 if @gold_window == nil @gold_window = Window_Gold.new @gold_window.x = 560 - @gold_window.width if $game_temp.in_battle @gold_window.y = 192 else @gold_window.y = self.y >= 128 ? 32 : 384 end @gold_window.opacity = 255 @gold_window.back_opacity = 255 end # 次の文字へ next end # 改行文字の場合 if c == "\n" # 選択肢ならカーソルの幅を更新 if y >= $game_temp.choice_start @cursor_width = [@cursor_width, x].max end # y に 1 を加算 y += 1 x = 0 # 選択肢なら字下げを行う if y >= $game_temp.choice_start x = 8 end # 次の文字へ next end # 文字を描画 self.contents.draw_text(4 + x, 32 * y, 40, 32, c) text_count += 1 Input.update if Input.trigger?(Input::C) push = true end if text_count == @speed_defilement and @speed_defilement != 0 and push == false Graphics.update #$game_map.update $scene.update#spriteset.update text_count = 0 end # x に描画した文字の幅を加算 x += self.contents.text_size(c).width end end # 選択肢の場合 if $game_temp.choice_max > 0 @item_max = $game_temp.choice_max self.active = true self.index = 0 end # 数値入力の場合 if $game_temp.num_input_variable_id > 0 @input_number_window = Window_InputNumber.new($game_temp.num_input_digits_max) @input_number_window.x = self.x + 8 @input_number_window.y = self.y + $game_temp.num_input_start * 32 end end #-------------------------------------------------------------------------- # #-------------------------------------------------------------------------- def update_cursor_rect if @index >= 0 n = $game_temp.choice_start + @index self.cursor_rect.set(0, n * 32, 32, 32) else self.cursor_rect.empty end end end
class Interpreter def setup_choices(parameters) # Redéfinition # choice_max に選択肢の項目数を設定 $game_temp.choice_max = parameters[0].size # message_text に選択肢を設定 for text in parameters[0] # Espaces supplémentaires $game_temp.message_text += " " + text + "\n" end # キャンセルの場合の処理を設定 $game_temp.choice_cancel_type = parameters[1] # コールバックを設定 current_indent = @list[@index].indent $game_temp.choice_proc = Proc.new { |n| @branch[current_indent] = n } end end
|
Posté par
The_Doctor le
31 Aoû - 08:37 (2012)Bon j'ai 2 autres requête a te faire Nyuky les voici :
-1 comment mettre le nom du premier pokemon de l’équipe en script ( je sais comment faire dans les message d'event mais je suis pas sur que c'est pareil )
-2 comment mettre en condition l'appui d'une touche ( du style " si le héros appui sur "C" ça fait telle ou telle truc " )
voila j’espère que c'est pas trop
merci d'avance
EDIT pas très visible : Quelle partit de
Code: |
name=String.new name<<$pokemon_party.actors[0].name if $pokemon_party.size>0 |
jne doit modifier par name que je souhaite ( je n'ait pas trop comprit ta phrase )
Posté par
Elric le
31 Aoû - 16:52 (2012)Merci Nyuki, ça marche parfaitement bien.
EDIT : J'aurais une autre question :
Comment on fait, en script, pour dire : si l'objet "Potion" est possédé ?
Posté par
The_Doctor le
31 Aoû - 16:59 (2012)Ah moi je sais
Code: |
$pokemon_party.item_got(id) |
et tu remplace par l'id de l'objet ici ce sera :
Code: |
$pokemon_party.item_got(13) |
Je n'en suis pas sur mais je le suis presque
PS J'ai trouvé le code sur ce sujet : ./3687-Script-Liste-de-commandes-utiles…
Posté par
Xyrram le
31 Aoû - 17:30 (2012)J'ai fait comme me l'a dit yuki pour les condition et sa a donner sa:
Code: |
if Input.trigger?(Input::C) case $pokemon_party.actors[id].loyalty # Où id est l'id du Pokémon when >=70 draw_text_contour(189, 293, 50, 25, "Moyen", 0) when >=120 draw_text_contour(189, 293, 50, 25, "Bon", 0) when >=160 draw_text_contour(189, 293, 50, 25, "Tres bon", 0) when >=180 draw_text_contour(189, 293, 50, 25, "Exelent", 0) when >=250 draw_text_contour(189, 293, 50, 25, "Symbiose", 0) end end
|
Mais il y a une erruere de syntaxe avant when
Que dois-je faire?
Posté par
The_Doctor le
31 Aoû - 17:54 (2012)J'ai légèrement modifier le script ca ne met plus d'erreur de syntax mais ca marche pas si j'appuis sur C ca ne fait rien
Code: |
#----------------------------------------------------------------------------- # ● Bonheur # Le bonheur est comme dans HG/SS # Partie modifiable a loisir #----------------------------------------------------------------------------- if Input.trigger?(Input::C) case $pokemon_party.actors[0].loyalty when 0..70 draw_text_contour(189, 293, 50, 25, "Il ne vous aime pas trop", 0) when 71..120 draw_text_contour(189, 293, 50, 25, "Il vous aime un peu mais se méfie", 0) when 121..160 draw_text_contour(189, 293, 50, 25, "Il vous aime beaucoup", 0) when 161..180 draw_text_contour(189, 293, 50, 25, "Il chante et dance un peu", 0) when 181..255 draw_text_contour(189, 293, 50, 25, "Il est super heureux avec vous", 0) end end |
J'ai aussi modifier les parole pour mon projet mais on peut les modifier
Posté par
Xyrram le
31 Aoû - 18:04 (2012)He bien il faudrait que tu fasse >=70 je pense
Posté par
The_Doctor le
31 Aoû - 18:07 (2012)Non mais j'ai essayer ca et ca marche pas il faut le truc des 2 petit points
Sinon j'ai une question : où es-ce que tu le met le script pour le bonheur moi je l'ai mit a la fin du script follow me de Brendan
Posté par
Xyrram le
31 Aoû - 18:11 (2012)Moi aussi^^ mais je ne pense pas que se soit ça
Posté par
Elric le
31 Aoû - 18:45 (2012)Merci dab777, ça devrait marcher compte tenu de ta source !
Posté par
The_Doctor le
31 Aoû - 18:54 (2012)logique c'est Nyuky la source mais sinon quelqu'un pourrait nous aidé ou bien je fait un autre sujet pour arréter un peu de HS
Posté par
Elric le
31 Aoû - 19:27 (2012)En event ce serait vraiment plus simple parce que là vous vous ensablez !!
Posté par
The_Doctor le
31 Aoû - 19:28 (2012)ensablez ? Ca veux dire quoi
Posté par
Xyrram le
31 Aoû - 19:28 (2012)Ouai mais on serait plus fier si se serait un script et puis se sera moins encobrant le script
Posté par
Elric le
31 Aoû - 20:18 (2012) dab777 a écrit: |
ensablez ? Ca veux dire quoi |
S'enfouir dans le sable ! (cf. Animé de Square Enix : FMA)
@Dragonstar => Il faut paramétrer beaucoup de choses : Le héros qui regarde le Pokémon, les opérateurs, et il ne faut pas utiliser draw_text, mais afficher_message !
Posté par
The_Doctor le
31 Aoû - 20:20 (2012)le héros qui regarde le pokemon a été deja paramètrer il faut juste tester mais les opérareur c'est quoi et merci pour le bonne affichage du message
Posté par
Xyrram le
31 Aoû - 20:25 (2012)Oui merci BEAUCOUP et oui Dab a raison que sont les opérateurs?
Posté par
The_Doctor le
31 Aoû - 20:32 (2012)apparement on s'y connais presque autant en script bon j'espere que cette histoire sera vite réglée
Posté par
Xyrram le
31 Aoû - 20:35 (2012)Oui a se que je vois.
On deverait travailler ensemble
.
Sinon yuri pourait tu expliquer l'affichage de bitmap
Posté par
Elric le
31 Aoû - 20:36 (2012)Les opérateurs sont les signes que tu utilises en math comme : +, -, *, /, =, <, >, <=, >=... etc.
Pour votre cas, je suppose qu'il faudrait essayer ça :
Code: |
if $pokemon_party.actors[0].loyalty <= 70 # Code pour afficher le message elsif $pokemon_party.actors[0].loyalty > 70 and $pokemon_party.actors[0].loyalty < 120 # Code pour afficher le message ... ... ... end
|
Oubliez afficher_message, ça ne marchera pas.
Posté par
Xyrram le
31 Aoû - 20:50 (2012)Eh bien on entend le bruit programer 1 fois puis plus rien.
Posté par
Elric le
1 Sep - 11:16 (2012)Hellow à toi !
J'ai une question, s'il te plait :
Je voudrais décaler le texte qui s'affiche dans un message de 50 px en "x", cependant, je n'ai pas trouvé le bout de code à modifier.
Merci d'avance !
Posté par
Nuri Yuri le
1 Sep - 11:28 (2012)Dans Window_Message* tu as cette ligne : draw_msg_text(4 + x, 16 * y, 12, 32, c, 0, @color) remplace le 4 par 54 ce qui donnera : draw_msg_text(54 + x, 16 * y, 12, 32, c, 0, @color).
Édit : Sinon, j'aimerais que vous me posiez plus des questions sur le ruby plutôt que des morceau de codes.
Posté par
Arc-Arceus le
1 Sep - 14:06 (2012)J'en ai une, de question. (lève le doigt)
=> Peux-tu nous faire un topo sur les listes (comme ce qui a été fait pour les conditions), sur leur nature, leur utilisation et la façon de les manipuler ? Parce que j'ai regardé ça de très loin, pour être honnête...
Posté par
Elric le
1 Sep - 18:48 (2012)Hellow à toi !
Je te remercie pour ton aide précieuse.
J'aimerais également (je sais c'est trop) apprendre comment utiliser la fonction "rand", je n'ai jamais compris.
Merci d'avance !
Posté par
Xyrram le
8 Déc - 20:29 (2012)J'ai une question:
Que sont les arguments en Ruby?
Posté par
Xyrram le
8 Déc - 22:45 (2012)Mais alors quant un script manque d'arguments cella veut dire qu'il lui faut:
Def...
Script
Return
End
Posté par
Ze_Jirachi le
11 Avr - 15:24 (2013)Bonjour Yuri! Je postes ici car je n'ai pas vraiment compris le principe pour réaliser une scène... J'ai essayé de voir le tuto sur le-site-dont-je-ne-citerai-pas-le-nom mais j'ai rien compris. Pourrais-tu m'expliquer?
Posté par
Ram' le
13 Avr - 17:04 (2013)J'ai divisé les parties que j'ai réussi à isoler dans une section spéciale Yuri.
Par contre il y a certaines choses auxquelles j'ai préféré ne pas toucher ne sachant pas vraiment ce qui allait avec quel autre message.
Posté par
Zohran le
15 Avr - 14:39 (2013)Merci par avance pour ce topique, je souhaiterais créer pour un projet une base de données programmées de A à Z. Voilà ma question:
Par exemple (ce ne sera pas le but de ma programmation), si je souhaitais créer en script une classe qui donne tout ce qui constitue ce qu'est un pokémon, comment dois-je procéder? (créer attribut niveau, pv... etc)
Ensuite comment utiliser ses attributs dans des interfaces, en fait je souhaite apprendre les choses les plus fondamentales et aussi les plus dures du ruby...
Autre question: A quoi sert un module, je suis pas sur d'avoir compris...
Posté par
Nuri Yuri le
20 Avr - 08:55 (2013)T'as deux choix, coder une classe de A à Z, ce qui te permettra de créer des méthodes spécifique sans avoir à "patcher" cette classe (réécrire dedans en gros) ou passer la classe Struct.
Dans les deux cas les effets sont les même sauf qu'avec la classe Struct, tu n'as pas à mettre les attributs et à coder la fonction d'initialisation, en contre partie toute les variables non précisé lors de la création de l'objet seront mises à nil. (Peut être gênant).
Voici les prototypes :
Avec Struct Code: |
Pokemon=Struct.new(:base_hp,:atk,:def,...) #J'ai mis ... pour ne pas tout écrire il faudra les remplacer par toute les variables. #<...> #Utilisation de la struct. @Pokemon1=Pokemon.new(5,1,3,...) @Pokemon1.base_hp=6 print(@Pokemon1.atk) data=Marshal.dump(@Pokemon1) #Retourne un string correspondant au data sauvé. |
Sans Struct (mais beaucoup plus maitrisé)
Code: |
class Pokemon attr_accessor :name def initialize(*args) @base_hp=args[0].to_i.abs #Là je maîtrise la valeur car je la force à être positive @atk=args[1] #<...> @name=args[n] end def base_hp() return @base_hp=1 if(base_hp<=0) return @base_hp end def base_hp=(value) return if(value<=0) @base_hp=value end #<...> end #<...> @Pokemon1=Pokemon.new(5,1,3,...) @Pokemon1.base_hp=-6 print(@Pokemon1.base_hp) #Affiche 5 car -6 <= 0 data=Marshal.dump(@Pokemon1) #Retourne un string correspondant au data sauvé.
|
Après pour la base de données à toi de t'organiser, tu peux faire comme PSP 1.0 où l'on enregistre tous les datas dans des fichiers séparés ou alors faire comme PSP 0.7 en enregistrant tout dans un seul fichier mais en utilisant des classes Pokemon (ou Data_Pokemon selon le nom que tu donnes).
C'est là le but des classes, avoir des instances différentes pour travailler et maitriser le data.
Pour ce qui est des modules, c'est légèrement différent.
Ils servent à fournir des méthodes ou un travail complet mais ne génèrent pas d'instance à leur nom car ce sont eux même des instances au détail près, il faut expliciter les méthodes que l'on veut rendre utilisable sans include.
Les modules peuvent être vu comme des conteneurs, sur PSP c'est dans le module POKEMON_S qu'il y a la classe Pokemon et tout ce qui s'en rapproche. Sur PSP v1.0 on utilise des modules pour les scènes qui n'ont pas besoins d'instances comme Scène_Title. Elle a besoins d'être lancé qu'une fois donc on la met dans un module, par contre on doit gérer le vidage des variables car les modules sont des instances sur la durée et tant qu'on ne les efface pas explicitement ils ne seront pas libérés par le GC.
Code: |
module Scene_Title module_function #J'explicite que tout ce qui suit sera des méthodes utilisable sans include : Scene_Title.main() def new() return self end def main() print("Vous avez lancé Scene_Title") $scene=Scene_Map.new end end |
Je te déconseille pour le moment d'utiliser cette manière de coder avec les modules car il faut un peu d'expérience et savoir ce que contiennent réellement des variables.
Quand tu sauras lancer Scene_Title de cette manière $scene=variable.new, tu pourras probablement commencer à coder des modules destinés uniquement au travail et non au stockage de méthode ou constante.
Posté par
Zohran le
20 Avr - 21:58 (2013)Je te remercie beaucoup d'avoir pris le temps de me répondre, tu commences à me permettre de m'améliorer considérablement en script, je vais garder tes explications sous la main. Je reposterais d'autres questions plus tard dès que j'aurais bien assimilé cela. Merci
Ca fait plaisir d'avoir un bon scripteur qui aide des apprentis tel que moi, parce que à part RPG Maker, je n'avais jamais programmé de ma vie, je ne savais pas coder, j'ai appris ce que je sais faire par moi même en analysant des scripts et en lisant quelques tuto de Tonyryu, mais malheureusement, les tutos ne sont pas assez nombreux pour le ruby sur RPG Maker pour me permettre d'aller beaucoup plus loin en script. Donc encore MERCI
QUESTION: Dans le script sans structure, tu as mis un attr_accessor: name, je voudrais savoir pourquoi... serait-ce-parce que en fait les pts de vie, attaque et autre existe déjà, tu as donc rajouté cet objet inexistant, cest pour ça?
2ème quesion: Où je peux voir les objets existants tels que les PV, dans l'aide RGSS de rpg maker? Dans les class RPG? Ou les class Game existantes?
PS: Coder une classe nouvelle sans structure me parait plus propre et plus clair non? Personnellement, je pense que coder une classe neuve sera moins fouillie...
EDIT: Autre question-> la différence entre attr_reader et attr_accessor ?