赞 | 0 |
VIP | 19 |
好人卡 | 4 |
积分 | 1 |
经验 | 13972 |
最后登录 | 2017-7-16 |
在线时间 | 192 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 50
- 在线时间
- 192 小时
- 注册时间
- 2010-8-23
- 帖子
- 161
|
RMFlash
class String CP_ACP = 0 CP_UTF8 = 65001 def u2s m2w = Win32API.new("kernel32", "MultiByteToWideChar", "ilpipi", "i") w2m = Win32API.new("kernel32", "WideCharToMultiByte", "ilpipipp", "i") len = m2w.call(CP_UTF8, 0, self, -1, nil, 0) buf = "\0" * (len*2) m2w.call(CP_UTF8, 0, self, -1, buf, buf.size/2) len = w2m.call(CP_ACP, 0, buf, -1, nil, 0, nil, nil) ret = "\0" * len w2m.call(CP_ACP, 0, buf, -1, ret, ret.size, nil, nil) return ret end def s2u m2w = Win32API.new("kernel32", "MultiByteToWideChar", "ilpipi", "i") w2m = Win32API.new("kernel32", "WideCharToMultiByte", "ilpipipp", "i") len = m2w.call(CP_ACP, 0, self, -1, nil, 0); buf = "\0" * (len*2) m2w.call(CP_ACP, 0, self, -1, buf, buf.size/2); len = w2m.call(CP_UTF8, 0, buf, -1, nil, 0, nil, nil); ret = "\0" * len w2m.call(CP_UTF8, 0, buf, -1, ret, ret.size, nil, nil); return ret end def s2u! self[0, length] = s2u end def u2s! self[0, length] = u2s end end class Bitmap RtlMoveMemory_pi = Win32API.new('kernel32', 'RtlMoveMemory', 'pii', 'i') RtlMoveMemory_ip = Win32API.new('kernel32', 'RtlMoveMemory', 'ipi', 'i') def address buffer, ad = "xxxx", object_id * 2 + 16 RtlMoveMemory_pi.call(buffer, ad, 4); ad = buffer.unpack("L")[0] + 8 RtlMoveMemory_pi.call(buffer, ad, 4); ad = buffer.unpack("L")[0] + 16 RtlMoveMemory_pi.call(buffer, ad, 4); return buffer.unpack("L")[0] end end class RMFlash API_NEW = Win32API.new("RMFlash", "_new", "piil", "l") API_UPDATE = Win32API.new("RMFlash", "_update", "l", "v") API_FREE = Win32API.new("RMFlash", "_free", "l", "v") API_PLAYING = Win32API.new("RMFlash", "_is_playing", "l", "i") API_PAUSE = Win32API.new("RMFlash", "_pause", "l", "v") API_RESUME = Win32API.new("RMFlash", "_resume", "l", "v") API_BACK = Win32API.new("RMFlash", "_back", "l", "v") API_REWIND = Win32API.new("RMFlash", "_rewind", "l", "v") API_FORWARD = Win32API.new("RMFlash", "_forward", "l", "v") API_CURFRAME = Win32API.new("RMFlash", "_cur_frame", "l", "i") API_TOTALFRAME = Win32API.new("RMFlash", "_total_frames", "l", "i") API_GOTOFRAME = Win32API.new("RMFlash", "_goto_frame", "li", "v") API_GETLOOP = Win32API.new("RMFlash", "_get_loop", "l", "i") API_SETLOOP = Win32API.new("RMFlash", "_set_loop", "li", "v") API_CLEARALL = Win32API.new("RMFlash", "_clear_all", "v", "v") API_VALID = Win32API.new("RMFlash", "_valid", "l", "i") API_SENDMSG = Win32API.new("RMFlash", "_send_message", "liii", "l") CUR_PATH = Dir.pwd def self.get_version end def self.clear_all API_CLEARALL.call end def self.load(name, width, height, v = nil) new("#{CUR_PATH}/#{name}".u2s, width, height, v) end attr_reader :valid def initialize(flash_name, flash_width, flash_height, viewport = nil) [url=home.php?mod=space&uid=114926]@sprite[/url] = Sprite.new(viewport) @sprite.bitmap = Bitmap.new(flash_width, flash_height) @value = API_NEW.call(flash_name, flash_width, flash_height, @sprite.bitmap.address) [url=home.php?mod=space&uid=520184]@loop[/url] = API_GETLOOP.call(@value) > 0 @valid = API_VALID.call(@value) > 0 end def viewport @sprite.viewport end def update API_UPDATE.call(@value) end def dispose API_FREE.call(@sprite.bitmap.address) end def playing? API_PLAYING.call(@value) > 0 end def pause API_PAUSE.call(@value) end def resume API_RESUME.call(@value) end def back API_BACK.call(@value) end def rewind API_REWIND.call(@value) end def forward API_FORWARD.call(@value) end def current_frame API_CURFRAME.call(@value) end def total_frames API_TOTALFRAME.call(@value) end def goto_frame(goal_frame) API_GOTOFRAME.call(@value, goal_frame) end def x @sprite.x end def x=(v) @sprite.x = v end def y @sprite.y end def y=(v) @sprite.y = v end def z @sprite.z end def z=(v) @sprite.z = v end def width @sprite.bitmap.width end def height @sprite.bitmap.height end def loop? @loop end def loop=(v) if @loop != v @loop = v API_SETLOOP.call(@value, v) end end def msg_to_flash(msg, wParam, lParam) return API_SENDMSG.call(@value, msg, wParam, lParam) end # 例 WM_MOUSEMOVE = 0x0200 def make_long(a, b) return (a & 0xffff ) | (b & 0xffff) << 16 end def on_mouse_move(x, y) return msg_to_flash(WM_MOUSEMOVE, 0, make_long(x, y)) end end module Kernel alias origin_exit exit unless method_defined? :exit def exit(*args) RMFlash.clear_all origin_exit(*args) end end #fls = RMFlash.load("2.swf", 640, 480) #while true # Graphics.update # Input.update # fls.update # break if Input.trigger?(13) #end #fls.dispose #exit =begin class RMFlash API_NEW = Win32API.new("RMFlash", "_new", "piil", "l") API_UPDATE = Win32API.new("RMFlash", "_update", "l", "v") API_FREE = Win32API.new("RMFlash", "_free", "l", "v") #def self.new(*args) # obj = super(*args) # obj.send :initialize, *args # obj #end def initialize(flashname, fw, fh) end end RMFlash.new exit =end
class String
CP_ACP = 0
CP_UTF8 = 65001
def u2s
m2w = Win32API.new("kernel32", "MultiByteToWideChar", "ilpipi", "i")
w2m = Win32API.new("kernel32", "WideCharToMultiByte", "ilpipipp", "i")
len = m2w.call(CP_UTF8, 0, self, -1, nil, 0)
buf = "\0" * (len*2)
m2w.call(CP_UTF8, 0, self, -1, buf, buf.size/2)
len = w2m.call(CP_ACP, 0, buf, -1, nil, 0, nil, nil)
ret = "\0" * len
w2m.call(CP_ACP, 0, buf, -1, ret, ret.size, nil, nil)
return ret
end
def s2u
m2w = Win32API.new("kernel32", "MultiByteToWideChar", "ilpipi", "i")
w2m = Win32API.new("kernel32", "WideCharToMultiByte", "ilpipipp", "i")
len = m2w.call(CP_ACP, 0, self, -1, nil, 0);
buf = "\0" * (len*2)
m2w.call(CP_ACP, 0, self, -1, buf, buf.size/2);
len = w2m.call(CP_UTF8, 0, buf, -1, nil, 0, nil, nil);
ret = "\0" * len
w2m.call(CP_UTF8, 0, buf, -1, ret, ret.size, nil, nil);
return ret
end
def s2u!
self[0, length] = s2u
end
def u2s!
self[0, length] = u2s
end
end
class Bitmap
RtlMoveMemory_pi = Win32API.new('kernel32', 'RtlMoveMemory', 'pii', 'i')
RtlMoveMemory_ip = Win32API.new('kernel32', 'RtlMoveMemory', 'ipi', 'i')
def address
buffer, ad = "xxxx", object_id * 2 + 16
RtlMoveMemory_pi.call(buffer, ad, 4); ad = buffer.unpack("L")[0] + 8
RtlMoveMemory_pi.call(buffer, ad, 4); ad = buffer.unpack("L")[0] + 16
RtlMoveMemory_pi.call(buffer, ad, 4); return buffer.unpack("L")[0]
end
end
class RMFlash
API_NEW = Win32API.new("RMFlash", "_new", "piil", "l")
API_UPDATE = Win32API.new("RMFlash", "_update", "l", "v")
API_FREE = Win32API.new("RMFlash", "_free", "l", "v")
API_PLAYING = Win32API.new("RMFlash", "_is_playing", "l", "i")
API_PAUSE = Win32API.new("RMFlash", "_pause", "l", "v")
API_RESUME = Win32API.new("RMFlash", "_resume", "l", "v")
API_BACK = Win32API.new("RMFlash", "_back", "l", "v")
API_REWIND = Win32API.new("RMFlash", "_rewind", "l", "v")
API_FORWARD = Win32API.new("RMFlash", "_forward", "l", "v")
API_CURFRAME = Win32API.new("RMFlash", "_cur_frame", "l", "i")
API_TOTALFRAME = Win32API.new("RMFlash", "_total_frames", "l", "i")
API_GOTOFRAME = Win32API.new("RMFlash", "_goto_frame", "li", "v")
API_GETLOOP = Win32API.new("RMFlash", "_get_loop", "l", "i")
API_SETLOOP = Win32API.new("RMFlash", "_set_loop", "li", "v")
API_CLEARALL = Win32API.new("RMFlash", "_clear_all", "v", "v")
API_VALID = Win32API.new("RMFlash", "_valid", "l", "i")
API_SENDMSG = Win32API.new("RMFlash", "_send_message", "liii", "l")
CUR_PATH = Dir.pwd
def self.get_version
end
def self.clear_all
API_CLEARALL.call
end
def self.load(name, width, height, v = nil)
new("#{CUR_PATH}/#{name}".u2s, width, height, v)
end
attr_reader :valid
def initialize(flash_name, flash_width, flash_height, viewport = nil)
[url=home.php?mod=space&uid=114926]@sprite[/url] = Sprite.new(viewport)
@sprite.bitmap = Bitmap.new(flash_width, flash_height)
@value = API_NEW.call(flash_name, flash_width, flash_height, @sprite.bitmap.address)
[url=home.php?mod=space&uid=520184]@loop[/url] = API_GETLOOP.call(@value) > 0
@valid = API_VALID.call(@value) > 0
end
def viewport
@sprite.viewport
end
def update
API_UPDATE.call(@value)
end
def dispose
API_FREE.call(@sprite.bitmap.address)
end
def playing?
API_PLAYING.call(@value) > 0
end
def pause
API_PAUSE.call(@value)
end
def resume
API_RESUME.call(@value)
end
def back
API_BACK.call(@value)
end
def rewind
API_REWIND.call(@value)
end
def forward
API_FORWARD.call(@value)
end
def current_frame
API_CURFRAME.call(@value)
end
def total_frames
API_TOTALFRAME.call(@value)
end
def goto_frame(goal_frame)
API_GOTOFRAME.call(@value, goal_frame)
end
def x
@sprite.x
end
def x=(v)
@sprite.x = v
end
def y
@sprite.y
end
def y=(v)
@sprite.y = v
end
def z
@sprite.z
end
def z=(v)
@sprite.z = v
end
def width
@sprite.bitmap.width
end
def height
@sprite.bitmap.height
end
def loop?
@loop
end
def loop=(v)
if @loop != v
@loop = v
API_SETLOOP.call(@value, v)
end
end
def msg_to_flash(msg, wParam, lParam)
return API_SENDMSG.call(@value, msg, wParam, lParam)
end
# 例
WM_MOUSEMOVE = 0x0200
def make_long(a, b)
return (a & 0xffff ) | (b & 0xffff) << 16
end
def on_mouse_move(x, y)
return msg_to_flash(WM_MOUSEMOVE, 0, make_long(x, y))
end
end
module Kernel
alias origin_exit exit unless method_defined? :exit
def exit(*args)
RMFlash.clear_all
origin_exit(*args)
end
end
#fls = RMFlash.load("2.swf", 640, 480)
#while true
# Graphics.update
# Input.update
# fls.update
# break if Input.trigger?(13)
#end
#fls.dispose
#exit
=begin
class RMFlash
API_NEW = Win32API.new("RMFlash", "_new", "piil", "l")
API_UPDATE = Win32API.new("RMFlash", "_update", "l", "v")
API_FREE = Win32API.new("RMFlash", "_free", "l", "v")
#def self.new(*args)
# obj = super(*args)
# obj.send :initialize, *args
# obj
#end
def initialize(flashname, fw, fh)
end
end
RMFlash.new
exit
=end
运行格式:
事件- 脚本
fls = RMFlash.load("CG/“文件名”.swf",640,480)
fls.x = 0
fls.y = 0
fls.loop = 1
while true
Graphics.update
# Input.update
fls.update
break if !fls.playing?
# break if Input.trigger?(13)
end
fls.dispose |
|