Project1

标题: 简单的火焰效果 [打印本页]

作者: RPGzh500223    时间: 2022-7-29 13:48
标题: 简单的火焰效果
本帖最后由 RPGzh500223 于 2022-7-29 19:13 编辑

使用示例及说明:
RUBY 代码复制
  1. # 函数原型: (返回值为下次调用的offXY)
  2. # int fire(int dst_bmp_obj_id, int msk_bmp_obj_id, int tex_bmp_obj_id,
  3. #          int offXY, int ofx, int ofy)
  4. dll = "fire_effect.dll"
  5. fire = Win32API.new(dll, 'fire', 'LLLLLL', 'L')
  6.  
  7. # 3个位图大小需一致,且宽需为4的倍数,宽与高皆小于4096
  8. dst = Bitmap.new(640, 480)
  9. msk = Bitmap.new("fire_mask3.png")  #含透明通道图片,填充色为黑色(表示显示部分)
  10.  
  11. # 黑白纹理,“左右/上下补齐”(类似RMXP中的panoramas),需平滑一些
  12. tex = Bitmap.new("noise.jpg")      
  13.  
  14.  
  15. vpt = Viewport.new(0, 0, 640, 480)
  16. vpt.color.set(255, 255, 255)
  17.  
  18. sprite = Sprite.new
  19. sprite.bitmap = dst
  20.  
  21. # oxy   记录已偏移信息用 x << 12 | y
  22. # ofx/y 表示X/Y轴偏移方向及速度(1像素/次),ofx/y可以为0
  23. #       方向类似数学直角坐标系,ofx > 0 向右  < 0 向左;ofy > 0 向上  < 0 向下
  24. #       每帧调用,ofx/y的值不用太大
  25. oxy, ofx, ofy = 0, -1, 1
  26.  
  27. loop do
  28.   Graphics.update  
  29.   oxy = fire.call(dst.__id__, msk.__id__, tex.__id__, oxy, ofx, ofy)
  30. end



640*480效率还行,更大的大小不推荐使用。640 * 480 我的电脑 fire 函数 650+ 次/秒。
移动的镜头下效果并不好,作为一些镜头固定的战斗背景或菜单背景还不错。
呈现效果和纹理、遮罩关系比较大,考虑到效率并不支持自定义颜色。

noise.jpg (39.67 KB, 下载次数: 12)

noise.jpg

fire_mask3.png (21 KB, 下载次数: 8)

fire_mask3.png

fire.gif (1015.76 KB, 下载次数: 11)

效果示意

效果示意

fire_effect.zip

3.45 KB, 下载次数: 19

fire_effect.dll


作者: 纯属小虫    时间: 2022-7-29 15:06
很好~~~
踩到火之后能让玩家深刻体会到阿尔西斯被烧了

建议:
能不能做个类似【画面闪烁】和【画面震动】版本的
持续X帧,火焰整体透明度随时长变小,最后消失




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