加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
本帖最后由 Sion 于 2013-12-17 15:48 编辑
引子:游戏不同于小说,因为它有动感,制作人手上有一套非常好看的动画,全都合成了一张,拆出来太麻烦,每个方格大小一致,但格式不是192*192,也不是行走图的4*4,连地图元件这种边缘性材料的格式都不是!这不是坑爹呢么!没关系,这次我们就调教一下事件里亲耐的显示图片,让他把一个图片拆出来蠕动~~(诶
准备材料:每个方格大小一致的动画,你可以直接从行走图里挖一个。将这个材料命名为:XXX_每行有几个动画_有几行
修改的脚本页(请备份:Interpreter 7,Game_Picture,Sprite_Picture
首先打开Sprite_Picture,在最上方加上
@@letter = "_" # 辨识符
@@刷新频率 = 3 # 每个动画的时间
@@letter = "_" # 辨识符
@@刷新频率 = 3 # 每个动画的时间
在初始化对象,即函数initialize下加上
#=======================
@picture_change = false # 该图片是否为动画
@time = 0 # 循环时间
#=======================
#=======================
@picture_change = false # 该图片是否为动画
@time = 0 # 循环时间
#=======================
下面准备工作都做好了,跳转到update下。这个函数在地图中每帧调用一次,所以这里要动刀。
首先要判断,这个图形是不是属于动画,在# 文件名不为空的情况下
if @picture_name != ""
# 获取图片图形
self .bitmap = RPG::Cache .picture ( @picture_name)
# 文件名不为空的情况下
if @picture_name != ""
# 获取图片图形
self .bitmap = RPG::Cache .picture ( @picture_name)
下加上
self .src_rect = Rect.new ( 0 ,0 ,self .bitmap .width ,self .bitmap .height )
@picture_change = @picture .name .include ?( @@letter)
if @picture_change
@w_l = @picture_name .split ( @@letter) [ 1 ] .to_i
@h_l = @picture_name .split ( @@letter) [ 2 ] .to_i
@width = self .bitmap .width / @w_l
@height = self .bitmap .height / @h_l
self .src_rect = Rect.new ( 0 ,0 ,@width,@height)
end
self .src_rect = Rect.new ( 0 ,0 ,self .bitmap .width ,self .bitmap .height )
@picture_change = @picture .name .include ?( @@letter)
if @picture_change
@w_l = @picture_name .split ( @@letter) [ 1 ] .to_i
@h_l = @picture_name .split ( @@letter) [ 2 ] .to_i
@width = self .bitmap .width / @w_l
@height = self .bitmap .height / @h_l
self .src_rect = Rect.new ( 0 ,0 ,@width,@height)
end
OK,判断完毕,接下来就是蛋疼地每帧刷新~~
在update下第一个大if..end下面回车加上
if @picture_change && @picture .loop
[ url=home.php ?mod=space&uid=134219 ] @Time [ /url] += 1
@time = 0 if @time >= @@刷新频率 * @w_l * @h_l
a = @time % ( @@刷新频率 * @w_l ) / @@刷新频率
b = @time / ( @w_l * @@刷新频率)
self .src_rect = Rect.new ( a*@width,b*@height,@width,@height)
end
if @picture_change && @picture .loop
[ url=home.php ?mod=space&uid=134219 ] @Time [ /url] += 1
@time = 0 if @time >= @@刷新频率 * @w_l * @h_l
a = @time % ( @@刷新频率 * @w_l ) / @@刷新频率
b = @time / ( @w_l * @@刷新频率)
self .src_rect = Rect.new ( a*@width,b*@height,@width,@height)
end
关于@picture.loop稍后再讲论。
这里的算法有够二心,但是耐心看你还是能看懂的。
现在每帧刷新已经做好,但是不能随时控制它动或是不动。
这可不行,这显示图片还是各种傲娇不肯屈服于我们的胯下。
找到Interpreter 7
在最后两个END中间加上
def stop_picture_loop( id)
$game_screen .pictures [ id] .loop = false
return true
end
def start_picture_loop( id)
$game_screen .pictures [ id] .loop = true
return true
end
def stop_picture_loop( id)
$game_screen .pictures [ id] .loop = false
return true
end
def start_picture_loop( id)
$game_screen .pictures [ id] .loop = true
return true
end
以后呢,在事件里脚本 stop_picture_loop(1) 就是对应停止1号图片的循环啦
为什么要return true ,UP主表示也不知道,但是不加就会一直循环无止境。
$game_screen.pictures又是什么呢?相信有对全局研究的童鞋都知道,这个就是我们亲耐的Game_Picture
打开Game_Picture
在定义实例变量里加上 attr_accessor :loop # 循环标志
attr_accessor :loop # 循环标志
初始化对象里加上 @loop = true # 你希望一开始图片的循环情况
@loop = true # 你希望一开始图片的循环情况
OK现在大功告成,添加个NPC显示一下材料图片你就会发现动起来了,动起来了有木有啊亲~~
本期讲解坑爹结束~~有BUG望回报