- 注册时间
- 2004-12-14
- 最后登录
- 2012-10-5
⑧专业
Xavier on Rails
- 积分
- 32739794

|
#====================================================
# ? Lecteur Vidéo
#------------------------------------------------------------------------------
# By: dgam3z
# Date: 18/10/04
# http://www.zone-freegames.fr.tc/
#=====================================================
module MoviePlayer
#--------------------------------------------------------------------------
# ? les attr_acessor for les jolies fonctions de ce module:
#-------------------------------------------------------------------------
class<<self
attr_accessor(:X,:y,:z,:width,:height, pacity)
end
#--------------------------------------------------------------------------
# ? Initialisation des constantes
#-------------------------------------------------------------------------
MULTIFILE = 1
ONEFILE = 2
#--------------------------------------------------------------------------
# ? Initialisation.
#-------------------------------------------------------------------------
@loaded = false
#--------------------------------------------------------------------------
# ? Charger le fichier.
# In: name, frames, @loaded
# Out: @rmm_name, @rmm_type, @rmm_width, @rmm_height, @loaded, @rmm_frames
#-------------------------------------------------------------------------
def self.load(name,frames=0)
if not @loaded then
#Checks if the movie is ONEFILE.
if FileTest.exists?("Movies/"+name+".png") then
if frames != 0
@rmm_frames = frames
else
if $DEBUG then print "Debug: Nombre de frames necessaire pour ce film." end
return 3 #Error 3: Need the number of frames.
end
@rmm = Sprite.new
@rmm_name = name
@rmm_type = ONEFILE
@rmm_x = 0
@rmm_y = 0
@rmm_z = 4000
@rmm_width = 0
@rmm_height = 0
@frame_counter = 0
#Verifier la taille du fichier.
@rmm_width = Bitmap.new("Movies/"+@rmm_name+".png").width/@rmm_frames
@rmm_height = Bitmap.new("Movies/"+@rmm_name+".png").height
@loaded = true
return 0 #No Errors: Everything wen't fine.
end
#Regarder si le film est MULTIFILE.
if FileTest.exists?("Movies/"+name+"/"+name+"_0.png") then
@rmm = Sprite.new
@rmm_name = name
@rmm_type = MULTIFILE
@rmm_frames = 0
@rmm_x = 0
@rmm_y = 0
@rmm_z = 4000
@rmm_width = 0
@rmm_height = 0
@frame_counter = 0
#Demande les Hauteurs/Largeurs.
@rmm_width = Bitmap.new("Movies/"+@rmm_name+"/"+@rmm_name+"_0.png").width
@rmm_height = Bitmap.new("Movies/"+@rmm_name+"/"+@rmm_name+"_0.png").height
i = 0
while FileTest.exist?("Movies/"+@rmm_name+"/"+@rmm_name+"_#{i}.png")
i = i + 1
end
#And get the number of frames.
@rmm_frames = i - 1
@loaded = true
return 0 #No Errors: Everything wen't fine.
end
if $DEBUG then print "Debug: Fichier non trouvé. Rendez vous sur le Forum
http://www.zone-freegames.fr.tc/ pour plus d'informations." end
return 2 #Error 2: File not found.
end
if $DEBUG then print "Debug: Dernier fichier non trouvé. Rendez vous sur
http://www.zone-freegames.fr.tc/ pour plus d'informations" end
return 1 #Error 1: Needs to unload last movie first.
end
#--------------------------------------------------------------------------
# ? Starts a movie.
#-------------------------------------------------------------------------
def self.start(trans=40)
if not @loaded then
if $DEBUG then print "Debug: Impossible d'ouvrir un fichier non chargé. Pour plus d'informations, allez sur http://www.zone-freegames.fr.tc/" end
return 1 #Error 1: Not loaded.
end
Graphics.freeze
if @rmm_type == ONEFILE then
@rmm.bitmap = Bitmap.new("Movies/"+@rmm_name+".png")
@rmm.src_rect.set(@rmm_width*@frame_counter, 0, @rmm_width, @rmm_height)
end
if @rmm_type == MULTIFILE then
@rmm.bitmap = Bitmap.new("Movies/"+@rmm_name+"/"+@rmm_name+"_0.png")
@rmm.src_rect.set(0, 0, @rmm.bitmap.width, @rmm.bitmap.height)
end
@frame_counter = 1
#Makes the transition.
Graphics.transition(trans)
end
#--------------------------------------------------------------------------
# ? Mise a jour du film (Passe a la prochaine frames)
#-------------------------------------------------------------------------
def self.update
if @loaded == true then
if @rmm_type == ONEFILE then
@rmm.src_rect.set(@rmm_width*@frame_counter, 0, @rmm_width, @rmm_height)
end
if @rmm_type == MULTIFILE then
@rmm.bitmap = Bitmap.new("Movies/"+@rmm_name+"/"+@rmm_name+"_#{@frame_counter}.png")
@rmm.src_rect.set(0, 0, @rmm.bitmap.width, @rmm.bitmap.height)
end
Graphics.update
@frame_counter = @frame_counter + 1
if @frame_counter == @rmm_frames
@frame_counter = 0
return true
else
return false
end
end
end
#--------------------------------------------------------------------------
# ? Sets et retrieves les coordonnées du film.
#-------------------------------------------------------------------------
def self.x; return @rmm.x; end
def self.x=(tx); @rmm.x = tx; end
def self.y; return @rmm.y; end
def self.y=(ty); @rmm.y = ty; end
def self.z; return @rmm.z; end
def self.z=(tz); @rmm.z = tz; end
#--------------------------------------------------------------------------
# ? Retrieves la taille du film.
#-------------------------------------------------------------------------
def self.width; return @rmm_width; end
def self.height; return @rmm_height; end
#--------------------------------------------------------------------------
# ? Sets et retrieves la transparance.du film
#-------------------------------------------------------------------------
def self.opacity; return @rmm.opacity; end
def self.opacity=(topacity); @rmm.opacity = topacity; end
#--------------------------------------------------------------------------
# ? Vérifie si un film est chargé
#-------------------------------------------------------------------------
def self.loaded?
return @loaded
end
#--------------------------------------------------------------------------
# ? Cherche dans quelle frame le film est actuellement
#-------------------------------------------------------------------------
def self.frame?
if @loaded then
return @frame_counter
end
end
#--------------------------------------------------------------------------
# ? Caractéristiques faciles de la lecture du film (aka Newbie Definition).
#-------------------------------------------------------------------------
def self.play(movie, loops=1, wait=2, trans=0, x=nil, y=nil, z=4000, opacity=255)
MoviePlayer.load(movie)
if x != nil then MoviePlayer.x = x; else MoviePlayer.x = 320 - @rmm_width/2; end
if y != nil then MoviePlayer.y = y; else MoviePlayer.y = 240 - @rmm_height/2; end
MoviePlayer.z = z
MoviePlayer.start(trans)
for i in 1..loops
begin
for i in 0..wait
Graphics.update
end
end while MoviePlayer.update == false
end
MoviePlayer.stop(trans)
end
#--------------------------------------------------------------------------
# ? Stop et décharge le film.
#-------------------------------------------------------------------------
def self.stop(trans=40)
if not @loaded then
if $DEBUG then print "Debug: Can't stop, movie not loaded :
http://www.zone-freegames.fr.tc/" end
return 1 #Error 1: Not loaded.
end
Graphics.freeze
@rmm.bitmap.dispose
@loaded = false
#Makes the transition.
Graphics.transition(trans)
end
end
Maintenant que vous avez votre script, il ne vous reste plus qu'une petite chose à faire. Pour les personnes qui n'y connaissent rien au Ruby, voici comment l'utiliser. Utilisez cette fonction : MoviePlayer.play(movie, loops, wait, trans, x, y, z, opacity)
> movie : Le fichier à jouer. Doit être dans un repertoire nommé " movies ".
> loops : Combien de fois voulez vous rejouer le film. Default: 1
> wait : Attente de passage d'une frame à l'autre. Default: 2
> trans : Frames de transition au début et fin du film. Default: 40
> x,y,z : Ou jouer à l'écran le film. Default: Centrer à l'écran et z=4000
> opacity : L'opacité de l'animation.
Il y a aussi les propriétés et fonctions avancées : MoviePlayer.load(movie, frames) : Charge le film. "movie" est le film à charger et "frames" et le nombre de frames que le fichier possède, "frames" peut seulement être utilisé pour 1 seul fichier.
MoviePlayer.start(trans) : Le film commence, "trans" est la frame de transition.
MoviePlayer.update : Mise à jour de la nouvelle prochaine frame, retourne "true" lorsqu'il arrive à la dernière.
MoviePlayer.stop(trans) : Arrête le film, "trans" est la frame de transition.
> MoviePlayer.x and MoviePlayer.y and MoviePlayer.z : Ces coordonnées sont les endroits ou la vidéo va être jouée à l'écran. Elles peuvent être changées même pendant la partie.
> MoviePlayer.width and MoviePlayer.height : Cela lit seulement les propriétés en rapport avec la taille de l'animation.
> MoviePlayer.frame? : Cela recherche quelle frame est en cours
> MoviePlayer.loaded? : Cela renvoit true si un fichier est en train d'être joué |
|