我在任何地方都没有找到这个问题的答案,所以我们走吧。
我想渲染火箭。火箭从具有评估角度的给定起点飞行。我正在评估这样的角度:
getVelocity().angle() - 90f
我的问题是校准火箭顶部的火箭位置。下图显示了它应该如何工作:
在上图中,libgdx是如何渲染未旋转纹理区域的。在底部的图片是我所期望的:我想移动和旋转纹理区域与给定的角度在火箭顶部有(x,y)坐标。
我厌倦了写方法来绘制精灵我的期望但是我失败了。我认为这是因为我不理解这种方法的文档。
遵循手册:
void com.badlogic.gdx.graphics.g2d.SpriteBatch.draw(TextureRegion region,float x,float y,float originX,float originY,float width,float height,float scaleX,float scaleY,float rotation )
在x,y处绘制一个左下角的矩形,并拉伸该区域以覆盖给定的宽度和高度。该矩形由originX,originY相对于原点偏移。 Scale指定缩放因子,矩形应在originX,originY周围缩放。旋转指定围绕originX,originY的矩形逆时针旋转的角度。
我的代码:
public static void drawRotatedTex(SpriteBatch pmRenderer, TextureRegion pmTex, float pmPosX, float pmPosY, float pmAngle)
{
pmRenderer.begin();
pmRenderer.draw(
pmTex, pmPosX, pmPosY, -pmTex.getRegionWidth()/2, pmTex.getRegionHeight(), pmTex.getRegionWidth(), pmTex.getRegionHeight(), 1f, 1f, pmAngle);
pmRenderer.end();
}
结果:
这是碰撞的时刻。我们可以看到坐标相对于火箭是偏移的。
我不问完全解决方案。对于我来说,如果有人解释我(在绘图或其他方面)这样的方法是有效的,那就足够了。
修改
审核建议此问题与以下内容重复:
libgdx: Rotate a texture when drawing it with spritebatch
我读了这个主题,但这不是我的解决方案。我知道如何旋转我的精灵我不知道为什么火箭的坐标相对于火箭顶部偏移。
修改
从火箭类调用我的drawRotatedTex:
@Override
public void render(Renderer pmRenderer, float pmX, float pmY) {
SpriteBatch lvSpritebatch = pmRenderer.getSpriteBatch();
Sprite lvSprite = null;
if(mIsExploding)
{
if((lvSprite = mExplosion.getTexture()) != null)
{
lvSpritebatch.begin();
lvSpritebatch.draw(lvSprite, pmX + lvSprite.getWidth()/2, pmY - lvSprite.getHeight()/2);
lvSpritebatch.end();
}
}
else
{
lvSprite = mAnimation.getTexture();
RendererTools.drawRotatedTex(lvSpritebatch,lvSprite,pmX,pmY,getVelocity().angle() - 90f);
}
}