じ☆ve冰风 发表于 2024-4-20 02:18:00

简单的火焰效果

使用示例及说明:
RUBY 代码
# 函数原型: (返回值为下次调用的offXY)
# int fire(int dst_bmp_obj_id, int msk_bmp_obj_id, int tex_bmp_obj_id,
#          int offXY, int ofx, int ofy)
dll = "fire_effect.dll"
fire = Win32API.new(dll, 'fire', 'LLLLLL', 'L')

# 3个位图大小需一致,且宽需为4的倍数,宽与高皆小于4096
dst = Bitmap.new(640, 480)
msk = Bitmap.new("fire_mask3.png")#含透明通道图片,填充色为黑色(表示显示部分)

# 黑白纹理,“左右/上下补齐”(类似RMXP中的panoramas),需平滑一些
tex = Bitmap.new("noise.jpg")      


vpt = Viewport.new(0, 0, 640, 480)
vpt.color.set(255, 255, 255)

sprite = Sprite.new
sprite.bitmap = dst

# oxy   记录已偏移信息用 x0 向右< 0 向左;ofy > 0 向上< 0 向下
#       每帧调用,ofx/y的值不用太大
oxy, ofx, ofy = 0, -1, 1

loopdo
Graphics.update
oxy = fire.call(dst.__id__, msk.__id__, tex.__id__, oxy, ofx, ofy)
end



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



             本帖来自P1论坛作者RPGzh500223,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址:https://rpg.blue/forum.php?mod=viewthread&tid=490471若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。
页: [1]
查看完整版本: 简单的火焰效果