00003 不思议迷宫.0009.2.2:自动换装:界面模拟

2024-04-08 09:48

本文主要是介绍00003 不思议迷宫.0009.2.2:自动换装:界面模拟,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!



00003 不思议迷宫.0009.2.2:自动换装:界面模拟

 

这两天一直在研究游戏的csb解析显示、重用luac之类的问题,中间遇到各种问题,各种痛苦。唉,还是知识储备不足啊,耽搁了不少时间。其实这些东西是没必要作的。如果我的手机越狱或者root了,就可以直接在真机上替换有限的几个文件,很方便试验、调试。现在条件有限,只能先在电脑上模拟一下,至少保证界面上不要出错,再打包到真机上试试。

自动换装仅发生于地牢中,地牢界面显示可参考“不思议迷宫.0010.1”中的两篇文章。但这两篇文章中的显示内容并不完整,缺少事件和装备界面等等。本篇文章需要把它补齐,并且实现自动换装的初始操作界面(对cocos2dx-lua真心不熟,查查干干,唉,慢)。

交互:地牢界面中点击“装备按钮”,弹出装备界面

注册事件回调,原版已经帮我们做好了:

self:registerTouchEvent();

不过它做得比我们需要的要多,所以就去除一些:

--注册点击事件

functionUIDungeonMain:registerTouchEvent()

    -- 宝物按钮

    local btnTreasure =tolua.cast(findChildByName(self.node, "CT2/baowu"),"ccui.Button");

    local function onTreasureOnClick(sender,eventType)

        if eventType ~=ccui.TouchEventType.ended then return end;

            if equipsUI == nil then

                equipsUI = UIEquips.create();

                equipsUI:retain();

                self:addChild(equipsUI);

            end

            equipsUI:setVisible(true);

    end

    AddTouchEventListener(btnTreasure,onTreasureOnClick);

end

其中用到了UIEquips,和UIDungeonMain类似,在my下创建luac文件,从原版拷贝所需内容,再修改修改:

UIEquips= class("UIEquips",function()

    return cc.Layer:create();

end);

 

functionUIEquips.create(openType, extraPara)

    return UIEquips.new(openType, extraPara);

end

 

--装备界面打开的方式

EQUIP_OPEN_TYPE_DEFAULT             = 0;    -- 默认打开

EQUIP_OPEN_TYPE_BLACKSMITH          = 1;   -- 工坊打开

EQUIP_OPEN_TYPE_DEMON               = 2;    -- 魔神雕像打开

 

--构造函数

--@param openType     界面打开的方式

--@param extraPara    附加参数

functionUIEquips:ctor(openType, extraPara)

    -- 初始化

    me = self;

    self:setName("UIEquips");

    local node = cc.CSLoader:createNode("layout/equip/equip.csb");

    self:addChild(node);

    self.node = node;

    local CT =node:getChildByName("CT");

    local panel =CT:getChildByName("page_view");

 

    openType = openType orEQUIP_OPEN_TYPE_DEFAULT;

    self.openType = openType;

    self.extraPara = extraPara or {};

 

    self.CT = CT;

    local BT =node:getChildByName("BT");

    self.BT = BT;

 

    self.panel = panel;

    self.data = {};

 

    -- 设置下滚动面板的信息

    panel:removeAllPages();

    panel:setCustomScrollThreshold(100);

    panel:setUsingCustomScrollThreshold(true);

 

    ……

 

    -- 注册点击事件

    self:registerTouchEvent(node);

 

    -- 适配

    self:resize();

 

    -- 设置panel尺寸

   panel:setContentSize(panel:getContentSize().width, totalHeight);

end

 

--注册点击事件

functionUIEquips:registerTouchEvent(node)

    -- 注册返回按钮点击事件

    local btnBack =tolua.cast(findChildByName(node, "BT/btn_back"),"ccui.Button");

    local function onBackClick(sender,eventType)

        if eventType ~=ccui.TouchEventType.ended then return end;

        self:setVisible(false);

    end

    -- AddTouchEventListener在引导时自动发布TAEGET_CLICK事件

    AddTouchEventListener(btnBack,onBackClick);

 

    TextStyleM.setTextStyle(btnBack,TextStyleM.TEXT_SIZE_MIDDLE, TextStyleM.TEXT_COLOR_BROWN_YELLOW, true);

    btnBack:setTitleText(getLocStr("btn_text_back"));

end

 

functionUIEquips:resize()

    local node = self.node;

 

    -- bg居中显示并充满整个屏幕

    AlignM.fitToScreen(node, "bg");

 

    -- CT居中并缩放至合适大小

    AlignM.alignToCenter(node, "CT");

 

    -- BT置于底部并缩放至合适大小

    AlignM.alignToBottomCenter(node,"BT");

end

装备界面的打开、关闭这样就可以了。

交互:装备界面中点击“装备槽”,弹出自动换装配置界面

现在要继续玩上装备界面,当玩家点击“装备槽”时,需要弹出换装配置界面。那这个配置界面怎么来呢?较好的办法是找到和cocos2dx3.3rc0配套的CocosStudio,弄个csb出来。另一个办法是自己用代码手工实现。由于配置界面并不复杂,我就凑合着自己写了。

my目录下新建UIAutoEquipingConfig.luac,编辑内容:

require("game/logic/base/Equip");

require("my/UIPositioning");

 

UIAutoEquipingConfig= class("UIAutoEquipingConfig",function()

    return cc.Layer:create();

end);

 

functionUIAutoEquipingConfig.create(equipType)

    return UIAutoEquipingConfig.new(equipType);

end

 

localgrayedEquipments =

{

    [EQUIP_TYPE_HELMET] ="images/ui/equip/equip4.png",

    [EQUIP_TYPE_ARMOR] ="images/ui/equip/equip6.png",

    [EQUIP_TYPE_GLOVE] ="images/ui/equip/equip7.png",

    [EQUIP_TYPE_BELT] ="images/ui/equip/equip11.png",

    [EQUIP_TYPE_NECKLACE] ="images/ui/equip/equip3.png",

    [EQUIP_TYPE_RING] ="images/ui/equip/equip2.png",

    [EQUIP_TYPE_BOOT] ="images/ui/equip/equip10.png",

    [EQUIP_TYPE_CLOAK] ="images/ui/equip/equip5.png",

    [EQUIP_TYPE_TRUMP] = "images/ui/equip/baowu.png",

    [EQUIP_TYPE_WEAPON] ="images/ui/equip/equip8.png",

    [EQUIP_TYPE_MEDAL] ="images/ui/equip/equip9.png",

    [EQUIP_TYPE_RISKER] ="images/ui/equip/equip12.png",

    [EQUIP_TYPE_COSTUME] ="images/ui/equip/equip1.png",

}

 

localHSPACING = 30;

localVSPACING = 30;

 

localFONT = "fonts/simhei.ttf";

localFONT_SIZE = 20;

 

localBUTTON_IMAGE_NORMAL = "images/ui/button/btn_large_yellow1.png";

localBUTTON_IMAGE_SELECTED = "images/ui/button/btn_large_yellow2.png";

localBUTTON_TEXT = "更换";

 

functionUIAutoEquipingConfig:ctor(equipType)

   self:setName("UIAutoEquipingConfig");

    local background =cc.Sprite:create("images/ui/button/btn_large_disable.png");

    self:addChild(background);

         UIPositioning.fitToScreen(background);

        

         local button_close =ccui.Button:create("images/ui/equip/222.png");

    local function onButton_close(sender,eventType)

        self:getParent():removeChild(self)

    end

    AddTouchEventListener(button_close,onButton_close);

    self:addChild(button_close);

         UIPositioning.rightTop(button_close);

 

         local grayedEquipment =grayedEquipments[equipType];

 

         local label_goingFloor =cc.Label:createWithTTF("进入下一层",FONT, FONT_SIZE);

         local icon_goingFloor =cc.Sprite:create(grayedEquipment);

         local button_goingFloor =ccui.Button:create(BUTTON_IMAGE_NORMAL, BUTTON_IMAGE_SELECTED);

         button_goingFloor:setTitleText(BUTTON_TEXT);

         button_goingFloor:setTitleFontName(FONT);

         button_goingFloor:setTitleFontSize(FONT_SIZE);

    local function onButton_goingFloor(sender,eventType)

        print("onButton_goingFloor");

    end

    AddTouchEventListener(button_goingFloor,onButton_goingFloor);

    self:addChild(label_goingFloor);

    self:addChild(icon_goingFloor);

    self:addChild(button_goingFloor);

 

         local label_arrivingFloor =cc.Label:createWithTTF("进到下一层",FONT, FONT_SIZE);

         local icon_arrivingFloor =cc.Sprite:create(grayedEquipment);

         local button_arrivingFloor =ccui.Button:create(BUTTON_IMAGE_NORMAL, BUTTON_IMAGE_SELECTED);

         button_arrivingFloor:setTitleText(BUTTON_TEXT);

         button_arrivingFloor:setTitleFontName(FONT);

         button_arrivingFloor:setTitleFontSize(FONT_SIZE);

    local functiononButton_arrivingFloor(sender, eventType)

       print("onButton_arrivingFloor");

    end

    AddTouchEventListener(button_arrivingFloor,onButton_arrivingFloor);

    self:addChild(label_arrivingFloor);

    self:addChild(icon_arrivingFloor);

    self:addChild(button_arrivingFloor);

 

         local label_clickingColumn =cc.Label:createWithTTF("胜利者石柱",FONT, FONT_SIZE);

         local icon_clickingColumn =cc.Sprite:create(grayedEquipment);

         local button_clickingColumn =ccui.Button:create(BUTTON_IMAGE_NORMAL, BUTTON_IMAGE_SELECTED);

         button_clickingColumn:setTitleText(BUTTON_TEXT);

         button_clickingColumn:setTitleFontName(FONT);

         button_clickingColumn:setTitleFontSize(FONT_SIZE);

    local functiononButton_clickingColumn(sender, eventType)

       print("onButton_clickingColumn");

    end

   AddTouchEventListener(button_clickingColumn, onButton_clickingColumn);

    self:addChild(label_clickingColumn);

    self:addChild(icon_clickingColumn);

    self:addChild(button_clickingColumn);

 

         UIPositioning.hvCenter({

            {label_goingFloor, icon_goingFloor, button_goingFloor,},

            {label_arrivingFloor, icon_arrivingFloor, button_arrivingFloor,},

            {label_clickingColumn, icon_clickingColumn, button_clickingColumn,},

         }, HSPACING, VSPACING);

 

         return self

end

好几处类似的代码,这个需要重构。

UIPositioning是自己编写的界面排版函数。原版中提供了AlignM,但它有针对性。

用到的一些资源都是原版中自带的,随便找的,所以界面很丑陋:

还有两个交互要做:交互:自动换装配置界面中点击“装备图标”,弹出装备信息界面(含“卸下”按钮)、交互:自动换装配置界面中点击“选择按钮”,弹出装备装备选择界面(不能穿戴的装备灰掉)。但它们需要在真实环境中才能正常运行。

这篇关于00003 不思议迷宫.0009.2.2:自动换装:界面模拟的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/885249

相关文章

Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单

《Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单》:本文主要介绍Springboot的ThreadPoolTaskScheduler线... 目录ThreadPoolTaskScheduler线程池实现15分钟不操作自动取消订单概要1,创建订单后

Python中构建终端应用界面利器Blessed模块的使用

《Python中构建终端应用界面利器Blessed模块的使用》Blessed库作为一个轻量级且功能强大的解决方案,开始在开发者中赢得口碑,今天,我们就一起来探索一下它是如何让终端UI开发变得轻松而高... 目录一、安装与配置:简单、快速、无障碍二、基本功能:从彩色文本到动态交互1. 显示基本内容2. 创建链

python实现自动登录12306自动抢票功能

《python实现自动登录12306自动抢票功能》随着互联网技术的发展,越来越多的人选择通过网络平台购票,特别是在中国,12306作为官方火车票预订平台,承担了巨大的访问量,对于热门线路或者节假日出行... 目录一、遇到的问题?二、改进三、进阶–展望总结一、遇到的问题?1.url-正确的表头:就是首先ur

Spring使用@Retryable实现自动重试机制

《Spring使用@Retryable实现自动重试机制》在微服务架构中,服务之间的调用可能会因为一些暂时性的错误而失败,例如网络波动、数据库连接超时或第三方服务不可用等,在本文中,我们将介绍如何在Sp... 目录引言1. 什么是 @Retryable?2. 如何在 Spring 中使用 @Retryable

使用 Python 和 LabelMe 实现图片验证码的自动标注功能

《使用Python和LabelMe实现图片验证码的自动标注功能》文章介绍了如何使用Python和LabelMe自动标注图片验证码,主要步骤包括图像预处理、OCR识别和生成标注文件,通过结合Pa... 目录使用 python 和 LabelMe 实现图片验证码的自动标注环境准备必备工具安装依赖实现自动标注核心

QT实现TCP客户端自动连接

《QT实现TCP客户端自动连接》这篇文章主要为大家详细介绍了QT中一个TCP客户端自动连接的测试模型,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录版本 1:没有取消按钮 测试效果测试代码版本 2:有取消按钮测试效果测试代码版本 1:没有取消按钮 测试效果缺陷:无法手动停

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

usaco 1.2 Transformations(模拟)

我的做法就是一个一个情况枚举出来 注意计算公式: ( 变换后的矩阵记为C) 顺时针旋转90°:C[i] [j]=A[n-j-1] [i] (旋转180°和270° 可以多转几个九十度来推) 对称:C[i] [n-j-1]=A[i] [j] 代码有点长 。。。 /*ID: who jayLANG: C++TASK: transform*/#include<

基于51单片机的自动转向修复系统的设计与实现

文章目录 前言资料获取设计介绍功能介绍设计清单具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 单片机

hdu4431麻将模拟

给13张牌。问增加哪些牌可以胡牌。 胡牌有以下几种情况: 1、一个对子 + 4组 3个相同的牌或者顺子。 2、7个不同的对子。 3、13幺 贪心的思想: 对于某张牌>=3个,先减去3个相同,再组合顺子。 import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOExcepti