我是一个相当"新手"的Android开发人员,我希望我的第一个项目之一是一个动态壁纸,但是我是否应该关注Canvas或OpenGL是否存在冲突.作为新手,我知道我应该首先掌握Canvas,因为它更容易使用,但我更喜欢从我感兴趣的现实世界项目中学习,即使它有时有点倒退.
我之前以非常基本的方式使用过这两种方式,并且我理解它们的一般概念,但我不确定它们如何转移到动态壁纸的领域.我认为在动态壁纸上不需要OpenGL的全速运行,因为以最大FPS运行它会比电池耗尽更多,但与此同时我担心使用Canvas会导致滞后和在做更换主屏幕等事情时会口吃.
我一直倾向于使用OpenGL ES 2.0,以保持性能最佳,因为我对壁纸的初步想法涉及很多分层,我不确定Canvas是否有能力,但我希望更有经验的开发人员对是否有意见或者不是所有涉及使用OpenGL的额外工作(特别是与我看过的动态壁纸有关)是值得的.
我正在使用LibGDX进行项目,我正在尝试在特定数量的空间内平铺/重复纹理.目前我使用的TextureRegion设置为适当的大小,并且正如您在OpenGL中使用"Clamp To Edge"所期望的那样填充纹理的任何额外空间.我想有一种简单的方法可以将这种行为改为"重复"模式,但是我似乎无法找到一种方法来完成这项工作,尽管它看起来像是应该很容易改变的东西.
所以,基本上,有一种简单的方法可以使用LibGDX在设定区域内重复图像,而不必通过在某种形式的循环中重复纹理来手动构建它吗?
我正在尝试使用 OpenGL ES 2.0 为 Android 应用程序创建一个非常简单的粒子系统。基本上它仅适用于背景中线性移动的云。在开始之前,我的第一个想法是使用点精灵,这就是我一直在尝试做的事情。对我来说,要实现这一点相当困难,但抛开这些问题不谈,点精灵真的是实现这一点的方法吗?
我在搜索中读到了很多关于它们的相互矛盾的内容来解决我的错误,如果这不是我应该寻求的解决方案,我不想投入大量时间来使其一切正常工作第一名。人们提出了使用它们的各种问题,例如裁剪,甚至与仅使用三角形相比性能下降。我希望有经验的用户能够深入了解点精灵适合的位置以及何时使用它们,包括在像我这样的情况下,它们在屏幕上最多不会超过几十个“粒子”。
我试图在LibGDX中将纹理转换为Pixmap,这样我就可以将所有像素数据放入ByteBuffer中进行一些实验,从我所知道的,我应该可以通过执行以下操作来实现:
Pixmap pixmap = textureName.getTexture().getTextureData().consumePixmap();
ByteBuffer data = pixmap.getPixels();
Run Code Online (Sandbox Code Playgroud)
这似乎返回一个大小合适的Pixmap,而ByteBuffer似乎确实创建得很好,但它完全用零填充,从而产生一个空白的透明图像.这个,以及其他一些测试,让我相信Pixmap本身只是被创建为一个完全透明的图像,但我找不到可能导致这种情况发生的原因.是否有某种限制阻止这种工作,或者我只是遗漏了一些明显的东西?