设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
楼主: 89444640
打印 上一主题 下一主题

[有事请教] 无缝特效

[复制链接]

Lv5.捕梦者

梦石
0
星屑
36382
在线时间
10788 小时
注册时间
2009-3-15
帖子
4813
11
发表于 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
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
36382
在线时间
10788 小时
注册时间
2009-3-15
帖子
4813
12
发表于 2017-3-1 15:27:49 | 只看该作者
你还有什么未解決的..快找大神看看有没空帮你搞定..
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
35180
在线时间
4169 小时
注册时间
2007-12-15
帖子
10066
13
 楼主| 发表于 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
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
36382
在线时间
10788 小时
注册时间
2009-3-15
帖子
4813
14
发表于 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
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

梦石
1
星屑
23994
在线时间
3339 小时
注册时间
2011-7-8
帖子
3926

开拓者

15
发表于 2017-3-1 22:27:40 | 只看该作者
本帖最后由 guoxiaomi 于 2017-3-2 01:12 编辑

如我前面所说,修改了 RPG::Sprite 的 animation_set_sprites(sprites, cell_data, position) 方法:
RUBY 代码复制
  1. #==============================================================================
  2. # 全图动画 (突破动画 192 * 192 限制)
  3. #==============================================================================
  4. # 用法:
  5. # 1. 动画图片设置:
  6. #    1.1 宽度 640
  7. #    1.2 所有的子图片竖着排列
  8. #    1.3 图片名包含 ★全图320★ 这里 320 是单张高度值
  9. #    1.4 图片名包含 ★全图320YS160★ 则播放的动画会向下移动 160 像素
  10. # 2. 数据库动画设置
  11. #    2.1 选择一帧,添加一个单元
  12. #    2.2 位置:上 在正常动画上方(z=3000);
  13. #        位置:中 在正常动画下方(z=1500)
  14. #        位置:下 在敌人下方(z=0);
  15. #        位置:画面 z = x 坐标* y 坐标 * 放大率
  16. #    2.3 式样:此帧播放的子图片位置
  17. #    2.4 左右反转、不透明度和合成方式可以正常使用
  18. #    2.5 X坐标、Y坐标、放大率、旋转角度不可以正常使用
  19. #==============================================================================
  20. # 作者:guoxiaomi 脚本来自 rpg.blue
  21. #==============================================================================
  22.  
  23. module RPG
  24.   class Sprite < ::Sprite
  25.     def animation_set_sprites(sprites, cell_data, position)
  26.       # --------------------------------------------------------
  27.       # 图片文件名里包含★全图320★
  28.       # --------------------------------------------------------
  29.       if @_animation && @_animation.animation_name =~ /★全图(\d+).*★/
  30.         full_screen = true
  31.         width = 640
  32.         height = $1.to_i
  33.         y_shift = 0
  34.         if @_animation.animation_name =~ /★全图\d+YS(\d+)★/
  35.           y_shift = $1.to_i
  36.         end
  37.       else
  38.         full_screen = false
  39.       end
  40.       # --------------------------------------------------------
  41.       # 这 16 个点是动画上的单元数,最多 16 个,然后每个进行处理
  42.       for i in 0..15
  43.         sprite = sprites[i]
  44.         # cell_data[i, 0] 是该单元的图片在动画图片中的位置
  45.         pattern = cell_data[i, 0]
  46.         # 如果 patten = -1, or nil,本帧画面上不显示,处理下一个单元
  47.         # 如果 sprite == nil,处理下一个单元
  48.         if sprite == nil or pattern == nil or pattern == -1
  49.           sprite.visible = false if sprite != nil
  50.           next
  51.         end        
  52.         sprite.visible = true
  53.  
  54.         if full_screen
  55.           # --------------------------------------------------------
  56.           # 全图的情况
  57.           # --------------------------------------------------------
  58.           sprite.src_rect.set(0, pattern * height, width, height)
  59.           sprite.x = width / 2
  60.           sprite.y = height / 2 + y_shift
  61.           sprite.ox = 320
  62.           sprite.oy = height / 2
  63.           # 高度:位置为 上中下高度分别是 3000/1500/0(敌人背后)
  64.           # 位置为 画面 时,高度为 x 坐标* y 坐标 * 放大率
  65.           case position
  66.           when 0
  67.             sprite.z = 3000 # 普通动画上方
  68.           when 1
  69.             sprite.z = 1500 # 普通动画下方
  70.           when 2
  71.             sprite.z = 0 # 敌人下方
  72.           when 3
  73.             sprite.z = cell_data[i, 1] * cell_data[i, 2] * cell_data[i, 3] # 自定义高度
  74.           end
  75.           sprite.mirror = (cell_data[i, 5] == 1) # 镜像
  76.           sprite.opacity = cell_data[i, 6] * self.opacity / 255.0 # 透明度
  77.           sprite.blend_type = cell_data[i, 7] # 混合方式
  78.         else
  79.           # --------------------------------------------------------
  80.           # 正常的情况
  81.           # --------------------------------------------------------
  82.           # 这里找到该单元的图片在动画图片中的位置和大小                  
  83.           sprite.src_rect.set(pattern % 5 * 192, pattern / 5 * 192, 192, 192)                  
  84.           # 位置:画面的情况
  85.           if position == 3
  86.             # 无论是战斗中还是地图上,尚未发现self.viewport为nil的情况  
  87.             # self 是显示动画的 Sprite
  88.             if self.viewport != nil
  89.               # viewport存在,x 为viewport中心,y 为viewport高 - 160
  90.               sprite.x = self.viewport.rect.width / 2
  91.               sprite.y = self.viewport.rect.height - 160
  92.             else
  93.               # viewport不存在,中心设于游戏窗口中心(标准640*480)
  94.               sprite.x = 320
  95.               sprite.y = 240
  96.             end
  97.           else
  98.             # 位置:上中下的情况
  99.             # 中的情况,图片中心位置和显示动画的 Sprite中心重合
  100.             sprite.x = self.x - self.ox + self.src_rect.width / 2
  101.             sprite.y = self.y - self.oy + self.src_rect.height / 2
  102.             # 上的情况,图片上移自身 1/4 的高度
  103.             sprite.y -= self.src_rect.height / 4 if position == 0
  104.             # 下的情况,图片下移自身 1/4 的高度
  105.             sprite.y += self.src_rect.height / 4 if position == 2
  106.           end
  107.           # cell_data[i, 1] 是该单元的图片的
  108.           sprite.x += cell_data[i, 1] # x 偏移量
  109.           sprite.y += cell_data[i, 2] # y 偏移量
  110.           sprite.z = 2000 # 高度
  111.           sprite.ox = 96 # 图片的 中心 位置 x
  112.           sprite.oy = 96 # 图片的 中心 位置 y,中心位置要和画面的中心位置重合
  113.           sprite.zoom_x = cell_data[i, 3] / 100.0 # x 放大率
  114.           sprite.zoom_y = cell_data[i, 3] / 100.0 # y 放大率
  115.           sprite.angle = cell_data[i, 4] # 旋转
  116.           sprite.mirror = (cell_data[i, 5] == 1) # 镜像
  117.           sprite.opacity = cell_data[i, 6] * self.opacity / 255.0 # 透明度
  118.           sprite.blend_type = cell_data[i, 7] # 混合方式
  119.         end
  120.       end
  121.     end
  122.   end
  123. end
  124. #==============================================================================
  125. # 作者:guoxiaomi 脚本来自 rpg.blue
  126. #==============================================================================

点评

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

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
35180
在线时间
4169 小时
注册时间
2007-12-15
帖子
10066
16
 楼主| 发表于 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
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

梦石
1
星屑
23994
在线时间
3339 小时
注册时间
2011-7-8
帖子
3926

开拓者

17
发表于 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 网络脚本 *
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
35180
在线时间
4169 小时
注册时间
2007-12-15
帖子
10066
18
 楼主| 发表于 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
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

梦石
1
星屑
23994
在线时间
3339 小时
注册时间
2011-7-8
帖子
3926

开拓者

19
发表于 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 网络脚本 *
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
36382
在线时间
10788 小时
注册时间
2009-3-15
帖子
4813
20
发表于 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
回复 支持 反对

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-13 18:38

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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