楼主: 89444640

[有事请教] 无缝特效

[复制链接]
梦石
0
星屑
39236
在线时间
11155 小时
注册时间
2009-3-15
回帖
4768
发表于 2017-2-26 18:32:09 | 显示全部楼层
本帖最后由 soulsaga 于 2017-3-1 19:26 编辑
soulsaga 发表于 2017-2-26 16:56
我虽然加了个动画文件名的判断..但是同时播放的动画也会受到影响..无解啊.. ...


    脚本搜def animation(animation, hit)
方法下面插个
$game_variables[82] = animation.animation_name

脚本搜def loop_animation(animation)
下面sprite.src_rect.set(pattern % 5 * 192, pattern / 5 * 192, 192, 192)改成下面的
$game_variables[82] = @_loop_animation.animation_name
sprite.src_rect.set(pattern % 5 * 192, pattern / 5 * 192, 192, 192)改成
        if $game_variables[82].to_s[/动画/] == "动画"
        sprite.src_rect.set(pattern % 1 * 192, pattern / 5 * 192, 640, 384)
        else
        sprite.src_rect.set(pattern % 5 * 192, pattern / 5 * 192, 192, 192)
        end

点评

我来试试吧~  发表于 2017-3-1 20:41
看不明白也没问题..反正改了也不行..  发表于 2017-3-1 19:25
那啥,看不明白,请再详细点 - -b 目前脑子转不过来代码模式  发表于 2017-3-1 19:01
回复

使用道具 举报

梦石
0
星屑
39236
在线时间
11155 小时
注册时间
2009-3-15
回帖
4768
发表于 2017-3-1 15:27:49 | 显示全部楼层
你还有什么未解決的..快找大神看看有没空帮你搞定..
回复

使用道具 举报

梦石
0
星屑
35248
在线时间
4171 小时
注册时间
2007-12-15
回帖
9489
 楼主| 发表于 2017-3-1 19:04:09 | 显示全部楼层
本帖最后由 89444640 于 2017-3-1 19:37 编辑
soulsaga 发表于 2017-3-1 15:27
你还有什么未解決的..快找大神看看有没空帮你搞定..


非常感谢,每次都热心帮助。
https://rpg.blue/forum.php?mod=viewthread&tid=398767
敌人消失时间的问题
全动画战斗脚本动画播放是出手动画与对象方动画同时播放
需要的是两个动画都播放完成后,以时间长的动画为标准,敌人才开始判定消失,就用这个帖子的脚本测试就可以。

Scripts.rar (198.52 KB, 下载次数: 38)

点评

上传了附件..测看看..没法测只能靠你了..  发表于 2017-3-1 21:25
你出手动画卜廿道还比对象方动画久不成?  发表于 2017-3-1 20:50
没有工程没法搞啊..  发表于 2017-3-1 20:17
嗯,因为敌人扣血时间是按照闪烁计算的,如果闪烁时候敌人已经没有HP了,则开始叠加死亡效果,而且动画播放完毕以后还会再播放一次。  发表于 2017-3-1 20:06
但是默认战斗是对象方动画结束后敌人才消失的啊..那问题全动画脚本?  发表于 2017-3-1 19:50
回复

使用道具 举报

梦石
0
星屑
39236
在线时间
11155 小时
注册时间
2009-3-15
回帖
4768
发表于 2017-3-1 20:24:38 | 显示全部楼层
本帖最后由 soulsaga 于 2017-3-2 09:36 编辑

Scripts.zip (191.68 KB, 下载次数: 36)
没法测试不知道行不行得通..
要两个动画啊..这样应该不行..

我再改了一下..上传脚本给你测测看...

点评

这样啊..还是找大神帮忙弄吧..这样比较有效率.  发表于 2017-3-2 21:16
等明天去单位看看能不能清出来个。这回多放个测试角色吧。为了以后方便。  发表于 2017-3-2 20:36
没有啊,清出来一个得折腾我好几个小时,而且这个家里的我怕不全,因为是上上周的备份,万一单位最新的版本改了而且忘了改哪里了……就麻烦了  发表于 2017-3-2 20:34
我应该把最后一下闪光的条件去掉了..改成判断对像方和出手方哪个更長的帧数了啊  发表于 2017-3-2 09:51
或且找楼下的大神帮你弄吧..我没强到只看脚本就能理解的程度..  发表于 2017-3-2 09:49
回复

使用道具 举报

梦石
1
星屑
24088
在线时间
3339 小时
注册时间
2011-7-8
回帖
3862

开拓者

发表于 2017-3-1 22:27:40 | 显示全部楼层
本帖最后由 guoxiaomi 于 2017-3-2 01:12 编辑

如我前面所说,修改了 RPG::Sprite 的 animation_set_sprites(sprites, cell_data, position) 方法:
[pre lang="ruby"]#==============================================================================
# 全图动画 (突破动画 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
        # 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
#==============================================================================[/pre]

点评

感谢大神解決问题!!  发表于 2017-3-2 14:33
请及时测试看看有无冲突!  发表于 2017-3-1 22:40
熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复

使用道具 举报

梦石
0
星屑
35248
在线时间
4171 小时
注册时间
2007-12-15
回帖
9489
 楼主| 发表于 2017-3-2 00:08:34 | 显示全部楼层
本帖最后由 89444640 于 2017-3-2 00:19 编辑
guoxiaomi 发表于 2017-3-1 22:27
如我前面所说,修改了 RPG::Sprite 的 animation_set_sprites(sprites, cell_data, position) 方法:
#==== ...

首先 是在main前插入脚本没错吧- -b
素材我看明白了 垂直排列每张640*320
然后,……我怎么用?导入到pic文件夹下还是动画文件夹下?
公用事件调用?
请用这个做个范例吧。实在是不明白怎么用。
全屏动画01★全图320★.rar (193.59 KB, 下载次数: 42)

那个16个单元数怎么回事?最多只能16个单元的全屏动画?
1.4 图片名包含 ★全图320YS160★ 则播放的动画会向下移动 160 像素
这个的作用是什么,不是左上角为基准位置显示640*320的就是全屏了吗?不理解向下移动160像素作用是什么--b
回复

使用道具 举报

梦石
1
星屑
24088
在线时间
3339 小时
注册时间
2011-7-8
回帖
3862

开拓者

发表于 2017-3-2 00:51:47 | 显示全部楼层
本帖最后由 guoxiaomi 于 2017-3-2 01:34 编辑

脚本插在main前的任何地方应该都可以

这个脚本的作用是识别动画文件的名称,如果是特定的名称就不用192x192的模式。所以导入到动画文件夹下。

调用方法就是普通的调用方法,动画制作好了之后,事件调用,或者设置为技能绑定的动画。

范例已上传。

16个单元是指,RM默认的动画,是把一个素材图分成192x192的很多份,把每一份称为子素材。每一帧最多添加 16 个单元,每个单元就是原来192x192的子素材的平移、旋转和缩放等。但是全图动画不能独立设置多个单元的位置,多个单元是重叠在相同位置。

关于向下移动若干像素的作用,我添加了另一个黑色的三角形图片,你一看就知道可能用在哪里。

实际上这是基于默认系统的脚本,我并不知道全动画脚本怎么调用动画。如果全动画脚本的技能调用动画和默认系统一样,就是播放数据库里设置好的动画,那就没问题。

此外,尽管每个单元的位置都是相同的,但是每帧依旧可以使用多个单元,设置为半透明叠在一起制造出类似残影的效果。

全图动画.zip

592.54 KB, 下载次数: 78

点评

对。高度,透明度什么的可能要注意,也可能不用注意……  发表于 2017-3-2 20:45
残影我以前手画的,这回知道怎么合成了,原来就是2 1 两个图像叠加,1为2的前一帧动作,多重残影同理。  发表于 2017-3-2 20:40
诶,残影的话,是我做范例吗?还是你已经理解我的意思,准备自己做一个?  发表于 2017-3-2 01:51
等有时间头做点范例演示一下叠加效果,像素图看不出来特效高清,这回可就不用在意192特效总是边缘有支线且过的痕迹了。  发表于 2017-3-2 01:45
似乎应该,不过标题就不应该是无缝动画,而是全屏动画播放了。  发表于 2017-3-2 01:43

评分

参与人数 1星屑 +120 收起 理由
89444640 + 120 非常感谢,效果很好~目前无冲突正常显示.

查看全部评分

熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复

使用道具 举报

梦石
0
星屑
35248
在线时间
4171 小时
注册时间
2007-12-15
回帖
9489
 楼主| 发表于 2017-3-2 01:39:02 | 显示全部楼层
guoxiaomi 发表于 2017-3-2 00:51
这个脚本的作用是识别动画文件的名称,如果是特定的名称就不用192x192的模式。所以导入到动画文件夹下。

...

非常感謝大半夜的還……怎麼又繁體中文了 ……大半夜的还帮我做范例。黑色三角形做特写用?没用过这类显示方式,动画调用可以按照平时的习惯拼了,只要记住每一帧显示的是什么。
这样可以轻松的做和敌人对招的动画了。ps里面直接调好就行。
这个效果似乎不适合高清大型人物使用,我试了一下非常别扭,视觉效果问题,估计只适合放全屏魔法和人物招式特写用。
常规显示方式试速度线+半身像,不过每一帧都要预先调节好特效,使用原来的叠加方式会较为困难。
不过似乎这个也能做过长动画用,只不过是200帧为基准,分段播放了。我怎么又卓me哦这么蛋疼的用法……

点评

我看了看全动画的脚本,发现使用方和目标的动画是一起播放的。所以想到一个播放在敌人背后,一个播放在敌人面前,就添加了调整动画高度的方法  发表于 2017-3-2 11:02
明白了,这就不用每一帧都调一个位移了,而且还可以在敌方那里显示光效进行叠加XD这设计真不错~  发表于 2017-3-2 08:58
“高清大型人物”不知道是什么,试试把位置调成“上”,这样就能在所有动画上方显示了?  发表于 2017-3-2 01:49
2点前睡不着……应该是“特写”的意思吧,就是说有时候希望只在屏幕中间显示动画。  发表于 2017-3-2 01:46
回复

使用道具 举报

梦石
1
星屑
24088
在线时间
3339 小时
注册时间
2011-7-8
回帖
3862

开拓者

发表于 2017-3-2 01:58:55 | 显示全部楼层
本帖最后由 guoxiaomi 于 2017-3-2 02:06 编辑
89444640 发表于 2017-3-2 01:39
非常感謝大半夜的還……怎麼又繁體中文了 ……大半夜的还帮我做范例。黑色三角形做特写用?没用过这类显 ...


提醒一下,默认的战斗系统,如果是角色身上的动画,比如作为技能使用者的使用方动画和作为技能目标的目标动画。是会覆盖下面的战斗框。如果是敌人身上的动画则不会。

这似乎是Viewport相互遮挡的问题,所以如果想在战斗中显示640x480的动画,就要在角色身上显示。

点评

所以当年RMXP才会给动画加上192x192的限制=_=  发表于 2017-3-2 09:00
嗯,确实也只能这样,己方动画播放,敌人创伤光效显示,因为敌人显示等于同时处理多个敌人的叠加,卡的孙子似的- -b  发表于 2017-3-2 08:55
熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复

使用道具 举报

梦石
0
星屑
39236
在线时间
11155 小时
注册时间
2009-3-15
回帖
4768
发表于 2017-3-3 15:08:48 | 显示全部楼层
89444640 发表于 2017-3-2 01:39
非常感謝大半夜的還……怎麼又繁體中文了 ……大半夜的还帮我做范例。黑色三角形做特写用?没用过这类显 ...


这次我真的改好了..也测试过了..
原来你打敌人是算敌人动作那的.. Scripts.rxdata (191.91 KB, 下载次数: 31)
应该会播放完动画才死亡了..

点评

那啥……因为我发你的脚本和单位的不一样,能告诉我改了哪里吗?  发表于 2017-3-4 14:07
对,攻击动画是己方的,命中动画是敌方的,- -b,所以敌人多了,全屏才会卡死,因此才需要全屏播放动画,我试试看~  发表于 2017-3-4 14:05
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部