[GEiv]第一章:静态绘制(一) 图元与基本图形

2023-12-13 11:38

本文主要是介绍[GEiv]第一章:静态绘制(一) 图元与基本图形,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

第一章:静态绘制(一)

图元与基本图形绘制

        从这篇文章开始,进行引擎功能的详细讲解,第一章主要讲解静态绘制的基本API,这是制作动画的基础部分。

[图元][class: geivcore.enginedata.obj.Obj]]

        我承认Obj这个名字不是很好,这是历史原因造成的。Obj是图元类,任何展示在屏幕上的图像都由Obj实现,任何对图像的变换操作由ObjAPI来完成,一个图元中容纳若干个图形类(可以是0个),在一个图元中图形被编号为由0开始的整数索引,但在实际操作中,使用索引的情况并不多见。

[引擎句柄][interface: geivcore.UESI]

        Obj的创建由引擎句柄(UESI)完成,UESI是引擎的上层包装接口,它向上提供引擎的全部系统调用,在游戏系统开始时,最好将UESI作为构造器参数传入或干脆将UESI做静态化单例包装,以供上层框架随时调用。总之,UESI就是引擎的全部,这点需要注意。

[例子]画一个方形:

public static void main(String[] args) {UESI UES = new R();//初始化引擎环境Obj rect = UES.creatObj(UESI.BGIndex);//创建一个图元,在背景层次。rect.addGLRect("FFFFFF",0,0,100f,100f);//在图元上画一个正方形,位置(0,0),大小:100X100。颜色FFFFFFrect.show();//显示rect.setDx(100);//将图元x坐标移动到100位置rect.setDy(100); //将图元y坐标移动到100位置}

        

        有必要进行详细的代码解释。

        1)UESI UES = new R();//初始化引擎环境

        UESI前者说过,是引擎包装接口,而R类是这个接口的一个具体实现,我们使用接口屏蔽R的具体实现细节。典型的游戏开发中只会使用到一个R,因此,只需要保留这个UESI引用即可,不要每次都实例化。

        2) Obj rect =UES.creatObj(UESI.BGIndex);

        Obj为图元,图元的创建能且仅能使用UES的createObj方法,不要使用new Obj的形式。构造参数是这个图元所在的绘制层次,这个引擎由下至上保留了7个绘制层次,当多个图元出现在相同位置时,上层图元一定会覆盖下层图元,而同层图元覆盖规则依赖创建的顺序。

        

       这里,BGIndex是最底层,一般放置游戏的背景元素。

        3)rect.addGLRect("FFFFFF",0,0,100f,100f);

        rect是一个图元引用,图元使用一系列addGL*方法来创建各种图形,它们包括:


        一共有十六中方法,当然包括了一些重载情况。

        抛开重载不提,依次简单介绍一下:

        addGLFont:向图元绘制一个静态字体,需要指定其颜色、位置、字体、字号、字形、内容、左下缩进。支持中文,当然也可以使用setFontString方法进行修改。(会重新生成文字纹理,所以不要频繁调用,字体调用会使用单独章节讲解)

        addGLImage:创建一个矩形区域,填充指定的图像纹理,需要指定绘制位置和图像文件,图像文件可以是JPG\PNG\BMP等外部文件。在单独由IO读取文件流后,生成的纹理会保存在内存中,不会重复读取IO。

        addGLLine:绘制一条线,需要给定颜色、两点坐标,可以指定绘制宽度。

        addGLNop:什么也不绘制。Nop就是Nop。

        addGLOval:绘制一个椭圆,指定位置与长短轴,由于是使用极坐标进行的多边形模拟,可以指定使用的顶点数来提高图像质量。

        addGLPoint:绘制顶点,指定位置与颜色。

        addGLRect:绘制矩形,指定颜色与长宽。

        addGLTrigon:绘制三角形,指定颜色与三组坐标。

        addGLWorldSet:绘制字库,与静态字体不同,字库中每个字单独产生纹理,例如产生0~9 十个数字的纹理,就可以显示所有数字(会在字体章节详细讲解)对于易变数据的显示,推荐此种方式。

        4)rect.show();

        显示图元,你可以调用hide隐藏一个图元,或调用destory方法永久销毁。

        5)setDx,Dy

        设置图元的位置,整个图元会作为一个整体一起移动,(不只是位置,很多图元变换API会影响到图元中的全部图形,这点很有用),顺带一提,在不指定配置文件的情况下,默认长宽坐标为800X600,以左上为0坐标点,左到右为X方向,上到下为Y方向。

[另一个例子,多图形图元]

        在上例中稍加改动:

        Obj rect =UES.creatObj(UESI.BGIndex);rect.addGLRect("FFFFFF",0,0,300f,300f);rect.addGLLine("00FF00",0,0,300f,300f);rect.addGLOval("FFFF00",0,0,300f,300f);rect.show();rect.setDx(100);rect.setDy(100);

        

        在rect图元中,创建了三个图形,分别为矩形、线、圆形。

        它们分别被名为DivIndex的图元索引标记为0、1、2。

 

        在进行图元变换过程中(包括位置、角度、通道),它们默认作为一个整体一同变换。当然,你也可以使用图元索引指定图元中要变换的某个图形。请看下例

[填充例子]

        我们使用rect.setGLFill(true);方法将图元设置为填充状态。在show前加入这句后执行结果如下:

        

        可以看到,作为底层的方形被填充了,但是圆形却没有填充。

        此时若我想填充圆形而非方形该如何呢?

        使用图元索引:rect.setGLFill(2,true);,其中2是圆形的图元索引,此时执行结果如下:

        

        在图元类中,大部分set方法都有针对图元索引的重载,以提供灵活的操作方式。但图形过多时不推荐放到同一个图元中,图元单图形的方式是被推荐的。

[总结]

        通过这一章,应该可以进行基本图形的绘制了。

这篇关于[GEiv]第一章:静态绘制(一) 图元与基本图形的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

MySQL中between and的基本用法、范围查询示例详解

《MySQL中betweenand的基本用法、范围查询示例详解》BETWEENAND操作符在MySQL中用于选择在两个值之间的数据,包括边界值,它支持数值和日期类型,示例展示了如何使用BETWEEN... 目录一、between and语法二、使用示例2.1、betwphpeen and数值查询2.2、be

SpringBoot实现图形验证码的示例代码

《SpringBoot实现图形验证码的示例代码》验证码的实现方式有很多,可以由前端实现,也可以由后端进行实现,也有很多的插件和工具包可以使用,在这里,我们使用Hutool提供的小工具实现,本文介绍Sp... 目录项目创建前端代码实现约定前后端交互接口需求分析接口定义Hutool工具实现服务器端代码引入依赖获

MySQL基本表查询操作汇总之单表查询+多表操作大全

《MySQL基本表查询操作汇总之单表查询+多表操作大全》本文全面介绍了MySQL单表查询与多表操作的关键技术,包括基本语法、高级查询、表别名使用、多表连接及子查询等,并提供了丰富的实例,感兴趣的朋友跟... 目录一、单表查询整合(一)通用模版展示(二)举例说明(三)注意事项(四)Mapper简单举例简单查询

使用Python在PDF中绘制多种图形的操作示例

《使用Python在PDF中绘制多种图形的操作示例》在进行PDF自动化处理时,人们往往首先想到的是文本生成、图片嵌入或表格绘制等常规需求,然而在许多实际业务场景中,能够在PDF中灵活绘制图形同样至关重... 目录1. 环境准备2. 创建 PDF 文档与页面3. 在 PDF 中绘制不同类型的图形python

Redis 基本数据类型和使用详解

《Redis基本数据类型和使用详解》String是Redis最基本的数据类型,一个键对应一个值,它的功能十分强大,可以存储字符串、整数、浮点数等多种数据格式,本文给大家介绍Redis基本数据类型和... 目录一、Redis 入门介绍二、Redis 的五大基本数据类型2.1 String 类型2.2 Hash

Java Instrumentation从概念到基本用法详解

《JavaInstrumentation从概念到基本用法详解》JavaInstrumentation是java.lang.instrument包提供的API,允许开发者在类被JVM加载时对其进行修改... 目录一、什么是 Java Instrumentation主要用途二、核心概念1. Java Agent

Python绘制TSP、VRP问题求解结果图全过程

《Python绘制TSP、VRP问题求解结果图全过程》本文介绍用Python绘制TSP和VRP问题的静态与动态结果图,静态图展示路径,动态图通过matplotlib.animation模块实现动画效果... 目录一、静态图二、动态图总结【代码】python绘制TSP、VRP问题求解结果图(包含静态图与动态图

Kotlin 协程之Channel的概念和基本使用详解

《Kotlin协程之Channel的概念和基本使用详解》文章介绍协程在复杂场景中使用Channel进行数据传递与控制,涵盖创建参数、缓冲策略、操作方式及异常处理,适用于持续数据流、多协程协作等,需注... 目录前言launch / async 适合的场景Channel 的概念和基本使用概念Channel 的

Python函数的基本用法、返回值特性、全局变量修改及异常处理技巧

《Python函数的基本用法、返回值特性、全局变量修改及异常处理技巧》本文将通过实际代码示例,深入讲解Python函数的基本用法、返回值特性、全局变量修改以及异常处理技巧,感兴趣的朋友跟随小编一起看看... 目录一、python函数定义与调用1.1 基本函数定义1.2 函数调用二、函数返回值详解2.1 有返

SpringBoot中@Value注入静态变量方式

《SpringBoot中@Value注入静态变量方式》SpringBoot中静态变量无法直接用@Value注入,需通过setter方法,@Value(${})从属性文件获取值,@Value(#{})用... 目录项目场景解决方案注解说明1、@Value("${}")使用示例2、@Value("#{}"php