On a jamais assez de munitions | Domaine concerné: Script
Logiciel utilisé: Rpg Maker XP
Question 1:
Bonjour à tous !
Après avoir suivi ce super tuto:
https://www.rpg-maker.fr/index.php?page=tutos&id=38
J'ai réussi à mettre sur pied un petit menu fonctionnel.
Or, mes 3 paramètres suivant:
1
| @commands = ["Sac","Equipements","Compétences"] |
S'affichent verticalement alors que j'aimerai les voir s’afficher horizontalement. Je ne trouve pas la réponse à ma question en relisant le tutoriel, pouvez-vous donc m'indiquer ce que j'ai oublié pour obtenir le résultat souhaité s'il vous plait?
Voici le code de ma fenêtre:
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
| #==============================================================================
# ** Window_Inventaire
#------------------------------------------------------------------------------
# Menu de l'inventaire sur map
#==============================================================================
class Window_Inventaire < Window_Selectable
#--------------------------------------------------------------------------
# * Initialization
#--------------------------------------------------------------------------
def initialize()
#super(Pos x, Pos y, Largeur, Hauteur).
super(0, 380, 640, 100)
#"@column_max" définit le nombre de colonne dans la fenêtre (de manière horizontale).
@column_max = 3
#"@item_max" définit le nombre d'options.
@item_max = 3
#"@commands" définit un tableau contenant chacune de ces options.
# Qui sont des chaines de caractères.
@commands = ["Sac","Equipements","Compétences"]
#"contents" sert à afficher le texte (zone de texte).
self.contents = Bitmap.new(width - 32, @item_max * 32)
refresh
#"index" indique la position du curseur.
self.index = 0
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
# "contents.clear" sert à vider le refresh pour être sûr de travailler sur une
# zone "vide". A placer en début de "refresh".
self.contents.clear
# For i in "number" ... "number". Ici @item_max prend la valeur 2.
#Car état égale à 3, et l'index partant de 0.
for i in 0...@item_max
# PAramètre de l'index et de la couleur.
draw_item(i, normal_color)
end
end
# On renseigne le sparamêtres.
def draw_item(index, color)
# La couleur de la police d'écriture.
self.contents.font.color = normal_color
#On crée un rectangle vide.
# rect = Rect.new (/!\ PAramètres à identifier).
rect = Rect.new(4, 32 * index, self.contents.width - 8, 32)
# /!\ A identifier
self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
# Les paramètres "contents.draw_text" sont différents car il y a le rectangle.
# contents.draw.text (dimensions et position du rectangle, texte).
self.contents.draw_text(rect, @commands[index])
end
end
|
Question 2:
Ayant un peu avancé mon menu, je peux maintenant accéder à l'interface "Sac" (qui reprend le code de la window_item), affichant les objets/armes/armures que le joueur a en sa possession.
Problème, lorsque j'ajoute des objets/armes/armures à mon inventaire, ceux-ci sont visible dans mon menu "Sac" qu'après avoir ouvert le menu "item" pré-existant de RMXP.
Par déduction je pense donc qu'il manque à mon code du script permettant d'actualiser le contenue de l'inventaire, et que ce bout de script doit se trouver dans le Scene_Item.
Cependant, même après plusieurs essaie je ne suis pas arrivé à trouver quel est ce bout de script qui me manque.
Pouvez-vous m'aiguiller s'il vous plait?
Code de ma Window_Sac:
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
| #==============================================================================
# ** Window_Sac
#------------------------------------------------------------------------------
# Menu du sac sur map
#==============================================================================
class Window_Sac < Window_Selectable
#--------------------------------------------------------------------------
# * Initialization
#--------------------------------------------------------------------------
def initialize
#super(Pos x, Pos y, Largeur, Hauteur).
super(0, 380, 640, 100)
#contents sert à afficher le texte (zone de texte).
self.contents = Bitmap.new(width - 32, height - 32)
# 2 colones
@column_max = 2
refresh
#Curseur sur 0
self.index = 0
end
#--------------------------------------------------------------------------
# * Get Item
#--------------------------------------------------------------------------
def item
return @data[self.index]
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
if self.contents != nil
self.contents.dispose
self.contents = nil
end
@data = []
# Add item
for i in 1...$data_items.size
if $game_party.item_number(i) > 0
@data.push($data_items[i])
end
end
# Also add weapons and items if outside of battle
unless $game_temp.in_battle
for i in 1...$data_weapons.size
if $game_party.weapon_number(i) > 0
@data.push($data_weapons[i])
end
end
for i in 1...$data_armors.size
if $game_party.armor_number(i) > 0
@data.push($data_armors[i])
end
end
end
# If item count is not 0, make a bit map and draw all items
@item_max = @data.size
if @item_max > 0
self.contents = Bitmap.new(width - 32, row_max * 32)
for i in 0...@item_max
draw_item(i)
end
end
end
#--------------------------------------------------------------------------
# * Draw Item
# index : item number
#--------------------------------------------------------------------------
def draw_item(index)
item = @data[index]
case item
when RPG::Item
number = $game_party.item_number(item.id)
when RPG::Weapon
number = $game_party.weapon_number(item.id)
when RPG::Armor
number = $game_party.armor_number(item.id)
end
if item.is_a?(RPG::Item) and
$game_party.item_can_use?(item.id)
self.contents.font.color = normal_color
else
self.contents.font.color = disabled_color
end
x = 4 + index % 2 * (288 + 32)
y = index / 2 * 32
rect = Rect.new(x, y, self.width / @column_max - 32, 32)
self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
bitmap = RPG::Cache.icon(item.icon_name)
opacity = self.contents.font.color == normal_color ? 255 : 128
self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
self.contents.draw_text(x + 240, y, 16, 32, ":", 1)
self.contents.draw_text(x + 256, y, 24, 32, number.to_s, 2)
end
#--------------------------------------------------------------------------
# * Help Text Update
#--------------------------------------------------------------------------
def update_help
@help_window.set_text(self.item == nil ? "" : self.item.description)
end
end |
Si ce n'est pas suffisant, voici le code de ma Scene_Map:
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
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
| #==============================================================================
# ** Scene_Map
#------------------------------------------------------------------------------
# This class performs map screen processing.
#==============================================================================
class Scene_Map
#--------------------------------------------------------------------------
# * Main Processing
#--------------------------------------------------------------------------
def main
# Make sprite set
@spriteset = Spriteset_Map.new
# Make message window
@message_window = Window_Message.new
#///////////////////////////////////////////////////////
#--------------------------------------------------------------------------
# * Fenetres pour l'inventaire
#--------------------------------------------------------------------------
# Création des différentes fenêtres
@fenetre_sac = Window_Sac.new
@fenetre_equipements = Window_Equipements.new
@fenetre_competences = Window_Competences.new
@fenetre_inventaire = Window_Inventaire.new
@help_window = Window_Help.new # Fenetre de description
# Paramétrage des différents fenêtres
@fenetre_sac.visible = false
@fenetre_equipements.visible = false
@fenetre_competences.visible = false
@fenetre_inventaire.visible = false
@help_window.visible = false
@fenetre_sac.active = false
@fenetre_equipements.active = false
@fenetre_competences.active = false
@fenetre_inventaire.active = false
#///////////////////////////////////////////////////////
# Transition run
Graphics.transition
# Main loop
loop do
# Update game screen
Graphics.update
# Update input information
Input.update
# Frame update
update
# Abort loop if screen is changed
if $scene != self
break
end
end
# Prepare for transition
Graphics.freeze
# Dispose of sprite set
@spriteset.dispose
# Dispose of message window
@message_window.dispose
#///////////////////////////////////////////////////////////////////
# Inventaire
@fenetre_sac.dispose
@fenetre_equipements.dispose
@fenetre_competences.dispose
@fenetre_inventaire.dispose
# Item
@help_window.dispose
#///////////////////////////////////////////////////////////////////
# If switching to title screen
if $scene.is_a?(Scene_Title)
# Fade out screen
Graphics.transition
Graphics.freeze
end
end
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update
#//////////////////////////////////////////////////////////////////////
#--------------------------------------------------------------------------
# * Fenetres pour l'inventaire
#--------------------------------------------------------------------------
@fenetre_sac.update
@fenetre_equipements.update
@fenetre_competences.update
@fenetre_inventaire.update
# Si j'appuie sur Q j'affiche l'inventaire.
if Input.trigger?(Input::L)
@fenetre_inventaire.visible = true
@fenetre_inventaire.active = true
end
if @fenetre_inventaire.active == true
if Input.trigger?(Input::C)
case @fenetre_inventaire.index
when 0 #Sac
@fenetre_sac.visible = true
@fenetre_equipements.visible = false
@fenetre_competences.visible = false
@fenetre_inventaire.visible = false
@help_window.visible = true
@fenetre_sac.active = true
@fenetre_equipements.active = false
@fenetre_competences.active = false
@fenetre_inventaire.active = false
when 1 # Equipements
@fenetre_sac.visible = false
@fenetre_equipements.visible = true
@fenetre_competences.visible = false
@fenetre_inventaire.visible = false
@help_window.visible = false
@fenetre_sac.active = false
@fenetre_equipements.active = true
@fenetre_competences.active = false
@fenetre_inventaire.active = false
@help_window.visible = false
when 2 # Compétences
@fenetre_sac.visible = false
@fenetre_equipements.visible = false
@fenetre_competences.visible = true
@fenetre_inventaire.visible = false
@help_window.visible = false
@fenetre_sac.active = false
@fenetre_equipements.active = false
@fenetre_competences.active = true
@fenetre_inventaire.active = false
end
end
end
#//////////////////////////////////////////////////////////////////////
# Loop
loop do
# Update map, interpreter, and player order
# (this update order is important for when conditions are fulfilled
# to run any event, and the player isn't provided the opportunity to
# move in an instant)
$game_map.update
$game_system.map_interpreter.update
$game_player.update
# Update system (timer), screen
$game_system.update
$game_screen.update
# Abort loop if player isn't place moving
unless $game_temp.player_transferring
break
end
# Run place move
transfer_player
# Abort loop if transition processing
if $game_temp.transition_processing
break
end
end
# Update sprite set
@spriteset.update
# Update message window
@message_window.update
# If game over
if $game_temp.gameover
# Switch to game over screen
$scene = Scene_Gameover.new
return
end
# If returning to title screen
if $game_temp.to_title
# Change to title screen
$scene = Scene_Title.new
return
end
# If transition processing
if $game_temp.transition_processing
# Clear transition processing flag
$game_temp.transition_processing = false
# Execute transition
if $game_temp.transition_name == ""
Graphics.transition(20)
else
Graphics.transition(40, "Graphics/Transitions/" +
$game_temp.transition_name)
end
end
# If showing message window
if $game_temp.message_window_showing
return
end
# If encounter list isn't empty, and encounter count is 0
if $game_player.encounter_count == 0 and $game_map.encounter_list != []
# If event is running or encounter is not forbidden
unless $game_system.map_interpreter.running? or
$game_system.encounter_disabled
# Confirm troop
n = rand($game_map.encounter_list.size)
troop_id = $game_map.encounter_list[n]
# If troop is valid
if $data_troops[troop_id] != nil
# Set battle calling flag
$game_temp.battle_calling = true
$game_temp.battle_troop_id = troop_id
$game_temp.battle_can_escape = true
$game_temp.battle_can_lose = false
$game_temp.battle_proc = nil
end
end
end
#///////////////////////////////////////////////////////////////////////
# If B button was pressed
if Input.trigger?(Input::B)
if @fenetre_inventaire.visible == false
if @fenetre_sac.active == false
if @fenetre_equipements.visible == false
if @fenetre_competences.visible == false
# Switch to menu screen
$scene = Scene_Menu.new
else
@fenetre_competences.visible = false
@fenetre_inventaire.visible = true
@fenetre_competences.active = false
@fenetre_inventaire.active = true
end
else
@fenetre_equipements.visible = false
@fenetre_inventaire.visible = true
@fenetre_equipements.active = false
@fenetre_inventaire.active = true
end
else
@fenetre_sac.visible = false
@help_window.visible = false
@fenetre_inventaire.visible = true
@fenetre_sac.active = false
@fenetre_inventaire.active = true
end
else
@fenetre_inventaire.visible = false
@fenetre_inventaire.active = false
end
end
#/////////////////////////////////////////////////////////////////////////
# If debug mode is ON and F9 key was pressed
if $DEBUG and Input.press?(Input::F9)
# Set debug calling flag
$game_temp.debug_calling = true
end
# If player is not moving
unless $game_player.moving?
# Run calling of each screen
if $game_temp.battle_calling
call_battle
elsif $game_temp.shop_calling
call_shop
elsif $game_temp.name_calling
call_name
elsif $game_temp.menu_calling
call_menu
elsif $game_temp.save_calling
call_save
elsif $game_temp.debug_calling
call_debug
end
end
end
#--------------------------------------------------------------------------
# * Battle Call
#--------------------------------------------------------------------------
def call_battle
# Clear battle calling flag
$game_temp.battle_calling = false
# Clear menu calling flag
$game_temp.menu_calling = false
$game_temp.menu_beep = false
# Make encounter count
$game_player.make_encounter_count
# Memorize map BGM and stop BGM
$game_temp.map_bgm = $game_system.playing_bgm
$game_system.bgm_stop
# Play battle start SE
$game_system.se_play($data_system.battle_start_se)
# Play battle BGM
$game_system.bgm_play($game_system.battle_bgm)
# Straighten player position
$game_player.straighten
# Switch to battle screen
$scene = Scene_Battle.new
end
#--------------------------------------------------------------------------
# * Shop Call
#--------------------------------------------------------------------------
def call_shop
# Clear shop call flag
$game_temp.shop_calling = false
# Straighten player position
$game_player.straighten
# Switch to shop screen
$scene = Scene_Shop.new
end
#--------------------------------------------------------------------------
# * Name Input Call
#--------------------------------------------------------------------------
def call_name
# Clear name input call flag
$game_temp.name_calling = false
# Straighten player position
$game_player.straighten
# Switch to name input screen
$scene = Scene_Name.new
end
#--------------------------------------------------------------------------
# * Menu Call
#--------------------------------------------------------------------------
def call_menu
# Clear menu call flag
$game_temp.menu_calling = false
# If menu beep flag is set
if $game_temp.menu_beep
# Play decision SE
$game_system.se_play($data_system.decision_se)
# Clear menu beep flag
$game_temp.menu_beep = false
end
# Straighten player position
$game_player.straighten
# Switch to menu screen
$scene = Scene_Menu.new
end
#--------------------------------------------------------------------------
# * Save Call
#--------------------------------------------------------------------------
def call_save
# Straighten player position
$game_player.straighten
# Switch to save screen
$scene = Scene_Save.new
end
#--------------------------------------------------------------------------
# * Debug Call
#--------------------------------------------------------------------------
def call_debug
# Clear debug call flag
$game_temp.debug_calling = false
# Play decision SE
$game_system.se_play($data_system.decision_se)
# Straighten player position
$game_player.straighten
# Switch to debug screen
$scene = Scene_Debug.new
end
#--------------------------------------------------------------------------
# * Player Place Move
#--------------------------------------------------------------------------
def transfer_player
# Clear player place move call flag
$game_temp.player_transferring = false
# If move destination is different than current map
if $game_map.map_id != $game_temp.player_new_map_id
# Set up a new map
$game_map.setup($game_temp.player_new_map_id)
end
# Set up player position
$game_player.moveto($game_temp.player_new_x, $game_temp.player_new_y)
# Set player direction
case $game_temp.player_new_direction
when 2 # down
$game_player.turn_down
when 4 # left
$game_player.turn_left
when 6 # right
$game_player.turn_right
when 8 # up
$game_player.turn_up
end
# Straighten player position
$game_player.straighten
# Update map (run parallel process event)
$game_map.update
# Remake sprite set
@spriteset.dispose
@spriteset = Spriteset_Map.new
# If processing transition
if $game_temp.transition_processing
# Clear transition processing flag
$game_temp.transition_processing = false
# Execute transition
Graphics.transition(20)
end
# Run automatic change for BGM and BGS set on the map
$game_map.autoplay
# Frame reset
Graphics.frame_reset
# Update input information
Input.update
end
end
|
Merci d'avance à tous
Ps: Je l'ai déplacé de "questions conne sur script" pour pas encombrer.
Edit:
Après de nouveaux tests, il semblerait que l’actualisation de l'affichage se fasse juste en ouvrant le Scene_Menu via "echap", sans nécessairement aller jusqu'au Scene_Item.
Mais je n''ai toujours pas trouvé la solution à mon problème.
Edit:
Question 3:
Mon menu avançant, j'ai réussi à intégrer l'onglet équipements.
Tout fonctionne bien lorsque la fenêtre à une taille permettant l'affichage de tous les items en même temps (Armes, Armures, Bouclier, Chapeau, Accessoires), mais lorsque j'en ai modifié la taille seulement deux (les deux premiers items) s'affichent. Le menu se déroule mais sur des cases vides. J'ai divisé la fenêtre en deux colonnes mais ça ne change rien (à part que j'ai une colonne de sélection vide à droite).
Je pense que la solution à cette question doit être sensiblement la même que celle de la question 1. J'espère que quelqu'un saura m'orienter
Merci à tous !
|