Plop | Domaine concerné: script
Logiciel utilisé: RPG maker vx ace
Bonjour,
je suis entrain de construire un script de scène de voyage rapide : sélection de zone dans une liste et quand on sélectionne l'endroit, on se téléporte à la position voulue.
A priori le menu de sélection est ok (il me reste quelques bidouilles à faire). Et j'ai pas encore couvert la fenêtre de confirmation de téléportation, mais autrement ça marche.
Seulement voilà, j'aimerai que le background de ce menu soit une image, à savoir la carte du monde. Cette image étant plus grande que la résolution d'écran, je souhaite faire en sorte que lorsqu'on sélectionne une des zones de la liste, l'image se centre sur la position de la zone sur la carte du monde (idéalement avec une animation de translation d'image comme on le fait par événement). Malheureusement, je n'arrive pas à ne serait-ce qu'afficher l'image quand la scène est appelée. Je ne sais pas ce qui bloque, j'ai essayé de reproduire l'appel d'événement de création d'image, mais ça ne semble pas marcher, peut-être que le screen_manager ne tourne quand on est sur une autre scène ?
Si scene manager ne fonctionne pas, existe-t-il d'autres façon de bouger des images quand on est dans une scène particulière ?
EDIT : je confirme que les images de la map ne se mettent plus à jour quand on appelle une scène, donc au moins ça c'est sûr
EDIT2 : Okay du coup j'ai finalement décidé de copier les mises à jours d'images de Picture, puis je mets à jour l'image dans update.
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
|
class Window_BackgroundTravel < Window_Base
#back is the background file name
#cursor is the cursor file name
def initialize(back,cursor,x,y)
@old_x = x
@old_y = y
@x = x
@y = y
@duration = 0
@back_bitmap = Cache.picture(back)
@cursor_bitmap = Cache.picture(cursor)
super(-12, -12, 568, 440)
self.opacity = 0
#refresh
end
#544x416
def set_pos(x,y)
@x = x
@y = y
end
def dispose
@back_bitmap.dispose unless disposed?
@cursor_bitmap.dispose unless disposed?
super
end
#544/2 +60, 416/2
CENTER_X = 60 + 272
CENTER_Y = 208
def refresh
contents.clear
rect = Rect.new(@x-CENTER_X,@y-CENTER_Y,@back_bitmap.width,@back_bitmap.height)
contents.blt(0,0,@back_bitmap,rect,255)
rect2 = Rect.new(0,0,@cursor_bitmap.width,@cursor_bitmap.height)
contents.blt(CENTER_X-@cursor_bitmap.width/2,CENTER_Y-@cursor_bitmap.height/2,@cursor_bitmap,rect2,255)
end
def move(x,y,duration)
@target_x = x.to_f
@target_y = y.to_f
@duration = duration
end
def update_move
return if @duration == 0
d = @duration
@old_x = @x
@old_y = @y
@x = (@x * (d - 1) + @target_x) / d
@y = (@y * (d - 1) + @target_y) / d
@duration -= 1
end
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update
super
if @duration > 0
update_move
end
if @x != @old_x or @y != @old_y
refresh
end
end
|
|