赞 | 86 |
VIP | 0 |
好人卡 | 1 |
积分 | 136 |
经验 | 14048 |
最后登录 | 2021-1-24 |
在线时间 | 2753 小时 |
Lv4.逐梦者
- 梦石
- 0
- 星屑
- 13562
- 在线时间
- 2753 小时
- 注册时间
- 2014-10-4
- 帖子
- 756
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
本帖最后由 SixRC 于 2015-10-2 00:07 编辑
先前我已经放过两次效果图了
最好的效果图是第二次的最后一张
所以很不廉耻地盗用一下昔日的作品
下面是正式的发布
首先 此脚本仅适用于会脚本的人士
不是需要看完我写的脚本才能用
只是需要自己增加一点部分才能投入使用
所以 不要想着插进去就能用了
我会给出基础部件和一个范例
下面是基础部分
class Bitmap CWP = Win32API.new('user32.dll','CallWindowProc','ppiii','i') GetAddr="\x8B\x74\x24\x08\x8B\x36\x8B\x76\x08\x8B\x76\x10\x8B\x7C\x24\x04\x89\x37\xC2\x10\x00" def addr s="\0"*4 CWP.call(GetAddr,s,object_id*2+16,0,0) s.unpack("L")[0] end end module SixRC module_function def quan(r) r2=r*4 piece=2*Math::PI/r2 s=[] for i in 0...r2 s<<(r*Math.cos(piece*i)).round s<<(r*Math.sin(piece*i)).round end s end def get_quan(r) s=[[0,0].pack('l*')] r.times{|i|s<<quan(i+1).pack('l*')} s end end class Sprite ###############精灵的波纹拓展############################## #这里介绍一下工作流程 #有两个buf 每个buf的尺寸是精灵位图的尺寸 #这两个buf里存储着那一个点的波动强度 #每一次先是增加buf里面的波动 #然后通过运算把buf1里面的更新到buf2 或是反之 #然后再根据buf中各个点的强度更新位图 #具体方法下面点明了 #想使用它只不过需要自己增加判断增加buf的方法 #申明的是,或许会有bug 以及不完善的地方 #以及...代码冗余 呵呵 毕竟我是业余的 #在做的时候也就是在学习 #何况 我是写一段算一段 写完下段忘了上段(笑) #不过 应该不会多 大体能优化的我都优化过了 小细节不要在意 #效率方面 是没问题的 #对了 由于这个工作流程 #增加buf的点数并不是很影响效率 反之 因为每次更新都会更新每个点 #所以图片大小最影响效率 #对了 不需要在意点会不会加出界限 #我在Code2中有判断 超出界限会被反弹 #最后 图片宽高各需大于3 # -------By SixRC # 2015.9.26 ########################################################### CWP_pppii=Win32API.new('user32','CallWindowProc','pppii','v') CWP_ppppi=Win32API.new('user32','CallWindowProc','ppppi','v') #Wave_Code1用于更新buf Wave_Code1="\x55\x8B\xEC\x8B\x75\x08\x8B\x7D\x0C\x8B\x5D\x14\x4B\x4B\x43\x8B\x4D\x10\x49\x49\x41\x8B\xC3\x48\x48\x0F\xAF\x45\x10\x03\xC1\x48\xC1\xE0\x02\x8B\x14\x06\x8B\xC3\x0F\xAF\x45\x10\x03\xC1\x48\xC1\xE0\x02\x03\x14\x06\x8B\xC3\x48\x0F\xAF\x45\x10\x03\xC1\xC1\xE0\x02\x03\x14\x06\x8B\xC3\x48\x0F\xAF\x45\x10\x03\xC1\x48\x48\xC1\xE0\x02\x03\x14\x06\x6B\xD2\x0E\xC1\xEA\x06\x8B\xC3\x48\x0F\xAF\x45\x10\x03\xC1\x48\xC1\xE0\x02\x89\x14\x07\x49\xE2\xA6\x4B\x4B\x83\xFB\x00\x75\x99\xC9\xC2\x10\x00" #Wave_Code2用于根据buf更改位图颜色 #下面两个Wave_Code2是不同的 第一个增加了根据波纹力度适当加深颜色的功能 #比方 1,1,1 --> 2,2,2 or 3,3,3 #具体使用哪个自己随意 #Wave_Code2="\x55\x8B\xEC\x8B\x75\x08\x8B\x7D\x0C\x8B\x5D\x14\x4B\x4B\x43\x8B\x4D\x10\x49\x49\x41\x8B\xC3\x48\x0F\xAF\x45\x10\x03\xC1\xC1\xE0\x02\x8B\x14\x06\x8B\xC3\x48\x0F\xAF\x45\x10\x03\xC1\x48\x48\xC1\xE0\x02\x2B\x14\x06\x33\xC0\x83\xFA\x00\x74\x23\x83\xFA\x00\x7F\x10\x48\x81\xC2\xE8\x03\x00\x00\x83\xFA\x00\x72\xF4\x8B\xD0\xEB\x0E\x40\x81\xEA\xE8\x03\x00\x00\x83\xFA\x00\x7F\xF4\x8B\xD0\x89\x55\x08\x8B\x45\x08\x03\xC1\x3B\x45\x10\x72\x09\x8B\x45\x10\x2B\xC1\x48\x89\x45\x08\x8B\x45\x08\x03\xC1\x83\xF8\x00\x77\x0A\xB8\x01\x00\x00\x00\x2B\xC1\x89\x45\x08\x8B\xC3\x48\x48\x0F\xAF\x45\x10\x03\xC1\x48\xC1\xE0\x02\x8B\x14\x06\x8B\xC3\x0F\xAF\x45\x10\x03\xC1\x48\xC1\xE0\x02\x2B\x14\x06\x83\xFA\x00\x74\x25\x33\xC0\x83\xFA\x00\x7F\x10\x48\x81\xC2\xE8\x03\x00\x00\x83\xFA\x00\x72\xF4\x8B\xD0\xEB\x0E\x40\x81\xEA\xE8\x03\x00\x00\x83\xFA\x00\x7F\xF4\x8B\xD0\x89\x55\x0C\x8B\x45\x0C\x03\xC3\x3B\x45\x14\x72\x09\x8B\x45\x14\x2B\xC3\x48\x89\x45\x0C\x8B\x45\x0C\x03\xC3\x83\xF8\x00\x7F\x0A\xB8\x01\x00\x00\x00\x2B\xC3\x89\x45\x0C\x8B\x45\x14\x2B\xC3\x2B\x45\x0C\x0F\xAF\x45\x10\x03\xC1\x48\x03\x45\x08\xC1\xE0\x02\x8B\x57\x04\x8B\x14\x02\x89\x55\x08\x8B\xC3\x48\x0F\xAF\x45\x10\x03\xC1\x48\xC1\xE0\x02\x8B\x04\x06\x33\xD2\x83\xF8\x00\x74\x0C\xFE\xC2\x2D\xB8\x0B\x00\x00\x83\xF8\x00\x7F\xF4\x8A\x45\x08\x8A\xF0\x02\xC2\x3A\xC6\x73\x05\xB0\xFF\x88\x45\x08\x8A\x45\x09\x8A\xF0\x02\xC2\x3A\xC6\x73\x05\xB0\xFF\x88\x45\x09\x8A\x45\x0A\x8A\xF0\x02\xC2\x3A\xC6\x73\x05\xB0\xFF\x88\x45\x0A\x8B\x45\x14\x2B\xC3\x0F\xAF\x45\x10\x03\xC1\x48\xC1\xE0\x02\x8B\x17\x03\xD0\x8B\x45\x08\x89\x02\x49\x49\x83\xF9\x00\x0F\x85\x83\xFE\xFF\xFF\x4B\x4B\x83\xFB\x00\x0F\x85\x72\xFE\xFF\xFF\xC9\xC2\x10\x00" Wave_Code2="\x55\x8B\xEC\x8B\x75\x08\x8B\x7D\x0C\x8B\x5D\x14\x4B\x4B\x43\x8B\x4D\x10\x49\x49\x41\x8B\xC3\x48\x0F\xAF\x45\x10\x03\xC1\xC1\xE0\x02\x8B\x14\x06\x8B\xC3\x48\x0F\xAF\x45\x10\x03\xC1\x48\x48\xC1\xE0\x02\x2B\x14\x06\x33\xC0\x83\xFA\x00\x74\x23\x83\xFA\x00\x7F\x10\x48\x81\xC2\xE8\x03\x00\x00\x83\xFA\x00\x72\xF4\x8B\xD0\xEB\x0E\x40\x81\xEA\xE8\x03\x00\x00\x83\xFA\x00\x7F\xF4\x8B\xD0\x89\x55\x08\x8B\x45\x08\x03\xC1\x3B\x45\x10\x72\x09\x8B\x45\x10\x2B\xC1\x48\x89\x45\x08\x8B\x45\x08\x03\xC1\x83\xF8\x00\x77\x0A\xB8\x01\x00\x00\x00\x2B\xC1\x89\x45\x08\x8B\xC3\x48\x48\x0F\xAF\x45\x10\x03\xC1\x48\xC1\xE0\x02\x8B\x14\x06\x8B\xC3\x0F\xAF\x45\x10\x03\xC1\x48\xC1\xE0\x02\x2B\x14\x06\x83\xFA\x00\x74\x25\x33\xC0\x83\xFA\x00\x7F\x10\x48\x81\xC2\xE8\x03\x00\x00\x83\xFA\x00\x72\xF4\x8B\xD0\xEB\x0E\x40\x81\xEA\xE8\x03\x00\x00\x83\xFA\x00\x7F\xF4\x8B\xD0\x89\x55\x0C\x8B\x45\x0C\x03\xC3\x3B\x45\x14\x72\x09\x8B\x45\x14\x2B\xC3\x48\x89\x45\x0C\x8B\x45\x0C\x03\xC3\x83\xF8\x00\x7F\x0A\xB8\x01\x00\x00\x00\x2B\xC3\x89\x45\x0C\x8B\x45\x14\x2B\xC3\x2B\x45\x0C\x0F\xAF\x45\x10\x03\xC1\x48\x03\x45\x08\xC1\xE0\x02\x8B\x57\x04\x8B\x14\x02\x89\x55\x08\x8B\xC3\x48\x0F\xAF\x45\x10\x03\xC1\x48\xC1\xE0\x02\x8B\x04\x06\x8B\x45\x14\x2B\xC3\x0F\xAF\x45\x10\x03\xC1\x48\xC1\xE0\x02\x8B\x17\x03\xD0\x8B\x45\x08\x89\x02\x49\x49\x83\xF9\x00\x0F\x85\xC6\xFE\xFF\xFF\x4B\x4B\x83\xFB\x00\x0F\x85\xB5\xFE\xFF\xFF\xC9\xC2\x10\x00" #Wave_Code3用于添加波动点 Wave_Code3="\x55\x8B\xEC\x8B\x75\x10\x33\xFF\x8B\x5D\x0C\xFF\x33\xFF\x73\x04\xFF\x73\x08\xFF\x73\x0C\x8B\x45\xFC\x83\xC0\x02\x50\x8B\x4B\x10\x8B\x1C\x37\x83\xC7\x04\x8B\x45\xF4\x03\xC3\xEB\x28\x8B\xD0\x8B\x1C\x37\x83\xC7\x04\x8B\x45\xF0\x03\xC3\xEB\x36\x0F\xAF\x45\xEC\x03\xC2\xC1\xE0\x02\x8B\x55\x08\x8B\x1C\x10\x03\x5D\x14\x89\x1C\x10\xE2\xCD\xEB\x3A\x83\xF8\x00\x7F\x09\xBB\x02\x00\x00\x00\x2B\xD8\x8B\xC3\x8B\x5D\xFC\x3B\xC3\x7E\xC3\xD1\xE3\x2B\xD8\x8B\xC3\xEB\xE3\x83\xF8\x00\x7F\x09\xBB\x02\x00\x00\x00\x2B\xD8\x8B\xC3\x8B\x5D\xF8\x3B\xC3\x7E\xB5\xD1\xE3\x2B\xD8\x8B\xC3\xEB\xE3\xC9\xC2\x10\x00" #获取圆圈 Wave_Quan=SixRC.get_quan(100) ################波纹初始化################################## #每一个波纹使用前必须调用此方法############################# def wave_init return unless bit=self.bitmap return if (@wave_width=bit.width)<4 return if (@wave_height=bit.height)<4 @wave_buf1="\0"*4*@wave_height*@wave_width @wave_buf2=@wave_buf1 @wave_addr=bit.addr @wave_bit2=Bitmap.new(@wave_width,@wave_height) @wave_bit2.stretch_blt(Rect.new(0,0,@wave_width,@wave_height),bit,Rect.new(0,0,@wave_width,@wave_height)) @wave_addr2=@wave_bit2.addr @wave_jishu=1 @wave_adad=[@wave_addr,@wave_addr2].pack("LL") end ###############buf增加##################################### def wave_add(n,size,strength,x,y) #(哪一个buf,尺寸,强度,x,y) CWP_ppppi.call(Wave_Code3,@wave_buf1,[@wave_width-2,@wave_height-2,x,y,size==0?1:4*size].pack('l*'),Wave_Quan[size],strength) if n==1 CWP_ppppi.call(Wave_Code3,@wave_buf2,[@wave_width-2,@wave_height-2,x,y,size==0?1:4*size].pack('l*'),Wave_Quan[size],strength) if n==2 end ###############波纹更新##################################### #这个更新包括了buf和位图的更新############################## def wave_update if @wave_jishu==1 CWP_pppii.call(Wave_Code1,@wave_buf1,@wave_buf2,@wave_width,@wave_height) CWP_pppii.call(Wave_Code2,@wave_buf2,@wave_adad,@wave_width,@wave_height) @wave_jishu=2 else CWP_pppii.call(Wave_Code1,@wave_buf2,@wave_buf1,@wave_width,@wave_height) CWP_pppii.call(Wave_Code2,@wave_buf1,@wave_adad,@wave_width,@wave_height) @wave_jishu=1 end end ################尾置######################################## end
class Bitmap
CWP = Win32API.new('user32.dll','CallWindowProc','ppiii','i')
GetAddr="\x8B\x74\x24\x08\x8B\x36\x8B\x76\x08\x8B\x76\x10\x8B\x7C\x24\x04\x89\x37\xC2\x10\x00"
def addr
s="\0"*4
CWP.call(GetAddr,s,object_id*2+16,0,0)
s.unpack("L")[0]
end
end
module SixRC
module_function
def quan(r)
r2=r*4
piece=2*Math::PI/r2
s=[]
for i in 0...r2
s<<(r*Math.cos(piece*i)).round
s<<(r*Math.sin(piece*i)).round
end
s
end
def get_quan(r)
s=[[0,0].pack('l*')]
r.times{|i|s<<quan(i+1).pack('l*')}
s
end
end
class Sprite
###############精灵的波纹拓展##############################
#这里介绍一下工作流程
#有两个buf 每个buf的尺寸是精灵位图的尺寸
#这两个buf里存储着那一个点的波动强度
#每一次先是增加buf里面的波动
#然后通过运算把buf1里面的更新到buf2 或是反之
#然后再根据buf中各个点的强度更新位图
#具体方法下面点明了
#想使用它只不过需要自己增加判断增加buf的方法
#申明的是,或许会有bug 以及不完善的地方
#以及...代码冗余 呵呵 毕竟我是业余的
#在做的时候也就是在学习
#何况 我是写一段算一段 写完下段忘了上段(笑)
#不过 应该不会多 大体能优化的我都优化过了 小细节不要在意
#效率方面 是没问题的
#对了 由于这个工作流程
#增加buf的点数并不是很影响效率 反之 因为每次更新都会更新每个点
#所以图片大小最影响效率
#对了 不需要在意点会不会加出界限
#我在Code2中有判断 超出界限会被反弹
#最后 图片宽高各需大于3
# -------By SixRC
# 2015.9.26
###########################################################
CWP_pppii=Win32API.new('user32','CallWindowProc','pppii','v')
CWP_ppppi=Win32API.new('user32','CallWindowProc','ppppi','v')
#Wave_Code1用于更新buf
Wave_Code1="\x55\x8B\xEC\x8B\x75\x08\x8B\x7D\x0C\x8B\x5D\x14\x4B\x4B\x43\x8B\x4D\x10\x49\x49\x41\x8B\xC3\x48\x48\x0F\xAF\x45\x10\x03\xC1\x48\xC1\xE0\x02\x8B\x14\x06\x8B\xC3\x0F\xAF\x45\x10\x03\xC1\x48\xC1\xE0\x02\x03\x14\x06\x8B\xC3\x48\x0F\xAF\x45\x10\x03\xC1\xC1\xE0\x02\x03\x14\x06\x8B\xC3\x48\x0F\xAF\x45\x10\x03\xC1\x48\x48\xC1\xE0\x02\x03\x14\x06\x6B\xD2\x0E\xC1\xEA\x06\x8B\xC3\x48\x0F\xAF\x45\x10\x03\xC1\x48\xC1\xE0\x02\x89\x14\x07\x49\xE2\xA6\x4B\x4B\x83\xFB\x00\x75\x99\xC9\xC2\x10\x00"
#Wave_Code2用于根据buf更改位图颜色
#下面两个Wave_Code2是不同的 第一个增加了根据波纹力度适当加深颜色的功能
#比方 1,1,1 --> 2,2,2 or 3,3,3
#具体使用哪个自己随意
#Wave_Code2="\x55\x8B\xEC\x8B\x75\x08\x8B\x7D\x0C\x8B\x5D\x14\x4B\x4B\x43\x8B\x4D\x10\x49\x49\x41\x8B\xC3\x48\x0F\xAF\x45\x10\x03\xC1\xC1\xE0\x02\x8B\x14\x06\x8B\xC3\x48\x0F\xAF\x45\x10\x03\xC1\x48\x48\xC1\xE0\x02\x2B\x14\x06\x33\xC0\x83\xFA\x00\x74\x23\x83\xFA\x00\x7F\x10\x48\x81\xC2\xE8\x03\x00\x00\x83\xFA\x00\x72\xF4\x8B\xD0\xEB\x0E\x40\x81\xEA\xE8\x03\x00\x00\x83\xFA\x00\x7F\xF4\x8B\xD0\x89\x55\x08\x8B\x45\x08\x03\xC1\x3B\x45\x10\x72\x09\x8B\x45\x10\x2B\xC1\x48\x89\x45\x08\x8B\x45\x08\x03\xC1\x83\xF8\x00\x77\x0A\xB8\x01\x00\x00\x00\x2B\xC1\x89\x45\x08\x8B\xC3\x48\x48\x0F\xAF\x45\x10\x03\xC1\x48\xC1\xE0\x02\x8B\x14\x06\x8B\xC3\x0F\xAF\x45\x10\x03\xC1\x48\xC1\xE0\x02\x2B\x14\x06\x83\xFA\x00\x74\x25\x33\xC0\x83\xFA\x00\x7F\x10\x48\x81\xC2\xE8\x03\x00\x00\x83\xFA\x00\x72\xF4\x8B\xD0\xEB\x0E\x40\x81\xEA\xE8\x03\x00\x00\x83\xFA\x00\x7F\xF4\x8B\xD0\x89\x55\x0C\x8B\x45\x0C\x03\xC3\x3B\x45\x14\x72\x09\x8B\x45\x14\x2B\xC3\x48\x89\x45\x0C\x8B\x45\x0C\x03\xC3\x83\xF8\x00\x7F\x0A\xB8\x01\x00\x00\x00\x2B\xC3\x89\x45\x0C\x8B\x45\x14\x2B\xC3\x2B\x45\x0C\x0F\xAF\x45\x10\x03\xC1\x48\x03\x45\x08\xC1\xE0\x02\x8B\x57\x04\x8B\x14\x02\x89\x55\x08\x8B\xC3\x48\x0F\xAF\x45\x10\x03\xC1\x48\xC1\xE0\x02\x8B\x04\x06\x33\xD2\x83\xF8\x00\x74\x0C\xFE\xC2\x2D\xB8\x0B\x00\x00\x83\xF8\x00\x7F\xF4\x8A\x45\x08\x8A\xF0\x02\xC2\x3A\xC6\x73\x05\xB0\xFF\x88\x45\x08\x8A\x45\x09\x8A\xF0\x02\xC2\x3A\xC6\x73\x05\xB0\xFF\x88\x45\x09\x8A\x45\x0A\x8A\xF0\x02\xC2\x3A\xC6\x73\x05\xB0\xFF\x88\x45\x0A\x8B\x45\x14\x2B\xC3\x0F\xAF\x45\x10\x03\xC1\x48\xC1\xE0\x02\x8B\x17\x03\xD0\x8B\x45\x08\x89\x02\x49\x49\x83\xF9\x00\x0F\x85\x83\xFE\xFF\xFF\x4B\x4B\x83\xFB\x00\x0F\x85\x72\xFE\xFF\xFF\xC9\xC2\x10\x00"
Wave_Code2="\x55\x8B\xEC\x8B\x75\x08\x8B\x7D\x0C\x8B\x5D\x14\x4B\x4B\x43\x8B\x4D\x10\x49\x49\x41\x8B\xC3\x48\x0F\xAF\x45\x10\x03\xC1\xC1\xE0\x02\x8B\x14\x06\x8B\xC3\x48\x0F\xAF\x45\x10\x03\xC1\x48\x48\xC1\xE0\x02\x2B\x14\x06\x33\xC0\x83\xFA\x00\x74\x23\x83\xFA\x00\x7F\x10\x48\x81\xC2\xE8\x03\x00\x00\x83\xFA\x00\x72\xF4\x8B\xD0\xEB\x0E\x40\x81\xEA\xE8\x03\x00\x00\x83\xFA\x00\x7F\xF4\x8B\xD0\x89\x55\x08\x8B\x45\x08\x03\xC1\x3B\x45\x10\x72\x09\x8B\x45\x10\x2B\xC1\x48\x89\x45\x08\x8B\x45\x08\x03\xC1\x83\xF8\x00\x77\x0A\xB8\x01\x00\x00\x00\x2B\xC1\x89\x45\x08\x8B\xC3\x48\x48\x0F\xAF\x45\x10\x03\xC1\x48\xC1\xE0\x02\x8B\x14\x06\x8B\xC3\x0F\xAF\x45\x10\x03\xC1\x48\xC1\xE0\x02\x2B\x14\x06\x83\xFA\x00\x74\x25\x33\xC0\x83\xFA\x00\x7F\x10\x48\x81\xC2\xE8\x03\x00\x00\x83\xFA\x00\x72\xF4\x8B\xD0\xEB\x0E\x40\x81\xEA\xE8\x03\x00\x00\x83\xFA\x00\x7F\xF4\x8B\xD0\x89\x55\x0C\x8B\x45\x0C\x03\xC3\x3B\x45\x14\x72\x09\x8B\x45\x14\x2B\xC3\x48\x89\x45\x0C\x8B\x45\x0C\x03\xC3\x83\xF8\x00\x7F\x0A\xB8\x01\x00\x00\x00\x2B\xC3\x89\x45\x0C\x8B\x45\x14\x2B\xC3\x2B\x45\x0C\x0F\xAF\x45\x10\x03\xC1\x48\x03\x45\x08\xC1\xE0\x02\x8B\x57\x04\x8B\x14\x02\x89\x55\x08\x8B\xC3\x48\x0F\xAF\x45\x10\x03\xC1\x48\xC1\xE0\x02\x8B\x04\x06\x8B\x45\x14\x2B\xC3\x0F\xAF\x45\x10\x03\xC1\x48\xC1\xE0\x02\x8B\x17\x03\xD0\x8B\x45\x08\x89\x02\x49\x49\x83\xF9\x00\x0F\x85\xC6\xFE\xFF\xFF\x4B\x4B\x83\xFB\x00\x0F\x85\xB5\xFE\xFF\xFF\xC9\xC2\x10\x00"
#Wave_Code3用于添加波动点
Wave_Code3="\x55\x8B\xEC\x8B\x75\x10\x33\xFF\x8B\x5D\x0C\xFF\x33\xFF\x73\x04\xFF\x73\x08\xFF\x73\x0C\x8B\x45\xFC\x83\xC0\x02\x50\x8B\x4B\x10\x8B\x1C\x37\x83\xC7\x04\x8B\x45\xF4\x03\xC3\xEB\x28\x8B\xD0\x8B\x1C\x37\x83\xC7\x04\x8B\x45\xF0\x03\xC3\xEB\x36\x0F\xAF\x45\xEC\x03\xC2\xC1\xE0\x02\x8B\x55\x08\x8B\x1C\x10\x03\x5D\x14\x89\x1C\x10\xE2\xCD\xEB\x3A\x83\xF8\x00\x7F\x09\xBB\x02\x00\x00\x00\x2B\xD8\x8B\xC3\x8B\x5D\xFC\x3B\xC3\x7E\xC3\xD1\xE3\x2B\xD8\x8B\xC3\xEB\xE3\x83\xF8\x00\x7F\x09\xBB\x02\x00\x00\x00\x2B\xD8\x8B\xC3\x8B\x5D\xF8\x3B\xC3\x7E\xB5\xD1\xE3\x2B\xD8\x8B\xC3\xEB\xE3\xC9\xC2\x10\x00"
#获取圆圈
Wave_Quan=SixRC.get_quan(100)
################波纹初始化##################################
#每一个波纹使用前必须调用此方法#############################
def wave_init
return unless bit=self.bitmap
return if (@wave_width=bit.width)<4
return if (@wave_height=bit.height)<4
@wave_buf1="\0"*4*@wave_height*@wave_width
@wave_buf2=@wave_buf1
@wave_addr=bit.addr
@wave_bit2=Bitmap.new(@wave_width,@wave_height)
@wave_bit2.stretch_blt(Rect.new(0,0,@wave_width,@wave_height),bit,Rect.new(0,0,@wave_width,@wave_height))
@wave_addr2=@wave_bit2.addr
@wave_jishu=1
@wave_adad=[@wave_addr,@wave_addr2].pack("LL")
end
###############buf增加#####################################
def wave_add(n,size,strength,x,y) #(哪一个buf,尺寸,强度,x,y)
CWP_ppppi.call(Wave_Code3,@wave_buf1,[@wave_width-2,@wave_height-2,x,y,size==0?1:4*size].pack('l*'),Wave_Quan[size],strength) if n==1
CWP_ppppi.call(Wave_Code3,@wave_buf2,[@wave_width-2,@wave_height-2,x,y,size==0?1:4*size].pack('l*'),Wave_Quan[size],strength) if n==2
end
###############波纹更新#####################################
#这个更新包括了buf和位图的更新##############################
def wave_update
if @wave_jishu==1
CWP_pppii.call(Wave_Code1,@wave_buf1,@wave_buf2,@wave_width,@wave_height)
CWP_pppii.call(Wave_Code2,@wave_buf2,@wave_adad,@wave_width,@wave_height)
@wave_jishu=2
else
CWP_pppii.call(Wave_Code1,@wave_buf2,@wave_buf1,@wave_width,@wave_height)
CWP_pppii.call(Wave_Code2,@wave_buf1,@wave_adad,@wave_width,@wave_height)
@wave_jishu=1
end
end
################尾置########################################
end
这里介绍一下工作流程
有两个buf 每个buf的尺寸是精灵位图的尺寸
这两个buf里存储着那一个点的波动强度
每一次先是增加buf里面的波动
然后通过运算把buf1里面的更新到buf2 或是反之
然后再根据buf中各个点的强度更新位图
具体方法下面点明了
想使用它只不过需要自己增加判断增加buf的方法
申明的是,或许会有bug 以及不完善的地方
以及...代码冗余 呵呵 毕竟我是业余的
在做的时候也就是在学习
何况 我是写一段算一段 写完下段忘了上段(笑)
不过 应该不会多 大体能优化的我都优化过了 小细节不要在意
效率方面 是没问题的
对了 由于这个工作流程
增加buf的点数并不是很影响效率 反之 因为每次更新都会更新每个点
所以图片大小最影响效率
对了 不需要在意点会不会加出界限
我在Code2中有判断 超出界限会被反弹
最后 图片宽高各需大于3
下面是一个范例
添加buf的方式是判断鼠标位置 若在区域内就添加
所以滑动鼠标即可看到波纹
具体的使用方式全在此体现
我在基础之上的改动有标明
水波纹范例.7z
(106.58 KB, 下载次数: 254)
最后嘛 随便聊两句
鉴于是水波纹 蓝色的背景是最好看的
别的都没有那种感觉
反正我这样觉得
恩 似乎也没啥好说的了 |
评分
-
查看全部评分
|