当我尝试缩放某些对象时,我的游戏渲染系统出现了轻微问题。我认为这必须是我将具有逻辑坐标的对象映射到屏幕上的图形对象的方式。
渲染
/**
* Retrieve the image representing the object that should be rendered.
* @return The image sprite representing the object.
*/
public Texture getSprite();
/**
* Retrieve the x-coordinate where the object should be rendered.
* @return The x-coordinate of the object.
*/
public float getScreenX();
/**
* Retrieve the y-coordinate where the object should be rendered.
* @return The y-coordinate of the object.
*/
public float getScreenY();
纹理
......
......
/**
* Retrieve the width of the texture.
* @return The width of the texture.
*/
public int getWidth();
/**
* Retrieve the height of the texture.
* @return The height of the texture.
*/
public int getHeight();
......
......
当我绘制界面等东西时,这个系统非常有效,它在我的游戏世界中没有逻辑坐标。
让我们看一下具有逻辑坐标的对象,看看我如何将坐标映射到图形坐标,从而在绘制时缩放纹理时会出现问题。
瓷砖
@Override
public float getScreenX() {
return x * width;
}
@Override
public float getScreenY() {
return y * height;
}
假设任何瓷砖的纹理大小为16 * 16,但由于某种原因,我想以32 * 32绘制它。这将导致问题,因为图块的图形x和y坐标会混乱。
注意:我知道我可以通过允许用户在将图像加载到系统时设置比例来解决这个问题,但我希望它更灵活。
TL; DR:如何在游戏世界中的逻辑坐标与图形化之间实现更好的映射,同时仍然可以在我想要的时候进行缩放?应该有一种更好的方法来映射,而不是让逻辑对象负责它们的图形坐标。