/* 文件名:Personalinfo_RoleInfoPage.nut 路径:User/UI/Window/4_Personalinfo/Personalinfo_RoleInfoPage.nut 创建日期:2025-01-09 13:51 文件用途: 个人信息-角色信息页面 */ // 角色信息 class roleInfoPage extends Yosin_CommonUi { brown = sq_RGBA(160, 132, 75, 255); green = sq_RGBA(74, 161, 87, 255); Canvas = null; constructor(gX, gY) { local w = 266; local h = 355; base.constructor( gX, gY, w, h); // 创建画布 Canvas = CL_CanvasObject(); // 重设大小并清空 Canvas.ResizeAndClear(w, h); // 开始绘制 Canvas.BeginDraw(); // 绘制 DrawWidget(); // 结束绘制 Canvas.EndDraw(); // 添加画布 Addchild(Canvas); } function DrawWidget() { // 背景 local backGround = CL_SpriteFrameObject("sprite/interface2/profile/profile.img", 60); Canvas.DrawSpriteFrame(backGround, 0, 0); // 上半部分 装备展示 local equipment = Personalinfo_CharactersEquipment(0, 0); Canvas.DrawSprite(equipment); // 名称 等级 其他 RegisterNameAndOther(); // 属性 // RegisterPropertyItems(); // 底部四个按钮 RegisterBottomButton(); } // 名称 等级 其他 function RegisterNameAndOther() { // 冒险家名望 local adventurerFame = CL_SpriteFrameObject("sprite/interface2/profile/profile_icon.img", 53); Canvas.DrawSpriteFrame(adventurerFame, 70, 185); local adventurerFameText = FontAssetManager.GenerateNormal("冒险家名望", true, { color = brown }); Canvas.DrawActor(adventurerFameText, adventurerFame.right() + 5, adventurerFame.Y); // 冒险家名望数值 local adventurerFameNum = FontAssetManager.GenerateNormal("7", true, { color = green }); Canvas.DrawActor(adventurerFameNum, adventurerFameText.right() + 5, adventurerFameText.Y); } // 属性 function RegisterPropertyItems() { // 属性 // 生命 local life = roleInfoPropertyItem.Draw( 0, "生命", "100"); Canvas.DrawSprite(life, 0, 213); // 魔法 local magic = roleInfoPropertyItem.Draw( 1, "魔法", "100"); Canvas.DrawSprite(magic, life.right() + 16, life.Y); // 物理防御力 local physicalDefense = roleInfoPropertyItem.Draw( "物理防御力", "100", false); Canvas.DrawSprite(physicalDefense, life.X, life.bottom(), 8); // 魔法防御力 local magicDefense = roleInfoPropertyItem.Draw( 9, "魔法防御力", "100"); Canvas.DrawSprite(magicDefense, physicalDefense.right() + 16, physicalDefense.Y); // 力量 local strength = roleInfoPropertyItem.Draw( 2, "力量", "100"); Canvas.DrawSprite(strength, life.X, physicalDefense.bottom()); // 智力 local intelligence = roleInfoPropertyItem.Draw( 3, "智力", "100"); Canvas.DrawSprite(intelligence, strength.right() + 16, strength.Y); // 体力 local vitality = roleInfoPropertyItem.Draw( 4, "体力", "100"); Canvas.DrawSprite(vitality, strength.X, strength.bottom()); // 精神 local spirit = roleInfoPropertyItem.Draw( 5, "精神", "100"); Canvas.DrawSprite(spirit, vitality.right() + 16, vitality.Y); // 物理攻击力 local physicalATK = roleInfoPropertyItem.Draw( 6, "物理攻击力", "100"); Canvas.DrawSprite(physicalATK, life.X, spirit.bottom()); // 魔法攻击力 local magicATK = roleInfoPropertyItem.Draw( 7, "魔法攻击力", "100"); Canvas.DrawSprite(magicATK, physicalATK.right() + 16, physicalATK.Y); // 物理暴击 local physicalCrit = roleInfoPropertyItem.Draw( 10, "物理暴击", "100"); Canvas.DrawSprite(physicalCrit, life.X, magicATK.bottom()); // 魔法暴击 local magicCrit = roleInfoPropertyItem.Draw( 11, "魔法暴击", "100"); Canvas.DrawSprite(magicCrit, physicalCrit.right() + 16, physicalCrit.Y); // 独立攻击 local independentAttack = roleInfoPropertyItem.Draw( 12, "独立攻击", "100"); Canvas.DrawSprite(independentAttack, life.X, magicCrit.bottom()); // 攻击速度 local attackSpeed = roleInfoPropertyItem.Draw(13, "攻击速度", "100"); Canvas.DrawSprite(attackSpeed, life.X, independentAttack.bottom()); // 释放速度 local releaseSpeed = roleInfoPropertyItem.Draw( 14, "释放速度", "100"); Canvas.DrawSprite(releaseSpeed, attackSpeed.right() + 16, attackSpeed.Y); // 移动速度 local moveSpeed = roleInfoPropertyItem.Draw( 15, "移动速度", "100"); Canvas.DrawSprite(moveSpeed, life.X, releaseSpeed.bottom()); // 攻击属性 local attackProperty = roleInfoPropertyItem.Draw( 16, "攻击属性", "火(0)/冰(0)/光(0)/暗(0)", true, 260); Canvas.DrawSprite(attackProperty, life.X, moveSpeed.bottom()); } // 底部四个按钮 function RegisterBottomButton() { // 副职业 local subJob = otherButton(0, 401, 62, "副职业", false); AddUIChild(subJob); subJob.OnClick = function (btn) { //todo 打开副职业面板 print(11111); }.bindenv(this); local separation = CL_SpriteObject("sprite/interface2/profile/profile.img", 70 ); separation.SetPosition(subJob.right(), subJob.Y + 7.5); Addchild(separation); // 战斗分析 local battleAnalysis = otherButton(subJob.right() + 1, subJob.Y, 64, "战斗分析"); AddUIChild(battleAnalysis); battleAnalysis.OnClick = function (btn) { //todo 打开面板 print(11111); }.bindenv(this); local separationOne = CL_SpriteObject("sprite/interface2/profile/profile.img", 70 ); separationOne.SetPosition(battleAnalysis.right(), battleAnalysis.Y + 7.5); Addchild(separationOne); // 决斗信息 // 根据决斗场等级 显示 sprite/interface2/pvp02/pvprank_icon/tier_icon.img 24 local duelInfo = otherButton(battleAnalysis.right() + 1, battleAnalysis.Y, 14, "决斗信息", true); AddUIChild(duelInfo); duelInfo.OnClick = function (btn) { //todo 打开面板 print(11111); }.bindenv(this); local separationTwo = CL_SpriteObject("sprite/interface2/profile/profile.img", 70 ); separationTwo.SetPosition(duelInfo.right(), duelInfo.Y + 7.5); Addchild(separationTwo); // 详细信息 local detailedInformation = otherButton(duelInfo.right() + 1, duelInfo.Y, 66, "详细信息"); AddUIChild(detailedInformation); detailedInformation.OnClick = function (btn) { //todo 打开面板 print(11111); }.bindenv(this); } //逻辑入口 function Proc(Dt) { SyncPos(X, Y); base.Proc(Dt); } } // 属性项 class roleInfoPropertyItem{ // additionReaction 属性是否有加成 加成为绿色 不加成灰色 function Draw(idx, title, numText, additionReaction = true, width = 120) { // 创建画布 local Canvas = CL_CanvasObject(); // 重设大小并清空 Canvas.ResizeAndClear(width, 18); // 开始绘制 Canvas.BeginDraw(); local titlecolor = additionReaction ? sq_RGBA(160, 132, 75, 255) : sq_RGBA(79, 79, 79, 255); local numColor = additionReaction ? sq_RGBA(75, 161, 85, 255) : sq_RGBA(79, 79, 79, 255); local icon = CL_SpriteFrameObject("sprite/interface2/profile/profile_icon.img", idx); Canvas.DrawSpriteFrame(icon, 5, 0); // 属性名称 local property = FontAssetManager.GenerateNormal(title, true, { color = titlecolor }); Canvas.DrawActor(property, icon.right() + 5, icon.Y); // 属性数值 local propertyNum = FontAssetManager.GenerateNormal(numText, true, { color = numColor }); local numX = width - propertyNum.GetSize().w; Canvas.DrawActor(property, numX, icon.Y); // 结束绘制 Canvas.EndDraw(); return Canvas; } } // 其他面板按钮 class otherButton extends Yosin_CommonUi { // 是否启用按钮 enabled = true; // pvp 是否是pvp 按钮 constructor(gX, gY, idx, title, pvp = false, enabled = true, ) { base.constructor(gX, gY, 65, 65); this.enabled = enabled; local titlecolor = enabled? sq_RGBA(160, 132, 75, 255) : sq_RGBA(79, 79, 79, 255); // 属性名称 local property = FontAssetManager.GenerateNormal(title, true, { color = titlecolor }); property.SetPosition( 32 - property.GetSize().w / 2 , 45 ); Addchild(property); local path = pvp? "sprite/interface2/profile/profile_pvp_icon.img" : "sprite/interface2/profile/profile.img"; local icon = CL_SpriteObject(path, enabled ? idx : idx +1 ); icon.SetPosition(32 - icon.GetSize().w / 2, 45/2 - icon.GetSize().h / 2 + 3 ); Addchild(icon); } } // 上半部分 人物装备穿戴 class Personalinfo_CharactersEquipment extends Yosin_CommonUi { // 展示其他装备 showOtherEquipment = null; // 允许更换装备 allowChangeEquipment = null; // 画布 Canvas = null; constructor(x, y) { local w = 248; local h = 179; base.constructor(x, y, w, h); showOtherEquipment = false; allowChangeEquipment = false; // 创建画布 Canvas = CL_CanvasObject(); // 重设大小并清空 Canvas.ResizeAndClear(w, h); // 设置填充画刷 用于绘制边框和线条 // Canvas.SetFillBrush(sq_RGBA(59, 56, 57, 250)); // 设置轮廓画刷 用于绘制边框和线条 // Canvas.SetStrokeBrush(sq_RGBA(59, 56, 57, 250)); // 开始绘制 Canvas.BeginDraw(); // 绘制背景 DrawBackground(); // 结束绘制 Canvas.EndDraw(); // 添加画布 Addchild(Canvas); } // 背景 function DrawBackground() { // 装备栏背景 local equipmentBackground = CL_SpriteFrameObject("sprite/interface/newstyle/windows/inventory/inventory.img", 21); Canvas.DrawSpriteFrame(equipmentBackground, 5, 5); // 顶部光线 local topLight = CL_SpriteFrameObject("sprite/interface/newstyle/windows/inventory/inventory.img", 178); Canvas.DrawSpriteFrame(topLight, Width / 2 - topLight.GetSize().w / 2, 0); // todo 角色展示 // 结婚戒指槽位 local ringSlotBg = CL_SpriteFrameObject("sprite/interface/newstyle/windows/inventory/inventory_cn.img", 0); Canvas.DrawSpriteFrame(ringSlotBg, Width / 2 - ringSlotBg.GetSize().w / 2, 5); // todo 根据是否装备 显示装备 if (showOtherEquipment) { // 辅助装备 local assist = CL_SpriteFrameObject("sprite/interface/newstyle/windows/inventory/inventory.img", 19); Canvas.DrawSpriteFrame(assist, 179, 69); // 耳环 local earrings = CL_SpriteFrameObject("sprite/interface/newstyle/windows/inventory/inventory.img", 122); Canvas.DrawSpriteFrame(earrings, 179, 102); // 魔法石 local MagicStone = CL_SpriteFrameObject("sprite/interface/newstyle/windows/inventory/inventory.img", 20); Canvas.DrawSpriteFrame(MagicStone, 211, 101); } } }