Project1

标题: 【XP】【无图文字教程】调教坑爹的显示图片 [打印本页]

作者: 退屈£无聊    时间: 2012-6-28 11:58
标题: 【XP】【无图文字教程】调教坑爹的显示图片
本帖最后由 Sion 于 2013-12-17 15:48 编辑

引子:游戏不同于小说,因为它有动感,制作人手上有一套非常好看的动画,全都合成了一张,拆出来太麻烦,每个方格大小一致,但格式不是192*192,也不是行走图的4*4,连地图元件这种边缘性材料的格式都不是!这不是坑爹呢么!没关系,这次我们就调教一下事件里亲耐的显示图片,让他把一个图片拆出来蠕动~~(诶
[line]1[/line]
准备材料:每个方格大小一致的动画,你可以直接从行走图里挖一个。将这个材料命名为:XXX_每行有几个动画_有几行
[line]1[/line]
修改的脚本页(请备份:Interpreter 7,Game_Picture,Sprite_Picture
首先打开Sprite_Picture,在最上方加上
RUBY 代码复制
  1. @@letter = "_" # 辨识符
  2. @@刷新频率 = 3 # 每个动画的时间


在初始化对象,即函数initialize下加上
RUBY 代码复制
  1. #=======================
  2.     @picture_change = false # 该图片是否为动画
  3.     @time= 0 # 循环时间
  4.     #=======================


下面准备工作都做好了,跳转到update下。这个函数在地图中每帧调用一次,所以这里要动刀。

首先要判断,这个图形是不是属于动画,在
RUBY 代码复制
  1. # 文件名不为空的情况下
  2.       if @picture_name != ""
  3.         # 获取图片图形
  4.         self.bitmap = RPG::Cache.picture(@picture_name)

下加上
RUBY 代码复制
  1. self.src_rect = Rect.new(0,0,self.bitmap.width,self.bitmap.height)
  2.         @picture_change = @picture.name.include?(@@letter)
  3.         if @picture_change
  4.           @w_l = @picture_name.split(@@letter)[1].to_i
  5.           @h_l = @picture_name.split(@@letter)[2].to_i
  6.           @width = self.bitmap.width / @w_l
  7.           @height= self.bitmap.height / @h_l
  8.           self.src_rect = Rect.new(0,0,@width,@height)
  9.         end


OK,判断完毕,接下来就是蛋疼地每帧刷新~~

在update下第一个大if..end下面回车加上
RUBY 代码复制
  1. if @picture_change && @picture.loop
  2.       [url=home.php?mod=space&uid=134219]@Time[/url] += 1
  3.       @time = 0 if @time >= @@刷新频率 * @w_l * @h_l
  4.       a = @time % (@@刷新频率 * @w_l) / @@刷新频率
  5.       b = @time / (@w_l * @@刷新频率)
  6.       self.src_rect = Rect.new(a*@width,b*@height,@width,@height)
  7.     end


关于@picture.loop稍后再讲论。

这里的算法有够二心,但是耐心看你还是能看懂的。

现在每帧刷新已经做好,但是不能随时控制它动或是不动。
这可不行,这显示图片还是各种傲娇不肯屈服于我们的胯下。

找到Interpreter 7

在最后两个END中间加上
RUBY 代码复制
  1. def stop_picture_loop(id)
  2.     $game_screen.pictures[id].loop = false
  3.     return true
  4.   end
  5.   def start_picture_loop(id)
  6.     $game_screen.pictures[id].loop = true
  7.     return true
  8.   end


以后呢,在事件里脚本 stop_picture_loop(1) 就是对应停止1号图片的循环啦

为什么要return true ,UP主表示也不知道,但是不加就会一直循环无止境。

$game_screen.pictures又是什么呢?相信有对全局研究的童鞋都知道,这个就是我们亲耐的Game_Picture

打开Game_Picture

在定义实例变量里加上
RUBY 代码复制
  1. attr_accessor :loop # 循环标志


初始化对象里加上
RUBY 代码复制
  1. @loop= true # 你希望一开始图片的循环情况


OK现在大功告成,添加个NPC显示一下材料图片你就会发现动起来了,动起来了有木有啊亲~~

本期讲解坑爹结束~~有BUG望回报

  
作者: chd114    时间: 2012-6-28 14:59
这个是用来做出什么效果的还是不明白···




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1