鼠标框架完成 窗口事件框架完成

This commit is contained in:
2025-10-21 19:21:20 +08:00
parent 2686136f72
commit b16e8d7820
11 changed files with 378 additions and 66 deletions

View File

@@ -6,26 +6,41 @@
*/
class Actor extends BaseNode {
function _typeof() {
return "Actor"
return "Actor";
}
constructor(obj = null) {
if (obj) {
base.constructor(obj, false)
base.constructor(obj, false);
} else {
base.constructor(sq_CreateActor())
base.constructor(sq_CreateActor());
}
}
function AddChild(Act) {
sq_AddChild(this.C_Object, Act.C_Object)
sq_AddChild(this.C_Object, Act.C_Object);
}
function RemoveChild(Act) {
sq_RemoveChild(this.C_Object, Act.C_Object)
sq_RemoveChild(this.C_Object, Act.C_Object);
}
function SetZOrder(Order){
function SetZOrder(Order) {
sq_SetZOrder(this.C_Object, Order);
}
function SetScale(Value, ...) {
if (vargv.len() == 0)
sq_SetScale(this.C_Object, Value);
else if (vargv.len() == 1)
sq_SetScale(this.C_Object, Value, vargv[0]);
}
function SetPos(Value, ...) {
if (vargv.len() == 0) {
sq_SetPos(this.C_Object, Value);
} else if (vargv.len() == 1) {
sq_SetPos(this.C_Object, Value, vargv[0]);
}
}
}

View File

@@ -4,36 +4,52 @@
创建日期:2025-10-18 20:58
文件用途:游戏窗口类
*/
_SYS_UI_SCENE_Instance_ <- null
_SYS_WINDOW_LIST_ <- []
_SYS_UI_SCENE_Instance_ <- null;
_SYS_WINDOW_LIST_ <- [];
class GameWindow extends WindowNode {
//窗口名称
WindowName = "undefined"
WindowName = "undefined";
//是否活动窗口Flag
IsActiveFlag = false;
function _typeof() {
return "GameWindow"
return "GameWindow";
}
constructor(WindowName) {
base.constructor()
constructor(WindowName, gX, gY, gWidth, gHeight, gTitleHeight) {
base.constructor();
}
function ResetFoucus() {
SetVisible(true)
SetVisible(true);
//遍历全局窗口数组将自己移除重新添加在末尾
foreach (Index, WindowObj in _SYS_WINDOW_LIST_) {
if (WindowObj.WindowName == this.WindowName) {
_SYS_WINDOW_LIST_.remove(Index)
break
_SYS_WINDOW_LIST_.remove(Index);
break;
}
}
_SYS_WINDOW_LIST_.append(this)
SetZOrder(_SYS_WINDOW_LIST_.len())
_SYS_WINDOW_LIST_.append(this);
SetZOrder(_SYS_WINDOW_LIST_.len());
}
function Proc(Dt) {
function Proc(Dt) {}
//鼠标事件回调
function OnMouseEvent(Type, Data) {
if (!Visible) return;
foreach (Window in Childrens) {
if (Window instanceof WindowNode) Window.OnMouseEvent(Type, Data);
}
}
//键盘事件回调
function OnKeyEvent(Type, Data) {
if (!Visible) return;
foreach (Window in Childrens) {
if (Window instanceof WindowNode) Window.OnKeyEvent(Type, Data);
}
}
}
@@ -44,36 +60,36 @@ class GameWindow extends WindowNode {
* @param {GameWindow} WindowClass
* @returns {any}
*/
function sq_CreaterWindow(WindowName, WindowClass) {
function sq_CreaterWindowInstance(WindowName, WindowClass, gX, gY, gWidth, gHeight, gTitleHeight) {
foreach (idx, val in _SYS_WINDOW_LIST_) {
if (val.WindowName == WindowName) return val;
}
local NewWindow = WindowClass(WindowName);
local NewWindow = WindowClass(WindowName, gX, gY, gWidth, gHeight, gTitleHeight);
getroottable()._SYS_WINDOW_LIST_.push(NewWindow);
return NewWindow;
}
/**
*
* @function
*
* @function
* @param {float} Dt
* @returns {void}
*/
function _Global_Windows_Logic_(Dt) {
if (_SYS_UI_SCENE_Instance_) {
for (local i = 0; i < _SYS_WINDOW_LIST_.len(); i++) {
local Window = _SYS_WINDOW_LIST_[i]
local Window = _SYS_WINDOW_LIST_[i];
//如果窗口不可见并且 处于演出状态
if (!Window.Visible && Window.PerformanceState) {
Window.PerformanceState = false
_SYS_UI_SCENE_Instance_.RemoveChild(Window)
Window.PerformanceState = false;
_SYS_UI_SCENE_Instance_.RemoveChild(Window);
if (Window.DestroyFlag) {
_SYS_WINDOW_LIST_.remove(i);
i--;
}
} else if (Window.Visible && !Window.PerformanceState) {
_SYS_UI_SCENE_Instance_.AddChild(Window)
_SYS_UI_SCENE_Instance_.AddChild(Window);
Window.PerformanceState = true;
}
//无论窗口是否显示都需要调用Proc
@@ -82,6 +98,19 @@ function _Global_Windows_Logic_(Dt) {
}
}
function _Global_Windows_Events_(EventType, EventData) {
//先传递鼠标事件
Game_Cursor.GetInstance().Event(EventType, EventData);
//事件是否被响应Flag
local EventInteractiveFlag = false;
for (local i = _SYS_WINDOW_LIST_.len() - 1; i > -1; i--) {
local Window = _SYS_WINDOW_LIST_[i];
if (Window.Visible) {
if (EventType == UI_EVENT.MOUSEMOTION || EventType == UI_EVENT.MOUSEBUTTONDOWN || EventType == UI_EVENT.MOUSEBUTTONUP) {
Window.OnMouseEvent(EventType, EventData);
} else if (EventType == UI_EVENT.KEYDOWN || EventType == UI_EVENT.KEYUP) {
Window.OnKeyEvent(EventType, EventData);
}
}
}
}

View File

@@ -20,24 +20,23 @@ class WindowNode extends Actor {
//销毁Flag
DestroyFlag = false;
function _typeof() {
return "WindowNode"
return "WindowNode";
}
constructor() {
base.constructor()
base.constructor();
//子控件list初始化
Childrens = []
Childrens = [];
}
function SetVisible(Flag) {
Visible = Flag
Visible = Flag;
}
function AddChild(Act) {
base.AddChild(Act)
Childrens.push(Act)
if (!(Act instanceof WindowNode)) base.AddChild(Act);
Childrens.push(Act);
}
}