Maire Lv.9
Age : 37 Inscrit le : 04/02/2009 Messages : 326
| Sujet: [VX] Effet visuel - Brillance Ven 20 Avr 2012 - 15:55 | |
| Hello,Pour les scripteurs, et notamment les créateurs de menus, voilà un vieux truc qui traînait dans mes affaires. Je ne sais pas où le mettre étant donné que ça n'est pas un script à part entière, mais juste un élément... C'est 2 petites classes permettant de faire apparaître dans une zone des petites étoiles issues de l'event "!Flame" Il y a 2 classes: Brillance, la classe maîtresse, Etoile, la classe esclave. Pour l'utiliser, il faut instancier Brillance en lui passant le rectangle ciblé, créer les étoiles (create(int) ), puis l'activer (run(bool)) Il faut l'update à la frame et la disposer en fin de scene comme un élément de scene normal en somme. - Spoiler:
- Code:
-
#==============================================================================# # # # # # EFFETS # # # # # #==============================================================================# # # #By Vincentmhd # #http://vincentmhdmaker.canalblog.com/ # #18/2/2010 # # # #Permet de réalisé des petits effets pour les menus. # # # # # #-------------------------------------NOTE-------------------------------------# # # # Ce script se base sur les sprites. Il permet d'animer les pages des menus # #plus facilement. Et pourrait par extention être utilisé en map. # # # #------------------------------------LISTE-------------------------------------# # # # Brillance fait apparaitre des petites étoiles dans la zone définie. # # # #==============================================================================#
class Etoile < Sprite ZOOM_MIN = 25 ZOOM_MAX = 80 NAME = "!Flame" COORD = [[7,4],[6,4]] DARK_MIN = 15 DARK_MAX = 30 OP_MIN = 125 OP_MAX = 255 FADE = 60 NUMBER = 5 SHINE_MIN = 15 SHINE_MAX = 30 ANIM_F = 15 def initialize(rect, wait, vp) super(vp) @brillance = rect create_sprite @wait_count = wait @op_count = 0 @op_target = 0 @cycle_index= 0 @anim_count = ANIM_F end def create_sprite self.bitmap = Cache.character(NAME) @coord = COORD[ rand(COORD.size())] @patern = 0 self.src_rect = Rect.new(32*@coord[0], 32*@coord[1], 32, 32) self.opacity = 0 zoom = (ZOOM_MIN + rand(ZOOM_MAX - ZOOM_MIN)).to_f / 100 self.zoom_x = zoom self.zoom_y = zoom x_min = @brillance.x x_max = @brillance.x + @brillance.width - self.width * zoom y_min = @brillance.y y_max = @brillance.y + @brillance.height - self.height * zoom self.x = (x_min + rand(x_max - x_min)) self.y = (y_min + rand(y_max - y_min)) end def move(x,y) self.x += x self.y += y end def cycle_update if @op_count == 0 && @wait_count == 0 case @cycle_index when 0 if(!@brillance.stop) @wait_count = DARK_MIN + rand(DARK_MAX - DARK_MIN) @cycle_index = 1 create_sprite end when 1 change_op(OP_MIN + rand(OP_MAX - OP_MIN) ) @cycle_index = 3 when 2 @cycle_index = 0 change_op(0) when 3 @wait_count = SHINE_MIN + rand(SHINE_MAX - SHINE_MIN) @cycle_index = 2 end end end def anim_update if @anim_count > 0 @anim_count -= 1 else if @patern == 3 @patern = 0 else @patern +=1 end y = @patern* 32 + 32*@coord[1] self.src_rect = Rect.new(32*@coord[0], y, 32, 32) @anim_count = ANIM_F end end def op_update if @op_count > 0 d = @op_count self.opacity = (self.opacity * (d - 1) + @op_target) / d @op_count -= 1 end end def wait_update if @wait_count > 0 @wait_count -= 1 end end def change_op(op, t = FADE) @op_count = t @op_target = op if @op_count == 0 @text.opacity = @op_target @card.opacity = @op_target end end def update super cycle_update op_update wait_update anim_update end end
class Brillance < Rect attr_reader :running attr_reader :z attr_reader :stop def initialize (x, y, w, h, z = 0, vp = nil) super(x,y,w,h) @z = z @vp = vp @etoile = [] @running = false @stop = false end def create(number = Etoile::NUMBER, wait = Etoile::DARK_MAX+Etoile::SHINE_MAX+2*Etoile::FADE) for i in 0...number e = Etoile.new(self, rand(wait)+1, @vp) e.z = @z @etoile.push(e) end end def setZ(z) @z = z for i in 0...@etoile.size() @etoile[i].z = @z end end def visible(v = true) for i in 0...@etoile.size() @etoile[i].visible = v end end def move(x,y) dx = x - self.x dy = y - self.y for i in 0...@etoile.size() @etoile[i].move(dx, dy) end self.x = x self.y = y end def update if @running for i in 0...@etoile.size() @etoile[i].update end end end def run( etat = true) @running = etat end def Stop( etat = true) @stop = etat end def Resume( etat = false) @stop = etat end def dispose? false end def dispose for i in 0...@etoile.size() @etoile[i].dispose end end end
Screenshoot: Bon une image n'est pas parlante car in game ça scintille de 100 "!Flame" XD Pour exemple je l'utilisais dans un menu pour afficher le rang du joueur et pour les meilleurs rangs, je superposais le scintillement. C'est plus classe! La démo illustre mieux. Il y a un exemple d'intégration dans le menu titre et quand vous faites nouvelle partie vous aurez une scene dédiée à la démo... Démo: Lien |
|