我正在绘制一组精灵,当缩放比例较小时使用较小的纹理(4x4),当放大时则使用较大的纹理(16x16)。当缩放级别达到临界值时进行交换。然而,为了使过渡平稳,精灵(位于[x,y])需要以它们的中心作为原点进行绘制。目前,它们是基于左下角进行绘制的。因此,当纹理交换发生时,精灵会稍微跳动,因为原点不匹配。
我创建了一些变量来调试并确保它们是正确的。
您可以看到,我正在使用AssetsManager,在缩小版本(4x4)上使用静态图像,在放大版本(16x16)上使用动画效果。
变量spriteWidth、spriteHeight在缩小或放大时都为正确值(分别为4和16)。
变量spriteOriginX和spriteOriginY也是正确的,分别为8和2,取决于是缩小还是放大。
根据设定的原点(从左下角偏移),我原本认为它会基于该原点绘制精灵。
请问batch.draw()中的调用是否正确?
非常感谢, J
我创建了一些变量来调试并确保它们是正确的。
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,在缩小版本(4x4)上使用静态图像,在放大版本(16x16)上使用动画效果。
变量spriteWidth、spriteHeight在缩小或放大时都为正确值(分别为4和16)。
变量spriteOriginX和spriteOriginY也是正确的,分别为8和2,取决于是缩小还是放大。
根据设定的原点(从左下角偏移),我原本认为它会基于该原点绘制精灵。
请问batch.draw()中的调用是否正确?
非常感谢, J