Project1
标题:
[小远童鞋靴脚本_第一波]鼠标控制窗口移动/关闭
[打印本页]
作者:
a774741359
时间:
2013-9-16 23:38
标题:
[小远童鞋靴脚本_第一波]鼠标控制窗口移动/关闭
本帖最后由 a774741359 于 2013-9-18 16:18 编辑
{:2_287:}[
小远童鞋
靴脚本
_第一波]
鼠标控制窗口移动/关闭
这块开始的想法是使用窗口自身的z坐标来实现窗口的区分,不过后来发现根本一点可行性都没有,因为他们的Z坐标默认基本都是相同的(
窗口的默认Z坐标是多少勒?
)
答对有姜
。
后来无奈只能自己添加一个Z坐标,这个Z坐标必须是
唯一
的。
一开始打算在
Window_Base
里处理窗口的叠加与移动,但是后来发现不可行,于是移动到了
Scene_Base
里处理。
A.注册句柄
核心就是一个存放着
window句柄
的数组
wnd_list
了。(
什么是window句柄=>我也不知道该管创建窗口返回值叫什么
)
这个数组的[0]=>首位是在屏幕上最高的一个窗口,我称为
置顶窗口
。
这个窗口
必定是激活的(active)
如果窗口类里标明了
可移动(can_move)
和
可关闭(can_close
),这个窗口就可以被移动和关闭。
方法
:def regiter_handle(wnd)
注册句柄(窗口句柄)
解释
:在窗口创建的同时调用该方法注册句柄,如果没有注册则不参与窗口移动。
这个方法向数组wnd_list尾压入一个成员。wnd不能为空。(
因此,越晚被注册的窗口Z坐标越低,写文章的时候才觉得好怪
。)
B.窗口置顶
第二就是判断鼠标选择
置顶窗口
。
从数组
wnd_list
的
首位
开始判断=>
即Z坐标从最高开始递减
。
循环判断数组中的成员的矩形是否被鼠标
按下(click)
,如果是的话,该成员移到首位。
首位活跃=真
次位活跃=假 =>如果允许后台运行 则跳过
方法
:def handle_to_top(wnd)
窗口置顶(窗口句柄)
解释
:这个方法把一个窗口句柄移动到首位,原位置以前的项目依次后退。
C.窗口移动和关闭
第三就是判断鼠标是否被拖动和是否被关闭
进入移动状态判定条件
:鼠标在窗体范围内 and 鼠标左键状态为Down
如果满足上面的条件,窗体就进入了Moving状态,记录抓取点=>此时的鼠标的坐标
离开移动状态判定条件
:鼠标离开了窗体范围 or 鼠标左键状态为Up
如果满足上面的条件,窗体就离开了Moving状态,抛弃记录点=>记录点清空
关闭判定条件
:鼠标在关闭范围内 and 鼠标click
如果满足了上面的条件,窗体调用Base的close关闭
Moving状态
:窗体的坐标=鼠标现行的坐标-抓取点坐标
D.注销句柄
注销句柄:从数组中剔除某个成员,这个成员将不再参与移动和关闭操作。
E.场景退出
注销所有句柄:清空数组
根据上面的方法,现在已经实现了基本的鼠标移动窗口和鼠标关闭窗口。
根据测试可以达成窗口叠加,
置顶窗口的绘画Z坐标比其他所有窗口高
根据测试可以达成窗口关闭,
在窗口指定了可关闭的时候。
根据测试可以达成窗口移动,
在窗口指定了可移动的时候。
这就是小远童鞋靴脚本的第一波,本文中如果有
错误
或者
您有更好的方法
请
跟帖回复
,由于脚本还处于概念阶段,并不稳定,就不上传了,请大家见谅。
小远童鞋希望大家在回复中发表一下
自己对Rm的鼠控窗口(即本文中所述)的看法
,
无论贬褒,请您留下足迹。
作者:
无脑之人
时间:
2013-9-17 12:17
看起来很科学的样子0 0
不过这个功能很可能被一些xiao玩pen家you玩坏的……
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1