축소 할 때 더 작은 (4x4) 텍스처를 사용하고 확대 할 때 더 큰 (16x16) 텍스처를 사용하여 스프라이트 컬렉션을 그립니다. 줌 레벨이 임계 값이면 스왑이 발생합니다.libgdx spritebatch 텍스처의 원점을 기반으로 한 드로잉이 아닙니다.
그러나 부드럽게 전환하려면 sprite ([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를 사용하여 버전 확대 (16 × 16)에 애니메이션 및 축소 버전 (4 × 4)에 정적 이미지를 사용하고 있음을 볼 수 있습니다.
변수 spriteWidth
, spriteHeight
올바른지 모두에서 하나 또는 축소 여부에 따라 16또는 4.
변수 spriteOriginX
및 spriteOriginY
은 (I 가정) 모두 8와 2가 또는 축소 여부에 따라 하나에서 정확하다.
나는 (왼쪽 아래 모서리에서 오프셋 (offset))를 그 기원에 따라 스프라이트를 그릴 것 위에로 설정 기원
가 batch.draw()
올바른 내 전화가와 생각이나 했 겠어요?
많은 감사, J
감사합니다. 치료를합니다. 주제를 벗어나서 간단한 두 가지가 아닌 두 가지 텍스처 스왑간에 부드럽게 전환하는 좋은/표준 방법론을 알고 계십니까? – Jammo
나는이 변화가 정말로 필요하다고 생각하지 않는다. 당신의 경우 엔 아마도 애니메이션의 원인이 될 수 있습니다. 애니메이션이 확대 된 경우에만 재생되며 그렇지 않은 경우에는 보이지 않습니다. 그러나 여기에서도 내가 필요한지 확실하지 않다. 나는 큰 성과 향상이 있다고 생각하지 않는다. 'TextureFilter'를 사용하려고합니다. 그들은 1 Texel (텍스처의 픽셀)이 화면에 하나의 픽셀이 아닌 경우 픽셀의 색상을 계산하는 방법을 설명합니다. 2 가지 경우가 있습니다 : 축소 : 1 텍셀이 1 픽셀 미만 (축소 한 경우) 및 관리 : 1 텍셀이 1 픽셀 이상 (확대)입니다. 그러나 그것은 다른 이야기입니다. – Springrbua