yang1zhi 发表于 2017-2-24 12:25
我不知道粒子系统软件。能介绍下吗
89444640 发表于 2017-2-24 15:45 https://rpg.blue/forum.php?mod=viewthread&tid=193868&extra=&page=1&_dsign=3e1400d8这里有详细的 ...
Im剑侠客 发表于 2017-2-24 22:12
我来回答一下动画长度的问题吧,太长了在动画编辑器是看不到的,但是还是可以继续添加,只要你知道下一帧 ...
soulsaga 发表于 2017-2-25 12:37
脚本搜sprite.src_rect.set(pattern % 5 * 192, pattern / 5 * 192, 192, 192)
这个可以改变读取动画精灵 ...
soulsaga 发表于 2017-2-25 12:37
脚本搜sprite.src_rect.set(pattern % 5 * 192, pattern / 5 * 192, 192, 192)
这个可以改变读取动画精灵 ...
module RPG class Sprite < ::Sprite def animation_set_sprites(sprites, cell_data, position) # 这 16 个点是动画上的单元数,最多 16 个,然后每个进行处理 for i in 0..15 sprite = sprites[i] # cell_data[i, 0] 是该单元的图片在动画图片中的位置 pattern = cell_data[i, 0] # 如果 patten = -1, or nil,本帧画面上不显示,处理下一个单元 # 如果 sprite == nil,处理下一个单元 if sprite == nil or pattern == nil or pattern == -1 sprite.visible = false if sprite != nil next end sprite.visible = true # 这里找到该单元的图片在动画图片中的位置和大小 sprite.src_rect.set(pattern % 5 * 192, pattern / 5 * 192, 192, 192) # 位置:画面的情况 if position == 3 # 无论是战斗中还是地图上,尚未发现self.viewport为nil的情况 # self 是显示动画的 Sprite if self.viewport != nil # viewport存在,x 为viewport中心,y 为viewport高 - 160 sprite.x = self.viewport.rect.width / 2 sprite.y = self.viewport.rect.height - 160 else # viewport不存在,中心设于游戏窗口中心(标准640*480) sprite.x = 320 sprite.y = 240 end else # 位置:上中下的情况 # 中的情况,图片中心位置和显示动画的 Sprite中心重合 sprite.x = self.x - self.ox + self.src_rect.width / 2 sprite.y = self.y - self.oy + self.src_rect.height / 2 # 上的情况,图片上移自身 1/4 的高度 sprite.y -= self.src_rect.height / 4 if position == 0 # 下的情况,图片下移自身 1/4 的高度 sprite.y += self.src_rect.height / 4 if position == 2 end # cell_data[i, 1] 是该单元的图片的 sprite.x += cell_data[i, 1] # x 偏移量 sprite.y += cell_data[i, 2] # y 偏移量 sprite.z = 2000 # 高度 sprite.ox = 96 # 图片的 中心 位置 x sprite.oy = 96 # 图片的 中心 位置 y,中心位置要和画面的中心位置重合 sprite.zoom_x = cell_data[i, 3] / 100.0 # x 放大率 sprite.zoom_y = cell_data[i, 3] / 100.0 # y 放大率 sprite.angle = cell_data[i, 4] # 旋转 sprite.mirror = (cell_data[i, 5] == 1) # 镜像 sprite.opacity = cell_data[i, 6] * self.opacity / 255.0 # 透明度 sprite.blend_type = cell_data[i, 7] # 混合方式 end end end end
89444640 发表于 2017-2-26 09:17
好好画草图来着,休息会上来一看好多提醒- -用帧1*5n的方法会影响192标准动画播放,有办法部分动画可选可 ...
soulsaga 发表于 2017-2-26 16:56
我虽然加了个动画文件名的判断..但是同时播放的动画也会受到影响..无解啊.. ...
soulsaga 发表于 2017-2-26 16:56
我虽然加了个动画文件名的判断..但是同时播放的动画也会受到影响..无解啊.. ...
soulsaga 发表于 2017-3-1 15:27
你还有什么未解決的..快找大神看看有没空帮你搞定..
#============================================================================== # 全图动画 (突破动画 192 * 192 限制) #============================================================================== # 用法: # 1. 动画图片设置: # 1.1 宽度 640 # 1.2 所有的子图片竖着排列 # 1.3 图片名包含 ★全图320★ 这里 320 是单张高度值 # 1.4 图片名包含 ★全图320YS160★ 则播放的动画会向下移动 160 像素 # 2. 数据库动画设置 # 2.1 选择一帧,添加一个单元 # 2.2 位置:上 在正常动画上方(z=3000); # 位置:中 在正常动画下方(z=1500) # 位置:下 在敌人下方(z=0); # 位置:画面 z = x 坐标* y 坐标 * 放大率 # 2.3 式样:此帧播放的子图片位置 # 2.4 左右反转、不透明度和合成方式可以正常使用 # 2.5 X坐标、Y坐标、放大率、旋转角度不可以正常使用 #============================================================================== # 作者:guoxiaomi 脚本来自 rpg.blue #============================================================================== module RPG class Sprite < ::Sprite def animation_set_sprites(sprites, cell_data, position) # -------------------------------------------------------- # 图片文件名里包含★全图320★ # -------------------------------------------------------- if @_animation && @_animation.animation_name =~ /★全图(\d+).*★/ full_screen = true width = 640 height = $1.to_i y_shift = 0 if @_animation.animation_name =~ /★全图\d+YS(\d+)★/ y_shift = $1.to_i end else full_screen = false end # -------------------------------------------------------- # 这 16 个点是动画上的单元数,最多 16 个,然后每个进行处理 for i in 0..15 sprite = sprites[i] # cell_data[i, 0] 是该单元的图片在动画图片中的位置 pattern = cell_data[i, 0] # 如果 patten = -1, or nil,本帧画面上不显示,处理下一个单元 # 如果 sprite == nil,处理下一个单元 if sprite == nil or pattern == nil or pattern == -1 sprite.visible = false if sprite != nil next end sprite.visible = true if full_screen # -------------------------------------------------------- # 全图的情况 # -------------------------------------------------------- sprite.src_rect.set(0, pattern * height, width, height) sprite.x = width / 2 sprite.y = height / 2 + y_shift sprite.ox = 320 sprite.oy = height / 2 # 高度:位置为 上中下高度分别是 3000/1500/0(敌人背后) # 位置为 画面 时,高度为 x 坐标* y 坐标 * 放大率 case position when 0 sprite.z = 3000 # 普通动画上方 when 1 sprite.z = 1500 # 普通动画下方 when 2 sprite.z = 0 # 敌人下方 when 3 sprite.z = cell_data[i, 1] * cell_data[i, 2] * cell_data[i, 3] # 自定义高度 end sprite.mirror = (cell_data[i, 5] == 1) # 镜像 sprite.opacity = cell_data[i, 6] * self.opacity / 255.0 # 透明度 sprite.blend_type = cell_data[i, 7] # 混合方式 else # -------------------------------------------------------- # 正常的情况 # -------------------------------------------------------- # 这里找到该单元的图片在动画图片中的位置和大小 sprite.src_rect.set(pattern % 5 * 192, pattern / 5 * 192, 192, 192) # 位置:画面的情况 if position == 3 # 无论是战斗中还是地图上,尚未发现self.viewport为nil的情况 # self 是显示动画的 Sprite if self.viewport != nil # viewport存在,x 为viewport中心,y 为viewport高 - 160 sprite.x = self.viewport.rect.width / 2 sprite.y = self.viewport.rect.height - 160 else # viewport不存在,中心设于游戏窗口中心(标准640*480) sprite.x = 320 sprite.y = 240 end else # 位置:上中下的情况 # 中的情况,图片中心位置和显示动画的 Sprite中心重合 sprite.x = self.x - self.ox + self.src_rect.width / 2 sprite.y = self.y - self.oy + self.src_rect.height / 2 # 上的情况,图片上移自身 1/4 的高度 sprite.y -= self.src_rect.height / 4 if position == 0 # 下的情况,图片下移自身 1/4 的高度 sprite.y += self.src_rect.height / 4 if position == 2 end # cell_data[i, 1] 是该单元的图片的 sprite.x += cell_data[i, 1] # x 偏移量 sprite.y += cell_data[i, 2] # y 偏移量 sprite.z = 2000 # 高度 sprite.ox = 96 # 图片的 中心 位置 x sprite.oy = 96 # 图片的 中心 位置 y,中心位置要和画面的中心位置重合 sprite.zoom_x = cell_data[i, 3] / 100.0 # x 放大率 sprite.zoom_y = cell_data[i, 3] / 100.0 # y 放大率 sprite.angle = cell_data[i, 4] # 旋转 sprite.mirror = (cell_data[i, 5] == 1) # 镜像 sprite.opacity = cell_data[i, 6] * self.opacity / 255.0 # 透明度 sprite.blend_type = cell_data[i, 7] # 混合方式 end end end end end #============================================================================== # 作者:guoxiaomi 脚本来自 rpg.blue #==============================================================================
guoxiaomi 发表于 2017-3-1 22:27
如我前面所说,修改了 RPG::Sprite 的 animation_set_sprites(sprites, cell_data, position) 方法:
#==== ...
592.54 KB, 下载次数: 78
guoxiaomi 发表于 2017-3-2 00:51
这个脚本的作用是识别动画文件的名称,如果是特定的名称就不用192x192的模式。所以导入到动画文件夹下。
...
89444640 发表于 2017-3-2 01:39
非常感謝大半夜的還……怎麼又繁體中文了 ……大半夜的还帮我做范例。黑色三角形做特写用?没用过这类显 ...
89444640 发表于 2017-3-2 01:39
非常感謝大半夜的還……怎麼又繁體中文了 ……大半夜的还帮我做范例。黑色三角形做特写用?没用过这类显 ...
89444640 发表于 2017-3-2 01:39
非常感謝大半夜的還……怎麼又繁體中文了 ……大半夜的还帮我做范例。黑色三角形做特写用?没用过这类显 ...
# ● 处理角色动作 #-------------------------------------------------------------------------- def update_actor_animation if @battler.is_a?(Game_Actor) if @battler.show_damage_value != nil self.damage(@battler.show_damage_value, false) @battler.show_damage(nil) @battler.setup_battler_ani(@battler.battler_name.split(/★/)[3], 1) @battler.setup_battler_hurt_ani(1) end @last_frame = $fanime_frame_max if $fanime_frame_max > @last_frame
# 死亡判定 elsif @frame_index == @last_frame and @battler.dead? and @battler.battler_dead_ani != 1
soulsaga 发表于 2017-3-4 14:20
全动画战斗最终版本脚本
初始化变量initialize方法下面插个
fanime_frame_max = 0
89444640 发表于 2017-3-4 14:35
原来如此~非常感谢~
终于能看到当年画的c&c3中神像火炮的全部威力了XD,以前都是播放1X帧后就消失了ORZ
0111.gif (3.4 MB, 下载次数: 75)
soulsaga 发表于 2017-3-4 15:34
代LZ上传动图..
guoxiaomi 发表于 2017-3-2 00:51
脚本插在main前的任何地方应该都可以
这个脚本的作用是识别动画文件的名称,如果是特定的名称就不 ...
花天酒地 发表于 2017-7-12 03:08
全动画素材素材长和宽还是理解,宽度最多是690像素X高度1920像素吗
欢迎光临 Project1 (https://rpg.blue/) | Powered by Discuz! X3.1 |