赞 | 0 |
VIP | 25 |
好人卡 | 0 |
积分 | 1 |
经验 | 126953 |
最后登录 | 2020-5-5 |
在线时间 | 39 小时 |
Lv1.梦旅人 粉蜘蛛秀秀
- 梦石
- 0
- 星屑
- 76
- 在线时间
- 39 小时
- 注册时间
- 2007-6-4
- 帖子
- 384
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
1.禁止窗体移动
禁止RM窗口的移动 当鼠标拖动RM窗口后 又会设置回原来的位置
思路: 1.用Win32API 函数 getWindowRect 获取原来的窗口位置
2.窗口消息处理 (需要夏娜的RmWndProc支持)
3.接受到 WM_MOVE 消息后 设置窗口位置(原来的位置)
2.Exit动画
就是按窗口右上角那个x关闭按钮 就会播放一段exit动画
原理很简单 具体见脚本 可以根据需要制定自己的游戏的exit动画
范例下载:
http://rpg.blue/upload_program/d ... ��体_124808674.rar
脚本
1.RmWin 部分
class RmWin
attr_accessor :left,:top,:right,:bottom
attr_accessor :hwnd
def initialize
@left = 0
@top = 0
@right = 0
@bottom = 0
@hwnd = 0
end
end
$rmWin = RmWin.new
window_Rect = Win32API.new("user32","GetWindowRect","lp","l")
val = "\0"*256
gps = Win32API.new("kernel32", "GetPrivateProfileString",%w(p p p p l p), "l")
gps.call("Game", "Title", "", val, 256, ".\\Game.ini")
val.delete!("\0")
fw = Win32API.new("user32", "FindWindow", %(p, p), "i")
$rmWin.hwnd = fw.call("RGSS Player", val)
pos = "\0"*16
result = window_Rect.call($rmWin.hwnd,pos)
if result != 0
rect = pos.unpack("C*")
end
$wndmove = false
posLeft,posTop,posRight,posBottom = 0,4,8,12
$rmWin.left = rect[posLeft+1] * 0xFF + rect[posLeft]
$rmWin.top = rect[posTop+1] * 0xFF + rect[posTop]
$rmWin.right = rect[posRight+1] * 0xFF + rect[posRight]
$rmWin.bottom = rect[posBottom+1] * 0xFF + rect[posBottom]
2.Graphics 和 Kernel 函数修改部分
module Graphics
@ori = method("update") if @ori.nil?
@swp = Win32API.new("user32", "SetWindowPos", %(l, l, i, i, i, i, i),"'i")
def self.update(*args)
@ori.call(*args)
if $wndmove
left = $rmWin.left
top = $rmWin.top
@swp.call($rmWin.hwnd, -1, left, top, 640, 480, 1)
$wndmove = false
end
end
end
module Kernel
alias ori_exit exit unless method_defined? :exit
def exit(*args)
Graphics.freeze
Graphics.transition(20)
@sp = Sprite.new
@sp.x,@sp.y,@sp.z = 0,0,999999999
@sp.bitmap = Bitmap.new(640,480)
count = 0
size = 6
begin
count += 1
size += 1
@sp.bitmap.clear
@sp.bitmap.fill_rect(0,0,640,480,Color.new(0,0,0,255))
@sp.bitmap.font.size = size
@sp.bitmap.draw_text(0,200,640,100,"Thank You For Your Play",1)
Graphics.update
end until count == 40
20.times{Graphics.update}
ori_exit(*args)
end
end
3.RmWndProc部分
#==============================================================================
# ■ RmWndProc
#------------------------------------------------------------------------------
# 处理RM窗口过程的模块。
#
# v1.1
#
# by 灼眼的夏娜
#
# ※ 这个模块名以及该模块中的方法名字请勿更改!!!
#==============================================================================
module RmWndProc
#--------------------------------------------------------------------------
# ● API函数声明
#--------------------------------------------------------------------------
Replace = Win32API.new("Lib/RmWndProc","_replace","v","i")
Restore = Win32API.new("Lib/RmWndProc","_restore","v","v")
#--------------------------------------------------------------------------
# ● 窗口过程函数 ※ 该名字切勿更改
#--------------------------------------------------------------------------
def self.wnd_proc(hwnd,msg,wparam,lparam)
# 消息分歧
case msg
when 0x0003
$wndmove = true
return
end
# 调用默认窗口过程
self.default_proc
end
#--------------------------------------------------------------------------
# ● 转换窗口到RM脚本中进行处理
#--------------------------------------------------------------------------
def self.replace
Replace.call
end
#--------------------------------------------------------------------------
# ● 还原窗口过程
#--------------------------------------------------------------------------
def self.restore
Restore.call
end
#--------------------------------------------------------------------------
# ● 默认窗口过程 ※ 对于没有进行处理的消息我们在最后调用该方法来调用默认窗
# 口过程。
#--------------------------------------------------------------------------
def self.default_proc
raise "default_proc"
end
end
RmWndProc.replace
|
|