赞 | 0 |
VIP | 0 |
好人卡 | 0 |
积分 | 1 |
经验 | 3197 |
最后登录 | 2024-6-22 |
在线时间 | 40 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 80
- 在线时间
- 40 小时
- 注册时间
- 2012-7-3
- 帖子
- 98
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
本帖最后由 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的鼠控窗口(即本文中所述)的看法,无论贬褒,请您留下足迹。
|
|