你在我的游戏中管理不同窗口(每个窗口在一个自己的图层)。当你点击一个窗口,它会弹出至顶部,就像正常窗口一样。我的代码却无法实现这样的效果,反而它会搞乱并死掉。我基本确定这是由于基本设计问题造成的,但我会把全部100行差劲的代码发布出来。
背景信息:
每个窗口(包括由窗口管理器管理的窗口代码)都在自己独立的图层。
其中一个窗口包含了一个透明面板,用来实现一些酷炫的效果(不知道是否相关,但我给出了所有信息)。
另外一个窗口被分隔为两个独立的图层,因为一个图层有一个透明面板,另外一个图层需要被覆盖在上面。
最核心的代码部分是每个窗口:
创造
localholding=false
左下鼠标键
if (!global.isHolding||localholding=true)&&global.prioritywindow==id{
x=mouse_x+click_x
y=mouse_y+click_y
global.isHolding=true
localholding=true
}
左按下鼠标键
if (!global.isHolding||localholding=true)&&global.prioritywindow==id{
click_x=x-mouse_x
click_y=y-mouse_y
i = array_get_index(global.window_order, "wnbr");
if (i!=-1) {
array_delete(global.window_order,i,1)
}
array_insert(global.window_order,0,"wnbr")
}
还有
左鼠标键释放
if localholding=true{
global.isHolding=false
localholding=false}
窗口管理器管理所有窗口(我知道谁会去干这个呢)所以它包含了很多必不可少的代码部分。
窗口管理器事件如下:
创造
global.isHolding=false
global.window_order=[]
global.clickedwindows=[]
global.prioritywindow=0
还有
全局左鼠标键
with (all) {
if (point_in_rectangle(mouse_x, mouse_y, bbox_left, bbox_top, bbox_right, bbox_bottom)) {
array_insert(global.clickedwindows,0,id)
}
}
Sort=function(cur,nex){
return cur.depth - nex.depth}
array_sort(global.clickedwindows,Sort)
if array_length(global.clickedwindows)!=0{
show_debug_message(global.clickedwindows[0])
global.prioritywindow=global.clickedwindows[0]}
array_delete(global.clickedwindows,0,infinity)
这是整个窗口管理系统的代码,且十分简陋。你点击一个窗口:
--------------------------------------------------------------------------------------------------------
############################################################################################
错误 在 行数 1 的 Mouse Event 的 Left 按钮事件对 WnBr_window_obj:
变量 WnBr_window_obj.click_x (100045, -2147483648) 未被赋值前被读取
在 gml_Object_WnBr_window_obj_Mouse_0(图层 2)(line 2) - x=mouse_x+click_x
############################################################################################
gml_Object_WnBr_window_obj_Mouse_0 (line 2)
这是我的全部问题,您需要帮我解决一个问题:窗口管理器不能正确地将窗口堆叠在一起,每个窗口仍然可以互动,即使它们被另一个窗口遮挡住。
评论 (0)