游戏GUI

unity3D游戏开发十三之GUI GUI在游戏的开发中占有重要的地位,游戏的GUI是否友好,使用是否方便,很大 阅读详情

在过去的8年里,我经过数次失败的GUI系统设计经历,最终找到了一种算是可以的方案。这个方案使用一种类似MVC的架构。主要有以下几个大的部分:

【sprite系统】

sprite是一个从古老的游戏中一直演化过来的概念,而在这里,它代表了屏幕上的一个次元(层)中所有可见元素。

它描述了一个屏幕上的矩形,以及和其他矩形的关系。

它具有自己的更新和绘制方法。

它具有自己的各种特性,比如可拖动,比如事件冒泡。

同时,它还有一个称为控制器的东西,这个东西会在创建或者attach的时候对sprite进行修改或者初始化。会处理sprite的输入事件,并可以接管sprite的绘图处理。

【UI元素】

UI元素是sprite的控制器接口的实现。并且会在初始化时去创建sprite,以达到显示的目的。

一个UI元素就代表一个UI控件,比如一个编辑框,或者是一个combobox。

每个UI元素上都有数个事件的插槽,应用程序可以通过向这些插槽插入事件处理来关注UI元素。

【UI脚本】

UI元素的插槽不仅可以插入一个事件处理,还可以插入一个UI脚本的方法索引。

而脚本系统和脚本方法索引,都是接口和无特定指向意义的数值类型,方便脚本扩展。

【引擎接口】

因为UI系统中会用到绘图,贴图,声音,为了通用性,这些都被抽象为接口,以便于不同引擎的支持。

但是这个里面有一点非常重要,就是一定不要依赖于某个特定引擎或者平台的特性进行接口设计,那会让你束手束脚。

【资源管理】

因为UI系统中会涉及到比较多资源,所以,所有资源都被统一管理起来。通过字符串来进行资源索引。返回的是资源的接口指针。

在资源管理内部,对每种资源都有一个缓冲池。当然只做按名字缓冲,毕竟比较深层次的资源缓冲还要依赖引擎接口来完成。

资源里主要有以下几种:图像(贴图组合动画),贴图,声音,字体。

【文字绘制】

文字绘制,由字体资源和绘图引擎接口共同来完成。


字体资源里有个中间件,用来管理字体的缓存,目前是采用256级灰度点阵来存储,在各种绘图引擎和平台中都可以方便的转化为屏幕图元,并且还有灰度来保障边缘混淆的正确显示。

【关于绘图系统】

绘图系统中,GUI的需求主要是 贴图, 绘制简单的矩形边框矩形填充, 绘制线条, 裁剪。

GDI绘图,一开始就被放弃了,因为它的整个系统的绘图特性过多,会导致关注点的分散。为了替代GDI绘图,我实现了一套内存位图的绘图库。不过最终这个库还是会把结果丢到GDI的HDC上,只是中间过程里,都是在内存中进行图像的各种混合。

DX和OGL,因为这两个都可以支持贴图,所以实现UI系统需要的接口完全没有问题。在实际GUI的编码和测试中,我使用HGE这个DX的封装接口来间接实现了UI系统所需的绘图接口。


【数据源】

UI系统里,每个UI元素都是从数据源中进行读取并创建的。

数据源是一个纯虚接口的形式,在实际编码和测试中,我使用的是XML作为数据源。

XML既有良好的可读性,又易于程序处理。非常适合在这里作为数据源。

【UI编辑器】

相应的,生成数据源的部分,就是靠UI编辑器。

UI编辑器本身也是通过UI系统实现的。

UI编辑器主要包括几个部分:布局编辑器、贴图捡取、属性编辑。其中布局编辑器这里,每个控件的绘制仍旧调用的是它自身的绘图方法,不过为了防止触发控件本身的事件,我用一个控件编辑容器树,代替了原来的控件元素树,树结构还是使用原有的结构,控件被作为空间编辑容器的子元素。


【历史】

2002年 第一版UI系统   绘图使用DIRECTDRAW,采用UI元素和UI视觉元素统一的方法,采用一棵树进行绘制和UI自身的管理。没有数据源,没有编辑器,没有脚本系统,完全试验品。失败原因:UI元素的设计问题,以及架构不完善。

2005年 第二版UI系统 绘图采用D3D,采用UI元素和UI视觉元素统一的方法,采用一棵树进行绘制和管理。无数据源,无编辑器,无脚本系统,有事件处理插槽,在客户端进行了小规模的使用。

2008年 第三版UI系统 绘图采用抽象接口,有GDI(内存位图)和D3D实现。采用UI元素和UI视觉元素统一的方法,一棵树绘制和管理。有数据源,无编辑器,无脚本系统,仅在开发和测试环境内进行了使用。失败原因:纠结在UI元素布局的管理上,后发现是UI元素的设计有问题。

2009年 第四版UI系统 绘图采用抽象接口,有GDI(内存位图)和D3D(HGE),采用UI元素和UI视觉元素统一方法,一棵树绘制和管理,有数据源,有编辑器。失败原因:UI元素和视觉元素统一的方法,给UI元素的管理和UI元素的逻辑实现带来很大限制。

2011年 第五版UI系统 绘图采用抽象接口,有GDI(内存位图)和D3D(HGE),采用UI元素和UI视觉元素分开的方法,分为一颗逻辑树,一颗视觉树。数据源仍旧用XML,用第四版的编辑器实现方式。
matlab 版 数独小游戏 GUI界面设计 近期,由于各种原因,接触到了matlab版的数独小游戏,需要做GUI界面。由于之前本科的时候自己也做过简单的界面涉及,就以为很简单,结果,piapia打脸。数独中的数字是在table中显示的,为了将题目数字,作答数字、答案数字和解答数字区分开,需要设置不同的颜色,但是网上相关资料太少,所以这个界面设计过程很痛苦,现将个人经验分享于此。 首先是数独游戏的解法,这个网上一搜一大堆,本文所用程序与如下网址中所述一致。 https://www.bilibili.com/video/BV1Yx411V7tE 数 阅读详情

相关推荐

用java的robot类以及Gui 制作一个游戏(阴阳师)脚本

** 用java的robot类以及Gui 制作一个游戏(阴阳师)脚本 ** 由于阴阳师这个游戏肝度太大,就决定写一个脚本来模拟玩家的重复性操作.所以我就决定用java中的robot类中的一些方法来模拟鼠标点击,移动等功能,具体方法见下图. 因为一个好看的界面能让人看着更加的舒服,所以就决定用java中的GUI来设计一个操作界面,功能更能很好的展现方便使用. 具体思路 脚本的一个难题就是如何防止被封...

赌徒 9099

Unity 工具“常用插件九大分类汇总”(UI/VR/AR/建模/Shader/动画/网络/AI/资源/数据/区块链等)

unity

翻肚鱼儿的博客 6766

GUI之扑克牌界面小游戏

# -*-coding:gb2312-*- from tkinter import * from tkinter import messagebox from PIL import Image, ImageTk # 图片模块 class Application(Frame): """一个经典的GUI程序的类的写法""" # 构造函数(构建组件对象) def __init__(self, master=None): # 构造函数 super().__ini.

qq_59861678的博客 3953

GUI编程入门到游戏实战(一)

GUI编程入门到游戏实战(一) GUI就是图形用户界面,是基于图形的界面,windows就是一个图形用户界面的操作系统,而DOS是基于命令提示符的操作系统,GUI编程就是编出一个图形用户界面的软件. 组件: 窗口 弹窗 面板 文本框 列表框 按钮 图片 监听事件 鼠标 键盘事件 破解工具 1.简介 GUI的两个核心编程技术:Swing AWT 界面不美观 需要jre环境 所以,没有流行起来。 为什么要学习? 可以写一下自己想要的小公举 工作时可能需要维护swing界面(概率小) 了解MVC架构

weixin_46307478的博客 2420

深入探索pygame_gui:Python游戏开发的GUI库

PyGame是一个开源的Python模块,专为电子游戏设计,提供了图形、声音等功能。它基于SDL库构建,允许快速地开发跨平台的游戏。PyGame支持多种图像格式,具有事件处理、音频播放、碰撞检测等特性,广泛应用于休闲游戏和教学。PyGame提供了一套丰富的API,让用户能以Python的方式进行游戏开发。对于初学者来说,PyGame简洁的语法和直观的操作方式,能迅速入门;而对于专业人士,它也提供了足够的灵活性来创建更复杂的游戏。

weixin_42389113的博客 1056

树莓派介绍与可安装的操作系统

树莓派是一款由英国树莓派基金会开发的信用卡大小的微型计算机。处理器(CPU)内存(RAM)图形处理器(GPU)USB 接口网络接口(以太网和 Wi-Fi)视频输出(HDMI)音频输出用户只需添加电源、存储卡、显示器和输入设备(键盘、鼠标),就可以将其当作一台功能齐全的电脑使用。主要特点:低成本:价格亲民,适合教育和个人项目。小巧便携:体积小,便于携带和部署。功能强大:支持多种编程语言和操作系统,功能不逊于传统电脑。树莓派从最初的教育工具发展成为功能强大的多用途平台。最新的树莓派 5。

像风一样自由的博客 2199

【Unity】UI之GUI的使用

GUI技术看似成为古老的技术,但是Unity5.x之后并没有取消这种UI传统的技术。Unity4.6出现的新的UI技术称之为UGUI,我们会在之后的课程进行讲解,他的出现主要是为了重新定义UI的技术规范,统一之前UI插件繁多,混杂,标准不统一的混乱局面,大有一统江湖的目的。但是原生的GUI生命力依然旺盛。在一些早期开发的项目,小型游戏依然有其存在的价值,简单易用是它存在的硬道理。UI是游戏组成的重要部分,游戏的很多操作直接通过UI控制。

Iamme 2135

蓝牙 - 如何在Windows下抓取蓝牙数据

选择Windows Instarller(64-bit),最好不要选择PortableApps版,因为后面需要通过btvs.exe来启动Wireshark,如果是绿色可移植版,会启动失败。在安装完以后,找到btvs.exe文件,位于路径:C:\BTP\v1.14.0\x86下,这个视安装版本不同路径名不同。在第一台机器上启动btvs.exe,第二台机器上手动启动wireshark,并将第一台机器的IP地址作为参数。1,同一机器上,Wireshark安装后,会自动直接启动,如上面使用方式一样。

guoqx的专栏 2万+

游戏界面设计GUI

区别 NGUI:Unity的插件,由外部公司开发的。(因开发人员离开Unity,继续开发NGUI,所以NGUI现在仍在更新) UGUI:Unity吸收NGUI的开发公司,为Unity新增原生的UGUI。 什么是GUI GUI是指那些显示在屏幕上给予用户提示的界面,这些界面不会与游戏内容产生互动或者影响。 GUI用的是屏幕坐标系,都是2D效果。 主要API 所有代码都要写在OnGUI()方...

喵毛的博客 3091

Solidworks曲面建模学习(二)——3D草图

本文主要是演示有一些零件在solidworks中通过3D草来绘制会更加方便。

东东不熬夜的博客 9507

NuPlayer 之 Renderer

触发postDrainAudioQueue_l()或postDrainVideoQueue()开始渲染。解码器输出数据 → NuPlayer::Decoder::onMessageReceived。音频数据存入mAudioQueue,视频数据存入mVideoQueue。• 每次写入后通过mNotifyConsumed通知解码器。• 通过AudioSink::write()写入音频设备。• 根据VSync信号和音频时钟调整渲染时机。• 通过Surface直接提交给显示系统。

aningxiaoxixi的博客 315

GUI编程入门到游戏实战

GUI编程 GUI:图形用户界面编程 GUI编程学习路线 GUI是什么 GUI怎么学 GUI使用场景 组件 监听 弹窗 面板 鼠标 按钮 1、简介 GUI核心技术:Swing AWT 缺点: 不美观 需要jre环境 为什么要学习 可以写出一些自己用的小工具 可能会涉及到swing的维护工作->破解 了解MVC框架,了解监听 2.AWT 2.1.AWT介绍 AWT:抽象的窗口工具,包含了很多的类和接口 元素:窗口、按钮、文本框 java.awt包下 2.2.组件和容器 ...

qq_41924554的博客 451

黑猫带你学eMMC协议第4篇:eMMC概述

1 前言 声明: 本文依据eMMC JEDEC5.1协议及个人工作经验整理而成,如有错误请留言。 文章为个人辛苦整理,付费内容,禁止私自转载。 本文大约3000字,从emmc的内部结构框架、供电、总线、寄存器等各方面进行框架性的介绍,本章节内容不需要深入研究,读完本篇文章,只要能对emmc有个框架下的了解,就可以了。 2 内部结构框架 由图可以看出,emmc内部由两块组成:控制器 + 存储介质。emmc内部存储介质绝大部分为nand flash。 众所周知,我们需要存储数据到nand flash中,并

黑猫奥利奥的博客 3341

matlab GUI制作拼图小游戏

matlab GUI制作拼图小游戏 最近帮同学的忙制作一个拼图贴上代码和效果图,以后再详细说明。之前一般找到的拼图游戏都是“推格子”形式的,由于具体的要求,不能应用这种模板。 本人这次做的拼图是这样的:从左边图点击,选择拼图,拼图位置变空,点击右边格子,相应位置补上刚刚选择的拼图。以下是效果图: function varargout =page_final(varargin) % PAGE_FIN...

weixin_42663919的博客 3453

【GB28181】wvp-GB28181-pro部署安装教程(Ubuntu平台)

初始环境安装。

废人一枚的博客 5084

2025年“区块链技术”职业院校技能大赛赛后复盘与总结(必看)

记录一次2025年“区块链技术”职业院校技能大赛的参加经验总结与赛后复盘

我是网络安全兼技能大赛工程师,专注网络安全技术学习与技能大赛实战!持续分享最新的技术文章,帮你少走弯路,一起在技术赛道上进步~ 1993

游戏菜单GUI封装

这个GUI引挚(暂叫"引挚"吧,有兴趣您可以自已改得更漂亮一点哦)中我封装了DirectDraw接口,并封装了Midi类与Menu类.使用方法如下://  以下代码在程序初始化时用一遍便可DirectDraw=new CDirectDraw;DirectDraw->Create(hWnd) //创建图形接口Midi= new CMidi;Midi->Create(hWnd); //创建MIdI音乐

hba的专栏 1242

结构力学本构模型:复合材料模型:复合材料热力学行为技术教程_2024-08-07_06-54-53.Tex

热塑性复合材料是一种由热塑性树脂基体和增强纤维组成的复合材料。与热固性复合材料不同,热塑性复合材料在加热时可以软化,冷却时硬化,这一过程可以重复进行,因此它们具有可回收和可再加工的特性。热塑性树脂,如聚酰胺(尼龙)、聚碳酸酯、聚醚醚酮(PEEK)等,与碳纤维、玻璃纤维等增强材料结合,可以制备出具有高强度、高刚度和良好耐热性的复合材料。热粘弹性理论是研究材料在温度变化和时间依赖性载荷作用下的变形和应力响应。复合材料,由于其独特的微观结构,展现出复杂的热粘弹性行为。

808

GUI小游戏一枚

GUI小游戏一枚 源代码下载地址:http://www.zuidaima.com/share/1550463720688640.htm

springmvc_springdata的专栏 1122

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

自制的MATLAB拼图游戏GUI界面版详解(上篇)

摘要:这篇博文在早前本人写的介绍拼图游戏的基础上推出带有GUI用户界面的增强版,这里将通过上、中、下三篇博文详细介绍利用MATLAB GUI设计的拼图游戏完整实现过程,每篇都会附上相应代码及解释。上篇主要讲解拼图游戏中界面设计与图片选取功能的详细实现过程。上篇的要点如下:拼图游戏实现的功能、拼图游戏GUI界面设计、图片选择功能实现。

思绪无限的博客 3万+

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

【Java学习笔记】GUI界面之小游戏

------a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训a>、期待与您交流! ------- 为了加深自己对GUI界面编程的理解,查阅了一些资料,自己尝试做了一个小游戏——雷电。花了一天的时间写代码,运行效果不怎么好。但是,至少加深了对绘画操作的理解。 代码主要分为

VisionDo的博客 9180

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

完成一个猜数字的GUI游戏

任务描述 完成一个猜数字的GUI游戏。 开始游戏后,产生一个没有重复数字的4位随机数,用户每猜一个数字,显示出“完全猜中的数字个数”和“猜中数字但位置错误的数字个数”,比如nAmB,数字n表示猜中的位置正确的数字个数,数字m表示数字正确而位置不对的数字个数。例如,正确答案为5234,如果用户猜5346,则显示:1A2B,数字1表示数字5及其位置猜对了,数字3和4这两个数字猜对了,但是位置没对,记为2B。然后,用户根据游戏提示的信息继续猜,直到猜中为止。同时设计规则,根据猜中的次数计算积分,并可以显示不同用户

joey_ro的博客 1667

java gui 猜数字游戏_用java做一个GUI版的猜数字游戏

import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.*;import java.util.Random;public class GuessNumberGUI extends JFrame {public static int ra...

weixin_35387135的博客 953

c++ GUI库 游戏界面库

著作权归作者所有。 商业转载请联系作者获得授权,非商业转载请注明出处。 作者:侯铁 链接:http://www.zhihu.com/question/24375005/answer/27586622 来源:知乎 题主君去隔壁C#君看到人家写出来的程序Aero风格的毛玻璃,Metro风格的小瓷砖 而且人家只用了两个月呢,太羡慕啦,自己写了一年C++还在写“press any key

证券指标的专栏 3889

java gui怎么做游戏_Java中关于GUI实现贪吃蛇游戏的简单方法

这篇文章主要介绍了Java GUI编程之贪吃蛇游戏简单实现方法,详细分析了贪吃蛇游戏的具体实现步骤与相关注意事项,并附带demo源码供读者下载参考,需要的朋友可以参考下本文实例讲述了Java GUI编程之贪吃蛇游戏简单实现方法。分享给大家供大家参考,具体如下:例子简单,界面简陋 请见谅项目结构如下Constant.jvava 代码如下:package snake;/**** @author hjn...

weixin_39979617的博客 136
上一篇: VC工程的命令行编译法
下一篇: Android ApiDemos示例解析(68):Graphics->MeasureText
cbbbc
博客等级 码龄15年 609粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值