Jam*_*mmo 4 java android textures sprite libgdx
我在这里画精灵的集合,当缩小,并进行放大时,一个更大的(16×16)的质地.当变焦水平达到阈值时,发生了互换使用较小的(4×4)的质感.
然而,为了使其成为平滑过渡,需要绘制精灵(位于[x,y]),其原点是精灵的中心.目前他们正在根据他们的左下角绘制.因此,当纹理交换发生时,精灵会略微跳跃,因为原点不匹配.
我已经创建了一些变量来调试并确保它们是正确的.
TextureRegion sprite = null;
boolean useHighResTexture = (_gameRef.cameraZoom < CAMERA_ZOOM_SWITCH_LO_RES);
if (useHighResTexture) {
//Zoomed in, Hi res, Use animation
sprite = animation.getKeyFrame(animationStateTime, true);
} else {
//Zoomed out, lo-res, Use static image
sprite = Assets.instance.getSmall();
}
float spriteWidth = sprite.getRegionWidth();
float spriteHeight = sprite.getRegionHeight();
float spriteOriginX = spriteWidth/2;
float spriteOriginY = spriteHeight/2;
//Draw(TEXTURE, x, y, originx, originy,
// width, height, scaleX, scaleY, rotation,
// srcX, srcY,
// srcWidth, srcHeight, boolflipX, boolflipY
//this.setCenter(spriteOriginX, spriteOriginY);
batch.draw(sprite.getTexture(), this.x, this.y, spriteOriginX, spriteOriginY,
spriteWidth, spriteHeight, 1.0f, 1.0f, this.directionFaced,
sprite.getRegionX(), sprite.getRegionY(),
sprite.getRegionWidth(), sprite.getRegionHeight(), false, false);
Run Code Online (Sandbox Code Playgroud)
您可以看到我使用AssetsManager在放大版本(16x16)上使用动画,在缩小版本(4x4)上使用静态图像.
变量spriteWidth,spriteHeight是在任一正确两个16或4根据是否放大或缩小.
变量spriteOriginX和spriteOriginY正确(我假设)在8和2都是正确的,这取决于放大还是缩小.
我会想到如上设置的原点,它将根据该原点绘制精灵(作为左下角的偏移)
我的电话是batch.draw()正确的吗?
非常感谢,J
不,这不对.该draw()总是使用左,下角的位置.原点仅用于缩放和旋转.
所以对你而言,这意味着你必须从你的位置中减去原点:
batch.draw(sprite.getTexture(), this.x - spriteOriginX, this.y - spriteOriginY,
spriteOriginX, spriteOriginY, spriteWidth, spriteHeight, 1.0f, 1.0f,
this.directionFaced, sprite.getRegionX(), sprite.getRegionY(),
sprite.getRegionWidth(), sprite.getRegionHeight(), false, false
);
Run Code Online (Sandbox Code Playgroud)
通过这样做,您只需将左下角(即位置)向左下方"推"半宽半高,以便您的位置真正定义精灵的中心.
再次:原点仅用于旋转和缩放.如果在draw()方法中设置旋转,它将围绕原点旋转(在您的情况下为中间).
| 归档时间: |
|
| 查看次数: |
3131 次 |
| 最近记录: |