Replies: 6 comments 11 replies
-
|
Beta Was this translation helpful? Give feedback.
-
我今天重新整理了一下 rmlui 对 atalas 的支持。原来是 @pourtheworld 实现的,但并没有在项目里实用。我今天想试试,发现一些问题,干脆就改了一下。 原来的 test.atlas 运行不起来,已经去掉。新的测试直接放在 test.rmlui 里了。 现在在 rmlui 中,可以引用 .atlas 的素材。这个文件可以引用一张大贴图的一部分。例如:
它引用了同目录下 irbtn_normal.texture 这张贴图。atlas 描述了一个子图,这里是从 512x512 的大图中取正中间的 256x256 区域,并保持逻辑上依旧是 512x512 大小。 x y dw dh 指的是引用的大图中的哪个矩形部分。 由于我们把很多小图装箱到一张大图时,往往会裁掉四周空白的区域,所以逻辑上的小图会比这个矩形大。w h dx dy 描述了裁剪框: w h 是裁剪前的原始尺寸,dx dy 是裁剪后的小图在原图中的位置。 目前只可以在 rmlui 中使用它,imgui 不支持。 |
Beta Was this translation helpful? Give feedback.
-
如果想自己把若干小图片合成一张大图。需要做如下工作:
ant.atlas 这个包里面的 api 实现了装箱的功能。可以参考 https://github.com/ejoy/vaststars/tree/master/tools/make-atlas 怎么调用。也有很多第三方工具可以做这个。 可能还需要给 rmlui 添加一个接口,做文件名映射:开发期用独立的小图,发布后用一张大图。接口传递一个映射表即可,rmlui 加载图片时把文件名映射到 .atlas 上。 |
Beta Was this translation helpful? Give feedback.
-
另外,我昨天研究了一下怎么在 rmlui 里使用动态大小的 sprite 。即,怎么使用 texture 自身的 size 作为一个 ui 空间的大小。结论是无法直接做到。 如果是标准的 css ,我们可以使用 变通的方法是:
|
Beta Was this translation helpful? Give feedback.
-
另外,我昨天研究了一下怎么在 rmlui 里使用动态大小的 sprite 。即,怎么使用 texture 自身的 size 作为一个 ui 空间的大小。结论是无法直接做到。 如果是标准的 css ,我们可以使用 变通的方法是:
|
Beta Was this translation helpful? Give feedback.
-
今天给 ant.framework.demo 加上了 2D 面片支持(影子渲染还有点 bug),考虑了 atlas 的支持。 |
Beta Was this translation helpful? Give feedback.
-
我在网上找了这种素材:
两个问题想请教下:
我希望可以从这里面抠图来绘制imgui的ImageButton(想做一个简单的2d地图编辑器),不知道目前是否支持?
我看RmlUI官方的invaders小游戏示例,里面的怪物对象是一个Sprite,重点是居然每帧都调用MakeGeometry来绘制,代码链接。在unity或者虚幻中,遇到这种需求,一般会在UI节点树上挂专门的npc节点,然后通过修改节点的transform等来控制对象。对于这两种方式的区别,我理解的是:invaders中,不管npc对象动或者不动,开销都是固定的:每帧都构建一个Rml::Mesh 来绘制;在双U中,由于使用的保留模式UI架构,当UI对象的数据没有变化时,会使用上一帧缓存的顶点数据来绘制,会省一些。
看wiki的对Ant RmlUI的介绍,Ant的RmlUI与原版在底层实现上已经相去甚远。所以我的问题是,在用Ant RmlUI来做2D游戏时,假如屏幕上要渲染的对象很多,且地形之类的sprite不会动,其他sprite或者text移动比较频繁的情况下,应该怎么绘制比较好呢?
(我最近沉迷于B站的三谋,我在想,假如用2D来做SLG,里面的行军线应该如何绘制呢?其特点是:数量很多,同屏可达上千条;线条的起点或终点每帧都在动)
Beta Was this translation helpful? Give feedback.
All reactions