Articles of spritebatch

Love2D:我怎么能跟上很多小精灵的碰撞数据?

所以我正在使用一个SpriteBatch来跟上大量的小块拼图游戏。 我有一个Quads的数组(不同的颜色块),他们随机添加到上述的SpriteBatch 。 现在,游戏决定了当前作品何时落地,然后这个作品停止了,并且一个新作品产生了玩家现在可以控制的作品。 为了找出何时停止放下这件作品,我需要做一次碰撞检查。 这应该不难,因为我只需要检查下降的棋子(除非当前的棋子引起连锁反应)。 但是,我应该使用什么types的数据结构? 我不能使用单个Quads的位置数据,因为边界框实际上是不同的大小/形状比件(认为三角形件,但我将需要使用一个稍微瘦小的矩形,以适应颠倒件在右侧的部分之间)。 我应该复制(x, y)对使用宽度和高度的偏移量,并将它们存储在一个数组中,或者我错过了一个更明显/有效的方式? 我猜测,玩屏幕可能会填满数百个这样的片段,如果我添加两个玩家模式,那就加倍。 编辑:这是什么四大尺寸问题是关于:

渲染性能:num Draw Calls == num Texture Bindings

我正在用Libgdx 1.6.4制作游戏,并在iPhone 4上遇到一些滞后问题,然后发现: // in the constructor GLProfiler.enable(); … // in the render method Gdx.app.debug("draw calls: " + GLProfiler.drawCalls); Gdx.app.debug("texture bindings: " + GLProfiler.textureBindings); GLProfiler.reset(); 日志显示的是绘制调用的数量总是等于纹理绑定的数量。 你知道这样可以吗? 这似乎很奇怪,因为我把所有的图像作为TextureRegion在只有一个大小为1024×512的 TextureAtlas 。 是不是应该是,例如我会有50个绘制调用,只有1-2纹理绑定,而不是50个绘制调用和50纹理绑定。 这可能是滞后的来源吗? 另一个线索可能是,我同时使用了SpriteBatch和Scene2d Stage,但它们都使用相同的TextureAtlas。 Scene2d Skin正在加载TextureAtlas,SpriteBatch从皮肤的区域中绘制TextureRegions。 感谢您的任何帮助。 —更新— 主SpriteBatch(它只有一个)正在制作9个totalRenderCalls 。 maxSpritesInBatch的值是26 。 在SpriteBatch渲染过程中,这些值与我在Docs和FPS中读取的值相似,都是60 FPS 。 没关系,那里没问题。 滞后的问题是当我使用Scene2D Stage在GameScreen上方显示对话框时。 舞台有它自己的批次,我不直接操纵。 显示对话框时,帧速率下降到49-50 ,对话框中的animation很糟糕。 我猜这个问题与主SpriteBatch和Stage的SpriteBatch的Texture Binding有关。

LibGDX:我需要从SpriteBatch到批处理才能绘制一个触摸板

我使用LibGDX创建了一个小游戏,并在渲染游戏对象时使用了SpriteBatch。 现在我想添加一个触摸板,触摸板的绘制方法需要一个批量作为参数,但我的游戏使用SpriteBatch。 我能做什么?

删除/更新Spritebatch

我正在devise一个Spritebatch类,用于WebGL的静态和dynamic对象。 我面对的一个问题是,我已经阅读了几个不同的意见精灵配料,但有一个目标。 把所有的顶点放在一个缓冲区并渲染它们 所以在WebGL我使用gl.bufferData(….,new Float32Array(size), gl.STEAM_DRAW) 。 这是我的第一个问题:当spritebatch应该是dynamic的,那么size不是固定的,会增加,这会导致重新创建Float32Array ,我发现这对于Float32Array (至less在我的机器上)是非常昂贵的。 第二个问题,比方说,我给了Float32Array(maxElements)一个最大的大小,我添加了4个Sprites,然后我分配了比我实际需要的更多的东西。 其他方法:当我知道有多less个精灵时,我创建了Spritebatch。 所以基本上我把4个Sprites放到了我的场景中,然后在渲染之前创建了一个大小为4 * numVerticesPerSprite的Spritebatch 4 * numVerticesPerSprite 。 然而比方说,我想要更新Sprite 2 ,我需要在我的Spritebatch类中的某种索引结构来确定Sprite 2的顶点存储在SpriteBatch( Float32Array()内部Float32Array()哪个位置。 所以我的问题是: 一个dynamic的Spritebatch应该如何工作,你能想到一个索引方法来识别Sprite X的Float32Array内的顶点来更新/删除它们吗? (另外:粒子系统解决了我在找什么?我假设他们也是某种精灵批处理)

移动时边缘闪烁相机(2D)

我有一个Orthographic相机。 我有一个固定的景观纹理和一个可移动物体的纹理。 如果物体向右移动,相机也将随物体移动。 当我在屏幕上绘制应该有固定位置的得分文本时,如果摄像机的位置得到更新,那么得分文本位置也将被更新,使得它看起来像固定在屏幕上。 但是,如果我这样做,我有一些边缘在文字对象闪烁。 我使用SpriteBatch! 是否有另一种方法来实现屏幕上的固定位置的对象?

在SpriteBatch中使用SamplerState.LinearClamp时的工件

我为Windows Phone和Windows Phone SDK 7.1使用XNA 4.0和VS2010 Express。 这是一个平台游戏,我有一个由16×16纹理组成的地图,它是dynamic绘制的,一块一块地拼贴。 当使用SpriteBatch绘制我的地图与LinearClamp,我得到的东西看起来像模糊的细线。 当相机从一个像素移动到另一个像素时,它们变得可见并且当相机静止时,伪像消失。 这是我的意思的一个小样本: 下面是我用spritebatch绘制的方法: SBWorld.Begin(SpriteSortMode.Deferred, BlendState.NonPremultiplied, SamplerState.LinearClamp, DepthStencilState.Default, RasterizerState.CullNone, null, camera.View); 当使用SamplerState.PointClamp时,游戏只是玩游戏(恕我直言),所以我不能使用它。 为什么这些线出现,我如何摆脱这些?

对象被绘制在错误的图层上

我有主游戏(Game1.cs)画出这样的精灵: //Clear everything GraphicsDevice.Clear(Color.CornflowerBlue); //Begin drawing _spriteBatch.Begin(SpriteSortMode.BackToFront, BlendState.AlphaBlend); //Draw enemies for (int i = 0; i < ControlObj.EnemyList.Count; i++) { ControlObj.EnemyList[i].DrawObject(_spriteBatch); } //Draw powerups for (int i = 0; i < ControlObj.PowerupList.Count; i++) { ControlObj.PowerupList[i].DrawObject(_spriteBatch); } //Draw other stuff for (int i = 0; i < ControlObj.OtherStuffToDraw.Count; i++) { ControlObj.OtherStuffToDraw[i].DrawObject(_spriteBatch); } //Draw the player ControlObj.PlayerObj.DrawObject(_spriteBatch); […]

libGDX SpriteBatch重用

使用libGDX,必须将sprite或纯纹理区域插入批处理中进行绘制: void render() { batch.begin(); batch.draw(…); batch.end(); } VBO是否在每一帧都上传到GPU? 一旦有任何数据改变了,有没有办法重新使用批处理?

每秒使用60帧会导致屏幕在移动时留下一条纹理线

我试图实现一个帧速率function,我注意到,使用每秒60帧,导致屏幕留下一个纹理的轨迹,当有移动。 以下是我用来制作帧频function的代码: public void render(float deltaT){ currentLevel.updateWorld(deltaT); if((fps+=deltaT) >= 1.0/60.0){ fps = 0; }else return; super.render(deltaT); Gdx.gl.glClearColor(103 / 255f, 69 / 255f, 117 / 255f, 1); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT); currentLevel.updateScreen(deltaT, gameCamera); } currentLevel.updateWorld更新游戏的逻辑。 currentLevel.updateScreen方法更新相机的位置,绘制到屏幕上。

在XNA中有效的SpriteBatching?

XNA中有效的精灵批处理的例子是什么? 我不知道什么时候(如果有的话)我会做这样的事情: spriteBatch.Begin() DrawSprite1(); spriteBatch.End(); spriteBatch.Begin(); DrawSprite2(); spriteBatch.End(); 是否有任何时间在一个绘制方法,我会分开这样的绘图调用? 谢谢!