加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
本帖最后由 RPGzh500223 于 2022-7-29 19:13 编辑
使用示例及说明:
# 函数原型: (返回值为下次调用的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 记录已偏移信息用 x << 12 | y # ofx/y 表示X/Y轴偏移方向及速度(1像素/次),ofx/y可以为0 # 方向类似数学直角坐标系,ofx > 0 向右 < 0 向左;ofy > 0 向上 < 0 向下 # 每帧调用,ofx/y的值不用太大 oxy, ofx, ofy = 0, -1, 1 loop do Graphics.update oxy = fire.call(dst.__id__, msk.__id__, tex.__id__, oxy, ofx, ofy) end
# 函数原型: (返回值为下次调用的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 记录已偏移信息用 x << 12 | y
# ofx/y 表示X/Y轴偏移方向及速度(1像素/次),ofx/y可以为0
# 方向类似数学直角坐标系,ofx > 0 向右 < 0 向左;ofy > 0 向上 < 0 向下
# 每帧调用,ofx/y的值不用太大
oxy, ofx, ofy = 0, -1, 1
loop do
Graphics.update
oxy = fire.call(dst.__id__, msk.__id__, tex.__id__, oxy, ofx, ofy)
end
640*480效率还行,更大的大小不推荐使用。640 * 480 我的电脑 fire 函数 650+ 次/秒。
移动的镜头下效果并不好,作为一些镜头固定的战斗背景或菜单背景还不错。
呈现效果和纹理、遮罩关系比较大,考虑到效率并不支持自定义颜色。 |