Day.png);">
Apprendre


Vous êtes
nouveau sur
Oniromancie?

Visite guidée
du site


Découvrir
RPG Maker

RM 95
RM 2000/2003
RM XP
RM VX/VX Ace
RM MV/MZ

Apprendre
RPG Maker

Tutoriels
Guides
Making-of

Dans le
Forum

Section Entraide

Tutos: Checklist de la composition (...) / Sorties: Dread Mac Farlane - episode 8 / Sorties: Dread Mac Farlane - episode 7 / Jeux: Ce qui vit Dessous / News: Quoi de neuf sur Oniromancie (...) / Chat

Bienvenue
visiteur !




publicité RPG Maker!

Statistiques

Liste des
membres


Contact

Mentions légales

375 connectés actuellement

29379720 visiteurs
depuis l'ouverture

9087 visiteurs
aujourd'hui



Barre de séparation

Partenaires

Indiexpo

Akademiya RPG Maker

Blog Alioune Fall

Fairy Tail Constellations

Kingdom Ultimate

Lunae - le bazar d'Emz0

Leo-Games

Hellsoft

Tous nos partenaires

Devenir
partenaire



forums

Index du forum > Entraide > [RESOLU] [RMVX Ace] Affichage d'image selon position curseur


arttroy - posté le 09/09/2012 à 01:44:21 (2394 messages postés)

❤ 0

Just working

Domaine concerné: script
Logiciel utilisé: RMVX Ace
Bonsoir, j'ai de nouveau un petit souci. Je voudrais ajouter des images dans mon Scene_Skill qui changeraient suivant la position du curseur (ou le type de compétence sélectionné c'est pareil de toutes façons) dans la @command window (Window_SkillCommand)... J'ai essayé un truc mais ça ne fonctionne pas.

Je met une image sous spoiler pour illustrer ce que je veux dire (encadré rouge):

Spoiler (cliquez pour afficher)



Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
  def create_image_pierres
    @sprite_pierre = Sprite.new
    @sprite_pierre.bitmap = Cache.picture("")
    @sprite_pierre.x = 370
    @sprite_pierre.y = 160
    @sprite_pierre.z = 4
    update_pierre_system
  end
  def update_pierre_system
    if @command_window.index == 0
      @sprite_pierre.bitmap = Cache.picture("EcriturePierreFeu")
    elsif @command_window.index == 1
      @sprite_pierre.bitmap = Cache.picture("EcriturePierreEau")
    elsif @command_window.index == 2
      @sprite_pierre.bitmap = Cache.picture("EcriturePierreFoudre")
    elsif @command_window.index == 3
      @sprite_pierre.bitmap = Cache.picture("EcriturePierreTerre")
    elsif @command_window.index == 4
      @sprite_pierre.bitmap = Cache.picture("EcriturePierreVent")
    end
  end
  def dispose_pierre_system
    @sprite_pierre.dispose
  end
 
 



Donc là ça ne fonctionne pas parce que cette fenêtre à proprement parler ne dispose pas d'un "index" il me faudrait plutôt un truc du genre :
if type de compétence == "PierreFeu"

mais je ne trouve pas comment faire...

Anti-inconstructivité / Pétition pour que le mot making soit inscrit dans le dictionnaire ?


Crystal - posté le 09/09/2012 à 02:47:13 (2087 messages postés) -

❤ 0

Écris un truc du genre:

Portion de code : Tout sélectionner

1
2
3
4
5
case @command_window.commands[@command_window.index]
when "Machin"; ma_fonction("machin")
when "Machin2"; ma_fonction("machin2")
...
end



Utiliser "case" dans ce genre de situation fait plus propre dans un code. Et si jamais tu veux une même image pour plus d'une option, tu peux écrire simplement when "A", "B"; blablabla. Les if suivis de elsif à n'en plus finir, ça fait que tu as tout plein de lignes et c'est facile de faire des erreurs quand tu te repères plus. Bon, ton cas n'est pas très grave mais c'est juste un petit conseil pour l'avenir.

Si tu veux faire encore plus simple, voici comment j'aurais écrit ta fonction:

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
9
10
11
def update_pierre_system
  @sprite_pierre.bitmap = Cache.picture((
  case @command_window.commands[@command_window.index]
  when "PierreFeu"; "EcriturePierreFeu"
  when "PierreEau"; "EcriturePierreEau"
  when "PierreFoudre"; "EcriturePierreFoudre"
  when "PierreTerre"; "EcriturePierreTerre"
  when "PierreVent"; "EcriturePierreVent"
  else; ""
  end)
end



Mais rendu là, c'est peut-être plus une question de style de code que de propreté. À toi de voir, moi perso je trouve que ça permet d'être plus clair et surtout d'éviter de répéter du code.


arttroy - posté le 09/09/2012 à 12:49:23 (2394 messages postés)

❤ 0

Just working

Ça ne fonctionne pas, à mon avis c'est parce que ce morceau de code provient de mon Scene_Skill (qui dépend du WindowSkillCommand et qui ne possède pas d'index puisque sa seule commande est

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
def make_command_list
    return unless @actor
    @actor.added_skill_types.sort.each do |stype_id|
      name = $data_system.skill_types[stype_id]
      add_command(name, :skill, true, stype_id)
  #    self.visible = false
    end
  end

)
il faudrait plutôt que je trouve comment dire :

si le curseur est dans la première colonne de la fenêtre Window_SkillCommand afficher l'image "EcriturePierreFeu"
si le curseur est dans la deuxième colonne de la fenêtre Window_SkillCommand afficher l'image "EcriturePierreEau"
si....

Je débute en script, alors pour ce qui est de faire du code propre je pense que j'en suis encore loin, donc tous les conseils sont bons à prendre et celui là en fait partie. Si je comprend bien c'est un Array que tu as fait pour éviter de répéter la ligne avec le "Cache.picture" ? Ça paraît logique en fait... J'ai encore bien du chemin à parcourir sur la voie des script...

Merci quand même (ça me servira certainement plus tard...) ,bonne journée.

Ah b..... j'ai beau chercher je trouve pas...
J'ai édité mon premier post comme j'ai fait quelques modifs (j'ai passé mon bout de code directement dans le Window_SkillCommand), mon texte s'affiche bien mais lorsque je change de type de compétences ça ne le modifie pas à l'écran...

Edit : Encore une journée passée à chercher...

Anti-inconstructivité / Pétition pour que le mot making soit inscrit dans le dictionnaire ?


Crystal - posté le 10/09/2012 à 00:16:14 (2087 messages postés) -

❤ 0

Il faudrait que tu me dises quelle erreur apparaît, je n'utilise pas VX.


arttroy - posté le 10/09/2012 à 10:19:19 (2394 messages postés)

❤ 0

Just working

Si je fais comme tu m'as dit mes "EcriturePierreFeu" n' apparaissent pas à l'écran. En faisant comme sur le premier post, ça m'affiche bien l'image pour "Pierre feu", mais lorsque je modifie la position du curseur (Window_SkillCommand) rien ne change....

Là pour l'instant le message d'erreur c'est "undefined method or variable current data for Window_SkillCommand" (enfin de tête c'est ça).

Anti-inconstructivité / Pétition pour que le mot making soit inscrit dans le dictionnaire ?


Crystal - posté le 10/09/2012 à 17:00:58 (2087 messages postés) -

❤ 0

Tu as écrit current_data sans le définir, c'est normal. Et j'espère que tu avais modifié au moins ce que j'ai écrit, vu que j'ai mis PierreFeu et non Pierre feu.


arttroy - posté le 10/09/2012 à 17:40:22 (2394 messages postés)

❤ 0

Just working

Oui oui j'avais modifié (je suis bidon mais pas à ce point là...enfin j'espère...).

Mais dans ce cas là qu'est ce que je dois mettre (pour le def_current_data, d'ailleurs je suis même pas sûr que ce soit ça dont j'ai besoin...) ? Parce que je vois vraiment pas, j'y ai passé mon dimanche et rien pas moyen de trouver...

Désolé ça peut vous sembler débile comme question mais je débute vraiment sur les scripts et j'ai encore un peu de mal à comprendre leur fonctionnement.

Mais c'est dingue j'arrive pas à trouver je suis en train de me faire les Window_... une par une rien...

Edit : Bon j'ai tout remis dans mon Scene_Skill, ça foirait à la sortie du menu, l'image s'effaçait mal (là au moins c'est nickel) mais toujours pas trouvé cette p..... de commande.

Anti-inconstructivité / Pétition pour que le mot making soit inscrit dans le dictionnaire ?


Mack - posté le 10/09/2012 à 20:46:04 (2288 messages postés) - staff

❤ 0

Nan, mais ton truc fou le dans Scene_Skill hein.


Ton premier truc est bon, c'est juste tes conditions qui sont débile :

Portion de code : Tout sélectionner

1
Si ("Pierre feu")


Si pierre feu quoi ?
C'un peu comme si j'allais voir un marchand de légume et que je lui demandais "Si cacahuète ?"

Toi tu veux le faire selon les index, donc il te suffit juste de faire comme pour le menu.
( C'est EXACTEMENT pareil. Même syntaxe, même principe. )

( Je prend note de tout les commentaires, même si je n'y répond pas )


arttroy - posté le 10/09/2012 à 21:39:02 (2394 messages postés)

❤ 0

Just working

Ah mince du coup j'ai zappé de remettre ma condition... Ben non justement ça marche pas avec l'index (vu que c'est le Window_Skill et que la seule ligne de commande que j'ai c'est :

Portion de code : Tout sélectionner

1
add_command(name, :skill, true, stype_id)



tu pense bien que c'est la première chose que j'ai essayé mais le logiciel considère toujours que l'index est égal à 0 quelle que soit la position du curseur dans la fenêtre

Anti-inconstructivité / Pétition pour que le mot making soit inscrit dans le dictionnaire ?


Mack - posté le 11/09/2012 à 09:21:08 (2288 messages postés) - staff

❤ 0

Moi quand je regarde @command_window.index, il change, même quand je mets plusieurs colonnes.
Surtout, que tu nous dis que ça marche pas, mais sans rien dire d'autre, du coup on peut pas t'aider.



De toute façon, dès qu'une fenêtre hérite de Window_Selectable ou de Window_Command, il a obligatoirement un index.

( Je prend note de tout les commentaires, même si je n'y répond pas )


arttroy - posté le 11/09/2012 à 13:20:38 (2394 messages postés)

❤ 0

Just working

D'accord donc mon idée première sur l'index était juste et il faut que je prenne l'habitude de tester les variables je n'y pense jamais. Du coup le souci vient peut être du fait que je donne pas les bonnes valeurs à ma condition (ou c'est au niveau des noms d'image que ça foire) je regarderais ça ce soir en rentrant chez moi.

Je te sens un peu gavé, j'avoue j'ai pas beaucoup détaillé le souci je ferais mieux la prochaine fois (parce qu'il y en aura c'est sûr).

En tout cas merci de prendre le temps de m'aider.

Edit : ben mince alors moi l'index reste à 0 je met mon Window_Skill en entier :

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
class Scene_HWSkill < Scene_ItemBase
  def start
    super
    create_help_window
    create_background
    create_actor_window
    create_command_window
    create_status_window
    create_item_window
    create_background_image
    create_background_image_b
    @command_window.index = 0
    if Input.trigger?(:RIGHT)
      @command_window.index += 1
    elsif Input.trigger?(:LEFT)
      @command_window.index -= 1
    end
    create_image_pierres
  end
  def terminate
    super
    dispose_background
    dispose_background_image
    dispose_background_image_b
    dispose_pierre_system
  end
  def create_background
    @sprite_menu = Sprite.new
    @sprite_menu.bitmap = Cache.picture("fond menu base 4")
    @sprite_menu.x = 270
    @sprite_menu.y = 115
    @sprite_menu.z = 4
  end
  def dispose_background
    @sprite_menu.dispose
  end
    def create_background_image
    @sprite = Sprite.new
    @sprite.bitmap = Cache.picture("fond")
  end
  def dispose_background_image
    @sprite.dispose
  end
  def create_background_image_b
    @sprite_b = Sprite.new
    @sprite_b.bitmap = Cache.picture("fond menu base 3")
    @sprite_b.x = 100
    @sprite_b.y = 115
  end
  def dispose_background_image_b
    @sprite_b.dispose
  end
  #--------------------------------------------------------------------------
  # * Create Command Window
  #--------------------------------------------------------------------------
  def create_command_window
    wy = @help_window.height
    @command_window = Window_SkillCommand.new(0, wy)
    @command_window.viewport = @viewport
    @command_window.help_window = @help_window
    @command_window.actor = @actor
    @command_window.set_handler(:skill,    method(:command_skill))
    @command_window.set_handler(:cancel,   method(:return_scene))
    @command_window.set_handler(:pagedown, method(:next_actor))
    @command_window.set_handler(:pageup,   method(:prev_actor))
  end
  #--------------------------------------------------------------------------
  # * Create Status Window
  #--------------------------------------------------------------------------
  def create_status_window
    y = @help_window.height
    @status_window = Window_SkillStatus.new(@command_window.width, y)
    @status_window.opacity = 0
    @status_window.back_opacity = 0
    @status_window.viewport = @viewport
    @status_window.actor = @actor
  end
  #--------------------------------------------------------------------------
  # * Create Item Window
  #--------------------------------------------------------------------------
  def create_item_window
    wx = 0
    wy = @status_window.y + @status_window.height
    ww = Graphics.width
    wh = Graphics.height - wy
    @item_window = Window_SkillList.new(370, 300, 250, wh)
    @item_window.actor = @actor
    @item_window.viewport = @viewport
    @item_window.help_window = @help_window
  #  @help_window.visible = false
    @item_window.set_handler(:ok,     method(:on_item_ok))
    @item_window.set_handler(:cancel, method(:on_item_cancel))
    @command_window.skill_window = @item_window
    @item_window.opacity = 0
    @item_window.back_opacity = 0
  end
  def create_image_pierres
    @sprite_pierre = Sprite.new
    @sprite_pierre.bitmap = Cache.picture("")
    @sprite_pierre.x = 370
    @sprite_pierre.y = 160
    @sprite_pierre.z = 4
    update_pierre_system
  end
  def update_pierre_system
    if @command_window.index == 0 and $game_party.item_number($data_armors[61])>0
      p @command_window.index
      @sprite_pierre.bitmap = Cache.picture("EcriturePierreFeu")
    elsif @command_window.index == 1 and $game_party.item_number($data_armors[62])>0
      p @command_window.index
      @sprite_pierre.bitmap = Cache.picture("EcriturePierreEau")
    elsif @command_window.index == 2 and $game_party.item_number($data_armors[63])>0
      p @command_window.index
      @sprite_pierre.bitmap = Cache.picture("EcriturePierreFoudre")
    elsif @command_window.index == 3 and $game_party.item_number($data_armors[64])>0
      p @command_window.index
      @sprite_pierre.bitmap = Cache.picture("EcriturePierreTerre")
    else @command_window.index == 4 and $game_party.item_number($data_armors[65])>0
      p @command_window.index
      @sprite_pierre.bitmap = Cache.picture("EcriturePierreVent")
    end
  end
  def dispose_pierre_system
    @sprite_pierre.dispose
  end
 
  #--------------------------------------------------------------------------
  # * Get Skill's User
  #--------------------------------------------------------------------------
  def user
    @actor
  end
  #--------------------------------------------------------------------------
  # * [Skill] Command
  #--------------------------------------------------------------------------
  def command_skill
    @item_window.activate
    @item_window.select_last
  end
  #--------------------------------------------------------------------------
  # * Item [OK]
  #--------------------------------------------------------------------------
  def on_item_ok
    @actor.last_skill.object = item
    determine_item
  end
  #--------------------------------------------------------------------------
  # * Item [Cancel]
  #--------------------------------------------------------------------------
  def on_item_cancel
    @item_window.unselect
    @command_window.activate
  end
  #--------------------------------------------------------------------------
  # * Play SE When Using Item
  #--------------------------------------------------------------------------
  def play_se_for_item
    Sound.play_use_skill
  end
  #--------------------------------------------------------------------------
  # * Use Item
  #--------------------------------------------------------------------------
  def use_item
    super
    @status_window.refresh
    @item_window.refresh
  end
  #--------------------------------------------------------------------------
  # * Change Actors
  #--------------------------------------------------------------------------
  def on_actor_change
    @command_window.actor = @actor
    @status_window.actor = @actor
    @item_window.actor = @actor
    @command_window.activate
  end
end
 



et mon Window_SkillCommand :

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#==============================================================================
# ** Window_SkillCommand
#------------------------------------------------------------------------------
#  This window is for selecting commands (special attacks, magic, etc.) on the
# skill screen.
#==============================================================================
 
class Window_SkillCommand < Window_Command
  #--------------------------------------------------------------------------
  # * Public Instance Variables
  #--------------------------------------------------------------------------
  attr_reader   :skill_window
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize(x, y)
    super(x, y)
    @actor = nil
    self.x = 100
    self.y = 70
  end
  #--------------------------------------------------------------------------
  # * Get Window Width
  #--------------------------------------------------------------------------
  def window_width
    return 550
  end
  #--------------------------------------------------------------------------
  # * Set Actor
  #--------------------------------------------------------------------------
  def actor=(actor)
    return if @actor == actor
    @actor = actor
    refresh
    select_last
  end
  #--------------------------------------------------------------------------
  # * Get Number of Lines to Show
  #--------------------------------------------------------------------------
  def visible_line_number
    return 1
  end
  def col_max
    return 5
  end
  #--------------------------------------------------------------------------
  # * Create Command List
  #--------------------------------------------------------------------------
  def make_command_list
    return unless @actor
    @actor.added_skill_types.sort.each do |stype_id|
      name = $data_system.skill_types[stype_id]
      add_command(name, :skill, true, stype_id)
  #    self.visible = false
    end
  end
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  def update
    super
    @skill_window.stype_id = current_ext if @skill_window
  end
  #--------------------------------------------------------------------------
  # * Set Skill Window
  #--------------------------------------------------------------------------
  def skill_window=(skill_window)
    @skill_window = skill_window
    update
  end
  #--------------------------------------------------------------------------
  # * Restore Previous Selection Position
  #--------------------------------------------------------------------------
  def select_last
    skill = @actor.last_skill.object
    if skill
      select_ext(skill.stype_id)
    else
      select(0)
    end
  end
end
 



Pour le coup, là j'ai aucun message d'erreur je vois pas ce qui peut foirer...

Anti-inconstructivité / Pétition pour que le mot making soit inscrit dans le dictionnaire ?


Mack - posté le 11/09/2012 à 17:47:31 (2288 messages postés) - staff

❤ 0

Bah ...
Normal quoi.

T'appelles jamais de méthode en continue pour changer l'apparence.
Faut que t'appelles une def update ( Sans oublier le super, de tête j't'ai déjà montrer comment faire avant ), et que t'y colles ton code qui change l'apparence.

( Dans ta Scene bien sur )

( Je prend note de tout les commentaires, même si je n'y répond pas )


arttroy - posté le 11/09/2012 à 17:53:59 (2394 messages postés)

❤ 0

Just working

D'accord merci je vois ce que tu veux dire, je vais faire ça de suite et oui effectivement tu m'avais montré mais désolé j'ai un peu le cerveau en compote ces temps ci ( saleté de comptabilité :sriden ben oui je suis retourné à l'école...). Et très honnêtement depuis jeudi dernier je me prend le chou avec ce truc, j'y voyais plus très clair...

Mon sauveur encore une fois il va falloir que je finisse par te payer si ça continue... Bah au pire si un jour on se croise IRL je te ferais un bon repas (je suis peu être bidon en ruby, mais pour ce qui est de la cuisine...)

Bonne fin de journée (j'espère...) et encore merci.

Edit : ça fonctionne nickel, plus qu'à rajouter un truc ou deux et mon Scene_Skill sera bouclé (et en plus pour le reste je devrais pas avoir de problèmes d'application).

Le système que j'avais imaginé pour les niveaux de mes pierres de chakra fonctionne c'est Golem GG ! Plus qu'à rajouter un petit affichage de variable et ce sera nickel :D

You're done F...... Skill Menu :mort

Anti-inconstructivité / Pétition pour que le mot making soit inscrit dans le dictionnaire ?

Index du forum > Entraide > [RESOLU] [RMVX Ace] Affichage d'image selon position curseur

repondre up

Suite à de nombreux abus, le post en invités a été désactivé. Veuillez vous inscrire si vous souhaitez participer à la conversation.

Haut de page

Merci de ne pas reproduire le contenu de ce site sans autorisation.
Contacter l'équipe - Mentions légales

Plan du site

Communauté: Accueil | Forum | Chat | Commentaires | News | Flash-news | Screen de la semaine | Sorties | Tests | Gaming-Live | Interviews | Galerie | OST | Blogs | Recherche
Apprendre: Visite guidée | RPG Maker 95 | RPG Maker 2003 | RPG Maker XP | RPG Maker VX | RPG Maker MV | Tutoriels | Guides | Making-of
Télécharger: Programmes | Scripts/Plugins | Ressources graphiques / sonores | Packs de ressources | Midis | Eléments séparés | Sprites
Jeux: Au hasard | Notre sélection | Sélection des membres | Tous les jeux | Jeux complets | Le cimetière | RPG Maker 95 | RPG Maker 2000 | RPG Maker 2003 | RPG Maker XP | RPG Maker VX | RPG Maker VX Ace | RPG Maker MV | Autres | Proposer
Ressources RPG Maker 2000/2003: Chipsets | Charsets | Panoramas | Backdrops | Facesets | Battle anims | Battle charsets | Monstres | Systems | Templates
Ressources RPG Maker XP: Tilesets | Autotiles | Characters | Battlers | Window skins | Icônes | Transitions | Fogs | Templates
Ressources RPG Maker VX: Tilesets | Charsets | Facesets | Systèmes
Ressources RPG Maker MV: Tilesets | Characters | Faces | Systèmes | Title | Battlebacks | Animations | SV/Ennemis
Archives: Palmarès | L'Annuaire | Livre d'or | Le Wiki | Divers