【发布时间】:2014-05-10 19:27:47
【问题描述】:
我在这里绘制一组精灵,缩小时使用较小的 (4x4) 纹理,放大时使用较大的 (16x16) 纹理。当缩放级别达到阈值时,就会发生交换。
但是,为了实现平滑过渡,精灵(位于 [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);
您可以看到我使用 AssetsManager 在放大版本 (16x16) 上使用动画和在缩小版本 (4x4) 上使用静态图像。
变量 spriteWidth、spriteHeight 在 16 或 4 处都是正确的,具体取决于放大还是缩小。
变量spriteOriginX 和spriteOriginY 在8 和2 中都是正确的(我假设),这取决于放大还是缩小。
我原以为如果设置了上述原点,它会根据该原点绘制精灵(作为从左下角的偏移量)
我在batch.draw() 中的电话是否正确?
非常感谢, J
【问题讨论】:
标签: java android textures libgdx sprite