Bienvenue visiteur !
|

Statistiques
Liste des membres
Contact
Mentions légales
79 connectés actuellement
26991201 visiteurs depuis l'ouverture
3309 visiteurs aujourd'hui

Partenaires





Tous nos partenaires
Devenir partenaire
|
arttroy -
posté le 09/09/2012 à 01:44:21 (2394 messages postés)
| 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)
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 (2008 messages postés)
| | Écris un truc du genre:
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:
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)
| 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
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 (2008 messages postés)
| | 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)
| 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 (2008 messages postés)
| | 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)
| 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 (2235 messages postés)
| | Nan, mais ton truc fou le dans Scene_Skill hein.
Ton premier truc est bon, c'est juste tes conditions qui sont débile :
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)
| 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 :
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 (2235 messages postés)
| | 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)
| 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 :
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 :
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 (2235 messages postés)
| | 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)
| 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é 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
You're done F...... Skill Menu 
|
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


|
|
|