3 Commits

Author SHA1 Message Date
5759e8dbc6 Canvas API增加完成 2025-10-25 23:54:47 +08:00
433fa315b2 Actor API增加完成 2025-10-25 23:52:26 +08:00
89899a3799 加入文本精灵 2025-10-25 15:51:53 +08:00
14 changed files with 378 additions and 93 deletions

14
.vscode/launch.json vendored
View File

@@ -1,20 +1,12 @@
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Attach (squirrel) to localhost:2222",
"type": "squirrel",
"request": "attach",
"name": "Server",
"port": 2222
},
{
"type": "squirrel",
"request": "attach",
"name": "Client",
"port": 2222
"port": 2222,
"address": "localhost"
}
]
}

View File

@@ -20,6 +20,7 @@ UI/ObjectClass/Actor.nut
UI/ObjectClass/WindowNode.nut
UI/ObjectClass/GameWindow.nut
UI/ObjectClass/GameWidget.nut
UI/ObjectClass/Text.nut
UI/ObjectClass/Sprite.nut
UI/ObjectClass/Canvas.nut

View File

@@ -22,3 +22,20 @@ function print(Object) {
break;
}
}
/**
* 返回颜色的十六进制数
* @function
* @param {any} R
* @param {any} G
* @param {any} B
* @param {any} A
* @returns {*}
*/
function sq_RGBA(R, G, B, A) {
R = R.tointeger();
G = G.tointeger();
B = B.tointeger();
A = A.tointeger();
return (A << 24) + (R << 16) + (G << 8) + B;
}

View File

@@ -20,16 +20,17 @@ function _MainUI_Enter_(UI_Scene) {
// _SYS_UI_SCENE_Instance_.AddChild(Tc);
// Tc.SetPos(400,300);
local NgC = GameWidget_NineGridCav("sprite/interface/lenheartwindowcommon.img", 97, 300, 300);
_SYS_UI_SCENE_Instance_.AddChild(NgC);
NgC.SetPos(400, 300);
// local NgC = GameWidget_NineGridCav("sprite/interface/lenheartwindowcommon.img", 97, 300, 300);
// _SYS_UI_SCENE_Instance_.AddChild(NgC);
// NgC.SetPos(400, 300);
// local T = sq_GetPng("sprite/item/avatar/swordman/0sm_acap.img",0);
// print(T);
// local Test1 = sq_CreaterWindowInstance("测试窗口", Window_NotiBox, 150, 150, 364, 356, 20);
// Test1.ResetFoucus();
local Test1 = sq_CreaterWindowInstance("测试窗口", Window_NotiBox, 150, 150, 364, 356, 20);
Test1.ResetFoucus();
local act = Actor();
// local Canv = Canvas(600, 600);
// _SYS_UI_SCENE_Instance_.AddChild(Canv);
@@ -53,3 +54,4 @@ function _MainUI_Update_(deltaTime) {
}
//主界面UI退出回调
function _MainUI_Exit_() {}

View File

@@ -17,47 +17,188 @@ class Actor extends BaseNode {
}
}
/**
* 设置名字
* @function
* @param {string} Name
* @returns {void}
*/
function SetName(Name) {
sq_SetName(this.C_Object, Name);
}
/**
* 获取名字
* @function
* @returns {string}
*/
function GetName() {
return sq_GetName(this.C_Object);
}
/**
* 添加子对象
* @function
* @param {Actor} Act
* @returns {void}
*/
function AddChild(Act) {
sq_AddChild(this.C_Object, Act.C_Object);
}
/**
* 移除子对象
* @function
* @param {Actor} Act
* @returns {void}
*/
function RemoveChild(Act) {
sq_RemoveChild(this.C_Object, Act.C_Object);
}
/**
* 设置层级
* @function
* @param {integer} Order
* @returns {void}
*/
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
* @returns {*}
*/
function GetZOrder() {
return sq_GetZOrder(this.C_Object);
}
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]);
/**设置坐标 */
function SetPos(...) {
if (vargv.len() == 1) {
sq_SetPos(this.C_Object, vargv[0]);
} else if (vargv.len() == 2) {
sq_SetPos(this.C_Object, vargv[0], vargv[1]);
}
}
function GetSize(){
/**
* 获取坐标
* @function
*/
function GetPos() {
return sq_GetPos(this.C_Object);
}
function SetVisible(Flag) {
sq_SetVisible(this.C_Object, Flag);
}
/**
* 获取世界坐标
* @function
*/
function GetWorldPos() {
return sq_GetWorldPos(this.C_Object);
}
function SetName(Name) {
sq_SetName(this.C_Object, Name);
/**
* 设置透明度
* @function
* @param {integer} Alpha
* @returns {void}
*/
function SetAlpha(Alpha) {
sq_SetAlpha(this.C_Object, Alpha);
}
/**
* 获取透明度
* @function
* @returns {integer}
*/
function GetAlpha() {
return sq_GetAlpha(this.C_Object);
}
/**
* 设置缩放
* @function
*/
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
*/
function GetScale() {
return sq_GetScale(this.C_Object);
}
/**
* 设置旋转角度
* @function
* @param {float} Angle
* @returns {void}
*/
function SetRotation(Angle) {
sq_SetRotation(this.C_Object, Angle);
}
/**
* 获取旋转角度
* @function
* @returns {float}
*/
function GetRotation() {
return sq_GetRotation(this.C_Object);
}
/**
* 设置大小
* @function
* @returns {void}
*/
function SetSize(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
*/
function GetSize() {
return sq_GetSize(this.C_Object);
}
/**
* 设置可见性
* @function
* @param {boolean} Flag
* @returns {void}
*/
function SetVisible(Flag) {
sq_SetVisible(this.C_Object, Flag);
}
/**
* 获取可见性
* @function
* @returns {boolean}
*/
function GetVisible() {
return sq_GetVisible(this.C_Object);
}
/**
*
* @function
* @param {BLENDMODE} BlendMode
* @returns {void}
*/
function SetBlendMode(BlendMode) {
sq_SetBlendMode(this.C_Object, BlendMode);
}
}

View File

@@ -14,10 +14,30 @@ class Canvas extends Actor {
sq_RegisterDestruction(C_Object, this);
}
/**
* 绘制Img
* @function
* @param {string} Img img路径
* @param {integer} Index img编号
* @param {integer} X X坐标
* @param {integer} Y Y坐标
* @returns {void}
*/
function DrawImg(Img, Index, X, Y) {
sq_Canvas_DrawImg(C_Object, Img, Index, { x = X, y = Y });
}
/**
* 根据矩形绘制Img
* @function
* @param {string} Img img路径
* @param {integer} Index img编号
* @param {integer} X X坐标
* @param {integer} Y Y坐标
* @param {any} Width 宽度
* @param {any} Height 高度
* @returns {void}
*/
function DrawImgRect(Img, Index, X, Y, Width, Height) {
sq_Canvas_DrawImgRect(C_Object, Img, Index, { x = X, y = Y, w = Width, h = Height });
}

View File

@@ -65,7 +65,7 @@ class GameWidget extends WindowNode {
local IMouse = Game_Cursor.GetInstance();
local Pos = GetWorldPos();
if (isLBDown && Math.IsIntersectRect(IMouse.MouseX, IMouse.MouseY, 1, 1, Pos.x, Pos.y, Width, Height)) {
if (OnClick) this.OnClick(this);
if (OnClick) this.OnClick.call(this,this);
if (ClickSound) {
//TODO 音效系统
// Sq_PlaySoundEffect(ClickSound);

16
UI/ObjectClass/Text.nut Normal file
View File

@@ -0,0 +1,16 @@
/*
文件名:Text.nut
路径:UI/ObjectClass/Text.nut
创建日期:2025-10-25 15:40
文件用途:
*/
class Text extends Actor {
function _typeof() {
return "Text"
}
constructor(Str, FontIndex,Color) {
C_Object = sq_CreateText(Str, FontIndex, Color);
sq_RegisterDestruction(C_Object,this);
}
}

View File

@@ -27,8 +27,15 @@ class Window_hud extends GameWindow {
* @returns {void}
*/
function OnMouseEvent(Type, Data, EventInteractiveFlag) {
base.OnMouseEvent(Type, Data, EventInteractiveFlag)
base.OnMouseEvent(Type, Data, EventInteractiveFlag);
if (Type == UI_EVENT.MOUSEBUTTONDOWN) {
}
}
/**
* 重载ResetFoucus函数本窗口不需要改变焦点
* @function
* @returns {void}
*/
function ResetFoucus() {}
}

View File

@@ -6,20 +6,34 @@
*/
class Window_NotiBox extends GameWindow {
testvalue = 666;
constructor(Name, gX, gY, gWidth, gHeight, gTitleHeight) {
base.constructor(Name, gX, gY, gWidth, gHeight, gTitleHeight);
InitSprite();
InitButton();
// InitButton();
}
function InitSprite() {
local Sp = Sprite("sprite/hud/newantonui.img", 0);
Sp.SetBlendMode(1);
AddChild(Sp);
local Textobj = Text("测试文本",0,sq_RGBA(255,255,255,255));
AddChild(Textobj);
local Textobj2 = Text("测试文本",1,sq_RGBA(255,255,255,255));
Textobj2.SetPos(0,50);
AddChild(Textobj2);
}
function InitButton() {
local Btn = GameWidget_BaseButton(40, 40, 56, 24, "sprite/interface/lenheartwindowcommon.img", 12);
Btn.OnClick = function(btn){
// print(testvalue);
print(this);
print(btn);
}.bindenv(this);
AddChild(Btn);
}
}

View File

@@ -6,31 +6,72 @@
*/
enum CHARACTERJOB {
SWORDMAN, // 男鬼剑士
FIGHTER, // 女格斗家
GUNNER, // 男神枪手
MAGE, // 女魔法师
PRIEST, // 男圣职者
AT_GUNNER, // 女神枪手
THIEF, // 暗夜使者
AT_FIGHTER, // 男格斗家
AT_MAGE, // 男魔法师
DEMONIC_SWORDMAN, // 黑暗武士
CREATOR_MAGE, // 缔造者
AT_SWORDMAN, // 女鬼剑士
KNIGHT, // 守护者
DEMONIC_LANCER, // 魔枪士
AT_PRIEST, // 女圣职者
GUN_BLADER, // 枪剑士
ARCHER, // 弓箭手
MAX // 无
/**男鬼剑士 */
SWORDMAN,
/**女格斗家 */
FIGHTER,
/**男神枪手 */
GUNNER,
/**女魔法师 */
MAGE,
/**男圣职者 */
PRIEST,
/**女神枪手 */
AT_GUNNER,
/**暗夜使者 */
THIEF,
/**男格斗家 */
AT_FIGHTER,
/**男魔法师 */
AT_MAGE,
/**黑暗武士 */
DEMONIC_SWORDMAN,
/**缔造者 */
CREATOR_MAGE,
/**女鬼剑士 */
AT_SWORDMAN,
/**守护者 */
KNIGHT,
/**魔枪士 */
DEMONIC_LANCER,
/**女圣职者 */
AT_PRIEST,
/**枪剑士 */
GUN_BLADER,
/**弓箭手 */
ARCHER,
/**无 */
MAX
}
enum UI_EVENT {
MOUSEMOTION, //鼠标移动
MOUSEBUTTONDOWN, //鼠标按下
MOUSEBUTTONUP, //鼠标释放
MOUSEWHEEL //鼠标滚轮
KEYDOWN //键盘按下
KEYUP //键盘释放
/**鼠标移动 */
MOUSEMOTION,
/**鼠标按下 */
MOUSEBUTTONDOWN,
/**鼠标释放 */
MOUSEBUTTONUP,
/**鼠标滚轮 */
MOUSEWHEEL,
/**键盘按下 */
KEYDOWN,
/**键盘释放 */
KEYUP
}
enum BLENDMODE {
/**无 */
BLENDMODE_NONE,
/**线性减淡 */
BLENDMODE_LINEARDODGE,
/**减淡 */
BLENDMODE_DODGE,
/**变暗 */
BLENDMODE_DARK,
/**异或 */
BLENDMODE_XOR,
/**灰度模式 */
BLENDMODE_MONOCHROME,
/**扭曲 */
BLENDMODE_SPACE_DISTORT
}

View File

@@ -85,5 +85,8 @@
},
"UI/Windows/Widget/NineGridCav.nut": {
"description": "九宫格画布"
},
"UI/ObjectClass/Text.nut": {
"description": "文本类"
}
}

View File

@@ -95,6 +95,7 @@ function sq_CreateActor() {}
function sq_RegisterDestruction(a, b) {}
function sq_CreateSprite(a, b) {}
function sq_CreateCanvas(a, b) {}
function sq_CreateText(a, b, c) {}
function sq_AddChild(a, b) {}
function sq_RemoveChild(a, b) {}
function sq_SetZOrder(a, b) {}
@@ -111,13 +112,37 @@ function sq_SetScale(a,...){}
*/
function pow(a, b) {}
function sq_GetWorldPos(a){}
function sq_GetWorldPos(a) {
local t = { x = 1, y = 1 };
return t;
}
function sq_SetVisible(a, b) {}
function sq_SetAlpha(a, b) {}
function sq_SetName(a, b) {}
function sq_SetSize(...) {}
function sq_SetRotation(a, b) {}
function sq_GetName(a) {}
function sq_GetVisible(a) {}
function sq_GetSize(a) {
local t = { x = 1, y = 1 };
return t;
}
function sq_GetRotation(a) {}
function sq_GetAlpha(a) {}
function sq_GetScale(a) {
local t = { x = 1, y = 1 };
return t;
}
function sq_GetZOrder(a) {}
function sq_SetBlendMode(a, b) {}
function sq_Canvas_DrawImg(a, b, c, d) {}
function sq_Canvas_DrawImgRect(a, b, c, d) {}
function sq_GetImg(a) {}
function sq_GetPng(a, b) {}
function sq_OutPutTable(...) {}
function sq_GetPos(a) {
local t = { x = 1, y = 1 };
return t;
}
function output(...) {}

View File

@@ -1,9 +1,15 @@
function _InitFont_() {
return [
{ path = "Fonts/VonwaonBitmap-12px.ttf", size = 12 },
{ path = "Fonts/VonwaonBitmap-12px.ttf", size = 24 },
{ path = "Fonts/NotoSansSC-Light.otf", size = 12 }
];
}
function main() {
//初始化随机数种子
srand(time());
local SM = StateMachine.GetInstance();
SM.RegisterState(CHARACTERJOB.SWORDMAN, "Character_Rest", 0);