热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

UI的重用性

UI抽取思路一款手机游戏中UI有几十个到上百个不等,如果一个一个做这些UI,无疑会花费很多时间。近期我们的游戏UI已经是第N次改版了,经过

UI抽取思路

一款手机游戏中UI有几十个到上百个不等,如果一个一个做这些UI,无疑会花费很多时间。

近期我们的游戏UI已经是第N次改版了,经过这N多次的修改,我总结了UI其实有很多的共性(就是相同性)。

下面说一些我觉得常用的UI的抽取思路

 

共用按钮

image

共同点:按钮,标题,[图标],[消息数提醒]

思路分析

按钮点击事件和标题是一定有的,其它的视情况而定。所以我们可以创建一个类 BtnItemClass,用来处理UI的逻辑,外部就只要传入相应的参数就可

 

共用组件

using System;
using UnityEngine;
using System.Collections;///


/// 共用的图文按钮,抽取类
/// 包括:商店,挑战,朋友,英雄
///

public class BtnItemClass
{
public string TitleSprite;public string IconSprite;public string BtnName;public string NextUITitle;//按钮点击的事件public UIEventListener.VoidDelegate Callback;//消息提醒数public string TipMsg;public int TipNum;private bool IsEnabled;/// /// 构造函数/// /// 按钮名/// Item 图标/// 标题文字图片,没有就填null/// 下一级UI的标题/// 点击的事件/// public BtnItemClass(string btnName, string iconSprite, string titleSprite, string nextUiTitle, UIEventListener.VoidDelegate callback, bool enabled = true){this.BtnName = btnName;this.IconSprite = iconSprite ?? "null";this.TitleSprite = titleSprite ?? "null";this.NextUITitle = nextUiTitle;this.Callback = callback;IsEnabled = enabled;} public BtnItemClass()

{

}

//设置属性public static void Bind(BtnItemClass itemClass, Transform trans){if(!string.IsNullOrEmpty( itemClass.BtnName))trans.name = itemClass.BtnName;//标题文字图片UISprite titleSprite = CTool.GetChildComponent("TitleSprite", trans);titleSprite.spriteName = itemClass.TitleSprite;titleSprite.MakePixelPerfect();//图标UISprite iconSprite = CTool.GetChildComponent("IconSprite", trans);iconSprite.spriteName = itemClass.IconSprite;iconSprite.MakePixelPerfect();//当标题图片找不到时就显示文字var titleLabel = CTool.GetChildComponent("TitleLabel", trans);if (string.IsNullOrEmpty(itemClass.TitleSprite)|| itemClass.TitleSprite == "null"){titleLabel.text = itemClass.NextUITitle;titleLabel.gameObject.SetActive(true);}else{titleLabel.gameObject.SetActive(false);}//绑定事件trans.GetComponent().onClick = itemClass.Callback;//button.isEnabled = item.IsEnable = item.IsEnable;
}
}

使用方法

首先构建一个List,里面里包含当前的UI所有按钮的数据,然后做刷新UI(生成按钮,设置按钮属性)

//按钮数据
private List UIConfigList
{
get{return new List(){new BtnItemClass("BtnHeroList", "BattleTeam_icon_HeroStrong", "null", "英雄强化",obj => CNetPlayer.CheckPackageOverflow_WithMsgBox(() => CUIHeroList.Show("英雄强化"))),new BtnItemClass( "武器强化,obj => CUIPowerUp.ShowWeaponstSelectList()),
};}
}
//刷新UI
private void RefreshUI()
{
var max = UIConfigList.Count;CUIHelper.ResizeCUITableGridGameObjects(TableGrid, max, CommPicBtnTemplate);for (int idx = 0; idx ){var trans = TableGrid.transform.GetChild(idx);var itemClass = UIConfigList[idx]; BtnItemClass.Bind(itemClass, trans);}TableGrid.Reposition();
}




推荐阅读
  • 本文详细介绍如何在VSCode中配置自定义代码片段,使其具备与IDEA相似的代码生成快捷键功能。通过具体的Java和HTML代码片段示例,展示配置步骤及效果。 ... [详细]
  • 本文详细介绍了Java中org.eclipse.ui.forms.widgets.ExpandableComposite类的addExpansionListener()方法,并提供了多个实际代码示例,帮助开发者更好地理解和使用该方法。这些示例来源于多个知名开源项目,具有很高的参考价值。 ... [详细]
  • 深入解析Spring Cloud Ribbon负载均衡机制
    本文详细介绍了Spring Cloud中的Ribbon组件如何实现服务调用的负载均衡。通过分析其工作原理、源码结构及配置方式,帮助读者理解Ribbon在分布式系统中的重要作用。 ... [详细]
  • PHP 5.5.0rc1 发布:深入解析 Zend OPcache
    2013年5月9日,PHP官方发布了PHP 5.5.0rc1和PHP 5.4.15正式版,这两个版本均支持64位环境。本文将详细介绍Zend OPcache的功能及其在Windows环境下的配置与测试。 ... [详细]
  • 毕业设计:基于机器学习与深度学习的垃圾邮件(短信)分类算法实现
    本文详细介绍了如何使用机器学习和深度学习技术对垃圾邮件和短信进行分类。内容涵盖从数据集介绍、预处理、特征提取到模型训练与评估的完整流程,并提供了具体的代码示例和实验结果。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 主要用了2个类来实现的,话不多说,直接看运行结果,然后在奉上源代码1.Index.javaimportjava.awt.Color;im ... [详细]
  • IneedtofocusTextCellsonebyoneviaabuttonclick.ItriedlistView.ScrollTo.我需要通过点击按钮逐个关注Tex ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • 深入理解C++中的KMP算法:高效字符串匹配的利器
    本文详细介绍C++中实现KMP算法的方法,探讨其在字符串匹配问题上的优势。通过对比暴力匹配(BF)算法,展示KMP算法如何利用前缀表优化匹配过程,显著提升效率。 ... [详细]
  • 本文介绍如何使用布局文件在Android应用中排列多行TextView和Button,使其占据屏幕的特定比例,并提供示例代码以帮助理解和实现。 ... [详细]
  • 本文详细介绍了JavaScript中数组的两个重要高阶函数:map()和reduce()。map()用于将数组中的每个元素通过指定的函数进行处理并返回一个新的数组,而reduce()则用于对数组中的元素进行累积计算,最终返回一个单一值。 ... [详细]
  • PHP 过滤器详解
    本文深入探讨了 PHP 中的过滤器机制,包括常见的 $_SERVER 变量、filter_has_var() 函数、filter_id() 函数、filter_input() 函数及其数组形式、filter_list() 函数以及 filter_var() 和其数组形式。同时,详细介绍了各种过滤器的用途和用法。 ... [详细]
  • 本题探讨了在一个有向图中,如何根据特定规则将城市划分为若干个区域,使得每个区域内的城市之间能够相互到达,并且划分的区域数量最少。题目提供了时间限制和内存限制,要求在给定的城市和道路信息下,计算出最少需要划分的区域数量。 ... [详细]
  • Keras 实战:自编码器入门指南
    本文介绍了使用 Keras 框架实现自编码器的基本方法。自编码器是一种用于无监督学习的神经网络模型,主要功能包括数据降维、特征提取等。通过实际案例,我们将展示如何使用全连接层和卷积层来构建自编码器,并讨论不同维度对重建效果的影响。 ... [详细]
author-avatar
人对方啥地位
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有