# 函数原型: (返回值为下次调用的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
noise.jpg (39.67 KB, 下载次数: 12)
fire_mask3.png (21 KB, 下载次数: 8)
fire.gif (1015.76 KB, 下载次数: 11)
效果示意
3.45 KB, 下载次数: 19
fire_effect.dll
欢迎光临 Project1 (https://rpg.blue/) | Powered by Discuz! X3.1 |