幻想森林

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 712|回复: 3

这脚本啥意思?播放动画么?。。。。看不懂的文字。法文

[复制链接]

89

主题

2333

帖子

3273万

积分

⑧专业

Xavier on Rails

积分
32739794
QQ
发表于 2005-10-7 20:42:00 | 显示全部楼层 |阅读模式
#====================================================
# ? 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é
回复

使用道具 举报

18

主题

230

帖子

3055

积分

⑥精研

积分
3055
QQ
发表于 2005-10-7 21:26:05 | 显示全部楼层
法语
把PNG连续显示产生动画效果
要播放的PNG图片放到 movies 文件夹
估计是……
回复 支持 反对

使用道具 举报

50

主题

994

帖子

6699

积分

管理员

爱干啥干啥!

Rank: 9Rank: 9Rank: 9

积分
6699
发表于 2005-10-7 21:55:37 | 显示全部楼层
是的,连续播放图片来产生动画效果。大图的话,速度很慢的。小图可以这样播放~~

全屏动画最好是AVI,省空间,还有速度。不过,png的连续图片比较容易修改,各有千秋呀。

-_-b
BTW:我究竟说了些什么

“放下屠刀,立地成佛” 故应先杀生,然后再成佛。

(\\_/) (-_-) ()+() this is bunny priest.
回复 支持 反对

使用道具 举报

18

主题

230

帖子

3055

积分

⑥精研

积分
3055
QQ
发表于 2005-10-7 22:04:55 | 显示全部楼层
AVI?
不知道RMXP都能识别什么编码……
希望不是无压缩……
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|幻想森林

GMT+8, 2025-6-24 10:57 , Processed in 0.012491 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表