Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何从Andengine中的多个小纹理区域创建一个大纹理区域?_Android_Textures_Andengine_Sprite - Fatal编程技术网

Android 如何从Andengine中的多个小纹理区域创建一个大纹理区域?

Android 如何从Andengine中的多个小纹理区域创建一个大纹理区域?,android,textures,andengine,sprite,Android,Textures,Andengine,Sprite,我正在用Andengine创建一个2D runner游戏,我的平台是由多个具有不同纹理区域的32x32精灵创建的。我希望能够创建不同大小的平台,因此我无法从单个图像文件创建平台 因此,我的每个平台都是从几个精灵创建到数百个精灵(如果平台很大的话)。这显然降低了我比赛的表现。这就是为什么我试图找到一种方法,从我的小瓷砖创建一个大的纹理区域,我用它来创建我的平台,这样我就可以创建更少的精灵 我希望能够创建一个不总是具有相同大小的平台的纹理区域,还是创建整个舞台的纹理区域(由多个平台组成) 如何有效地

我正在用Andengine创建一个2D runner游戏,我的平台是由多个具有不同纹理区域的32x32精灵创建的。我希望能够创建不同大小的平台,因此我无法从单个图像文件创建平台

因此,我的每个平台都是从几个精灵创建到数百个精灵(如果平台很大的话)。这显然降低了我比赛的表现。这就是为什么我试图找到一种方法,从我的小瓷砖创建一个大的纹理区域,我用它来创建我的平台,这样我就可以创建更少的精灵

我希望能够创建一个不总是具有相同大小的平台的纹理区域,还是创建整个舞台的纹理区域(由多个平台组成)


如何有效地将纹理区域粘在一起?

据我所知,纹理区域只是给定图集(包含记忆图像)上的某种参考。增加纹理区域的大小无助于减少内存消耗,相反,您只会增加从图集中看到的剪切/剪裁

e、 例如,让您的图像看起来像这样(使用纹理区域A、B、C、D):

AB

光盘

将纹理区域的宽度和高度加倍将产生一个包含B、C和D纹理的大纹理区域(这可能不是您想要的)

如果平台仅包含一个纹理区域A,则可以将其作为单个png加载到新的图集中,并添加
纹理选项。在构造函数中重复\u NEARIST\u PREMULTIPLYALPHA
。然后,您可以将纹理区域的宽度和高度设置为所需的精灵宽度和高度,地图集将重复该操作-如果使用,它将被绘制为AAAAA

textureRegionHeight = imageHeight; 
textureRegionWidth = 5* imageWidth;
spriteWidth = textureRegionHeight;
spriteHeight = textureRegionHeight;
其他信息

要提高性能,您应使用以下工具:

  • 精灵池(更多:一般来说是对象池)(您不能将超过100个32x32精灵显示在一起,因为其中一些很快就会从屏幕上消失)
  • SpriteBatch用于不可更改/静态相同的精灵,SpriteBroup用于其他精灵(只要您知道可能有5到10个以上的精灵具有相同的纹理,我就从未测量过这些组是否比“重复最近”选项更好或更差)
  • 每个精灵对象的Sprite.setCullingEnabled(true),因为它将停止绘制屏幕外不可见的精灵(我也没有测量过消隐是否与重复_-NEAREST配合良好)
这些要点应该可以提高性能


更多信息可在AndEngine论坛上找到,网址为

谢谢你的回答,但当我在重复纹理时得到人工制品时,我决定从AndEngine改为Libgdx。在安德林论坛上没有人能帮我,我对总是在纹理上得到奇怪的结果感到厌烦。但是关于我在这里发布的问题,我决定用9个精灵来创建每个平台:0111112\n 3444445\n 3444445\n 3444445\n 3444445\n 67778with artifacts,你的意思是像精灵边界上的细黑线一样?这是一些或多或少可行的解决方案中的一个常见问题(例如,对我帮助最大的是使用纹理选项)。重复最接近的贴图和每个精灵的单个贴图:-/您发布的布局对于重复最接近的贴图和显式贴图1、3、4、5和7是一个理想的用例(每个都有自己的32x32 png。黑色条纹只在你的角落,你在你的瓷砖上用一条透明的1px线试过了吗?在一个游戏中,我用新的BitmapTextureAtlas解决了这个问题(getTextureManager(),width,height,BitmapTextureFormat.RGBA_8888,TextureOptions.REPEATING_BILINEAR_PREMULTIPLYALPHA)-然后我加载了atlas所需的所有纹理(除了那些应该使用最近的纹理的纹理)(每个纹理来自一个png),在每个精灵之间添加一条1px线。加载时间稍微长一点,但去掉了黑线。我认为这纠正了我的假象问题,但当相机移动时,精灵之间似乎有1px的间距,当相机停止时,有时候间距消失,有时候间距出现在其他精灵之间。请注意,这些间距不是在每个平台上都可以看到,但是每个平台都是以相同的方式创建的。也许场景在精确的位置绘制多个精灵有困难?