【发布时间】:2015-10-02 06:50:16
【问题描述】:
我在任何地方都没有找到这个问题的答案,所以我们走吧。
- 我的期望:
我想渲染火箭。火箭从给定的起点以评估的角度飞行。我正在评估这样的角度:
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 缩放的缩放因子。 Rotation 指定矩形围绕 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);
}
}
【问题讨论】:
-
我不确定您的结果中发生了什么 - 绿线是否表示爆炸火箭的坐标?那么火爆精灵应该发生在它们交叉的地方吗?仅仅是爆炸与坐标不匹配 - 还是爆炸发生在与火箭相比正确的位置 - 还是绿线坐标对应于我看到的三枚火箭之一。
-
@DoubleDouble 我会解释的。结果图片上是碰撞时刻(火箭与地面)。黑场是gorund(我没有纹理它,因为它是游戏的早期版本)。绿线与示例无关,它们只是鼠标位置。爆炸精灵具有正确的坐标,因为它们靠近地面。火箭和爆炸具有共享坐标(相同的对象 - 请参阅我的编辑我将粘贴代码)。我问为什么火箭精灵位置相对于自己的坐标偏移。