/* 文件名: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 = 465; base.constructor( gX, gY, w, h); // 创建画布 Canvas = CL_CanvasObject(); // 重设大小并清空 Canvas.ResizeAndClear(w, h); // 开始绘制 Canvas.BeginDraw(); // 绘制 DrawWidget(); // 结束绘制 Canvas.EndDraw(); // 添加画布 Addchild(Canvas); // 名称变更记录按钮 local nameChangeRecordBtn = Yosin_BaseButton(70, 7, 18, 17, "sprite/interface/newstyle/windows/inventory/inventory.img", 106); nameChangeRecordBtn.DownSimulateOffset = false; AddUIChild(nameChangeRecordBtn); // 底部四个按钮 RegisterBottomButton(); } function DrawWidget() { // 背景 local backGround = CL_SpriteFrameObject("sprite/interface2/profile/profile.img", 60); Canvas.DrawSpriteFrame(backGround, 0, 0); // 上半部分 装备展示 local equipment = Personalinfo_CharactersEquipment(); Canvas.DrawSprite(equipment); // 名称 等级 其他 RegisterNameAndOther(); // 属性 RegisterPropertyItems(); } // 名称 等级 其他 function RegisterNameAndOther() { // 名称 local nameY = 130; local name = FontAssetManager.GenerateNormal("账号名称", true, { color = sq_RGBA(161, 240, 163, 255) }); Canvas.DrawActor(name, Width / 2 - name.GetSize().w / 2, nameY); // 等级 local level = FontAssetManager.GenerateNormal("2级 角色名称", true, { color = green }); Canvas.DrawActor(level, Width / 2 - level.GetSize().w / 2, nameY + 15); // 角色定位 local jobType = CL_SpriteFrameObject("sprite/interface2/profile/profile.img", 74); // 职业 local job = FontAssetManager.GenerateNormal("[剑魂]", true, { color = brown }); local jobSize = job.GetSize(); local iconX = Width / 2 - (jobSize.w + 12) / 2; Canvas.DrawSpriteFrame(jobType, iconX, nameY + 33); Canvas.DrawActor(job, iconX + 12, nameY + 30); // 冒险家名望Icon local adventurerFameY = 187; local adventurerFameX = 70; local adventurerFame = CL_SpriteFrameObject("sprite/interface2/profile/profile_icon.img", 53); local adventurerFameRight = adventurerFameX + adventurerFame.GetSize().w; Canvas.DrawSpriteFrame(adventurerFame, adventurerFameX, adventurerFameY); // 冒险家名望 local adventurerFameText = FontAssetManager.GenerateNormal("冒险家名望", true, { color = brown }); local adventurerFameTextRight = adventurerFameRight + 5 + adventurerFameText.GetSize().w; Canvas.DrawActor(adventurerFameText, adventurerFameRight + 5, 185); // 冒险家名望数值 local adventurerFameNum = FontAssetManager.GenerateNormal("7", true, { color = green }); Canvas.DrawActor(adventurerFameNum, adventurerFameTextRight + 5, 185); } // 属性 function RegisterPropertyItems() { // 属性 local leftListX = 0; local rightListX = 132; local rowY = 213; local rowH = 18; // 生命 local life = roleInfoPropertyItem( 0, "生命", "100"); Canvas.DrawSprite(life, leftListX, rowY); // 魔法 local magic = roleInfoPropertyItem( 1, "魔法", "100"); Canvas.DrawSprite(magic, rightListX, rowY); rowY += rowH; // 物理防御力 local physicalDefense = roleInfoPropertyItem(8, "物理防御力", "100", false); Canvas.DrawSprite(physicalDefense, leftListX, rowY); // 魔法防御力 local magicDefense = roleInfoPropertyItem( 9, "魔法防御力", "100"); Canvas.DrawSprite(magicDefense, rightListX, rowY); rowY += rowH; // 力量 local strength = roleInfoPropertyItem( 2, "力量", "100"); Canvas.DrawSprite(strength, leftListX, rowY); // 智力 local intelligence = roleInfoPropertyItem( 3, "智力", "100"); Canvas.DrawSprite(intelligence, rightListX, rowY); rowY += rowH; // 体力 local vitality = roleInfoPropertyItem( 4, "体力", "100"); Canvas.DrawSprite(vitality, leftListX, rowY); // 精神 local spirit = roleInfoPropertyItem( 5, "精神", "100"); Canvas.DrawSprite(spirit, rightListX, rowY); rowY += rowH; // 物理攻击力 local physicalATK = roleInfoPropertyItem( 6, "物理攻击力", "100"); Canvas.DrawSprite(physicalATK, leftListX, rowY); // 魔法攻击力 local magicATK = roleInfoPropertyItem( 7, "魔法攻击力", "100"); Canvas.DrawSprite(magicATK, rightListX, rowY); rowY += rowH; // 物理暴击 local physicalCrit = roleInfoPropertyItem( 10, "物理暴击", "100"); Canvas.DrawSprite(physicalCrit, leftListX, rowY); // 魔法暴击 local magicCrit = roleInfoPropertyItem( 11, "魔法暴击", "100"); Canvas.DrawSprite(magicCrit, rightListX, rowY); rowY += rowH; // 独立攻击 local independentAttack = roleInfoPropertyItem( 12, "独立攻击", "100"); Canvas.DrawSprite(independentAttack, leftListX, rowY); rowY += rowH; // 攻击速度 local attackSpeed = roleInfoPropertyItem(13, "攻击速度", "100"); Canvas.DrawSprite(attackSpeed, leftListX, rowY); // 释放速度 local releaseSpeed = roleInfoPropertyItem( 14, "释放速度", "100"); Canvas.DrawSprite(releaseSpeed, rightListX, rowY); rowY += rowH; // 移动速度 local moveSpeed = roleInfoPropertyItem( 15, "移动速度", "100"); Canvas.DrawSprite(moveSpeed, leftListX, rowY); rowY += rowH; // 攻击属性 local attackProperty = roleInfoPropertyItem(16, "攻击属性", "火(0)/冰(0)/光(0)/暗(0)", true, 260); Canvas.DrawSprite(attackProperty, leftListX, rowY); } // 底部四个按钮 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 extends CL_CanvasObject { // additionReaction 属性是否有加成 加成为绿色 不加成灰色 constructor(idx, title, numText, additionReaction = true, width = 125) { local w = width; local h = 18; base.constructor(); // 重设大小并清空 ResizeAndClear(w, 18); // 开始绘制 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 iconX = 5; local icon = CL_SpriteFrameObject("sprite/interface2/profile/profile_icon.img", idx); local iconRight = iconX + icon.GetSize().w; DrawSpriteFrame(icon, iconX, h/ 2 - icon.GetSize().h / 2); // 属性名称 local property = FontAssetManager.GenerateNormal(title, true, { color = titlecolor }); DrawActor(property, iconRight + 5, 0); // 属性数值 local propertyNum = FontAssetManager.GenerateNormal(numText, true, { color = numColor }); local numX = w - propertyNum.GetSize().w; DrawActor(propertyNum, numX, 0); // 结束绘制 EndDraw(); } } // 其他面板按钮 class otherButton extends Yosin_CommonUi { // 是否启用按钮 enabled = true; iconX = null; iconY = null; icon = null; // 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"; icon = CL_SpriteObject(path, enabled ? idx : idx +1 ); iconX = 32 - icon.GetSize().w / 2; iconY = 45 / 2 - icon.GetSize().h / 2 + 3; icon.SetPosition( iconX , iconY ); Addchild(icon); } function Proc(DT) { if (isLBDown){ icon.SetPosition( iconX , iconY + 1 ); }else{ icon.SetPosition( iconX , iconY ); } } } // 上半部分 人物装备穿戴 class Personalinfo_CharactersEquipment extends CL_CanvasObject { // 展示其他装备 showOtherEquipment = null; // 允许更换装备 allowChangeEquipment = null; // // 画布 // Canvas = null; constructor() { local w = 248; local h = 179; base.constructor(); showOtherEquipment = true; allowChangeEquipment = false; // 创建画布 CL_CanvasObject(); // 重设大小并清空 ResizeAndClear(w, h); // 设置填充画刷 用于绘制边框和线条 // Canvas.SetFillBrush(sq_RGBA(59, 56, 57, 250)); // 设置轮廓画刷 用于绘制边框和线条 // Canvas.SetStrokeBrush(sq_RGBA(59, 56, 57, 250)); // 开始绘制 BeginDraw(); // 绘制背景 DrawBackground(w); // 结束绘制 EndDraw(); } // 背景 function DrawBackground(Width) { // 装备栏背景 local equipmentBackground = CL_SpriteFrameObject("sprite/interface/newstyle/windows/inventory/inventory.img", 21); DrawSpriteFrame(equipmentBackground, 5, 5); // 顶部光线 local topLight = CL_SpriteFrameObject("sprite/interface/newstyle/windows/inventory/inventory.img", 178); DrawSpriteFrame(topLight, Width / 2 - topLight.GetSize().w / 2, 0); // todo 角色展示 // 结婚戒指槽位 local ringSlotBg = CL_SpriteFrameObject("sprite/interface/newstyle/windows/inventory/inventory_cn.img", 0); DrawSpriteFrame(ringSlotBg, Width / 2 - ringSlotBg.GetSize().w / 2, 5); // todo 根据是否装备 显示装备 if (showOtherEquipment) { // 辅助装备 local assist = CL_SpriteFrameObject("sprite/interface/newstyle/windows/inventory/inventory.img", 19); DrawSpriteFrame(assist, 179, 69); // 耳环 local earrings = CL_SpriteFrameObject("sprite/interface/newstyle/windows/inventory/inventory.img", 122); DrawSpriteFrame(earrings, 179, 102); // 魔法石 local MagicStone = CL_SpriteFrameObject("sprite/interface/newstyle/windows/inventory/inventory.img", 20); DrawSpriteFrame(MagicStone, 211, 101); } } } // if (!getroottable().rawin("chongzaiflag")) { // getroottable()["chongzaiflag"] <- true; // } else { // //遍历窗口队列 如果可见则调用Show // for (local i = 0; i< _SYS_WINDOW_LIST_.len(); i++) { // local Window = _SYS_WINDOW_LIST_[i]; // Window.Visible = false; // Window.RemoveSelf(); // } // TestStage(); // }