我一直在寻找答案,但似乎找不到一个(这是一种相当非传统的方法来编程安卓游戏,所以可以预料到,至少我认为是这样)。
我正在尝试在安卓系统中创建一个类似GBA风格的RPG游戏(出于怀旧目的)。OpenGL对我来说还不够好,因为在游戏循环中定制性不够强(我只想在需要绘制东西时调用draw,因为我希望这个游戏在使用电池方面非常高效,这意味着让它更像一个轮询应用程序而不是游戏)。我创建了一个自定义的SurfaceView,并通过其自己的线程进行调用,每当需要进行绘制时便会启动该线程(我按照SDK中的样例LunarLander安卓游戏进行了建模)。
问题是,我希望游戏本身是固定大小的(208x160),然后再缩放到屏幕的大小。我遇到的问题是,在扩展SurfaceView的普通参数范围内似乎没有任何方式可以做到这一点。当前状态下的游戏如下图所示。我正在尝试将其拉伸到屏幕的高度并在宽度上保持比例,同时也不会增加可视化游戏的内容(保持固定,无论屏幕大小如何)。
https://istack.dev59.com/EWIdE.webp(我本来想在行内发布实际图像。但是反垃圾措施可以咬我>.<)
目前,我正在获取SurfaceView的画布并直接绘制到它上面,并将我的大小作为硬编码像素尺寸(208px、160px)进行提供。
下面是当前线程获取画布并绘制其内容的样子。有什么更好的方法可以在不改变我希望游戏虚拟占用的大小的情况下绘制到画布上吗?
@Override
public void run()
{
Canvas c = null;
try
{
c = surfaceHolder.lockCanvas(null);
synchronized (surfaceHolder)
{
draw(c);
}
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
if (c != null)
surfaceHolder.unlockCanvasAndPost(c);
}
}
这是draw方法(StringBuilder是我自己编码的引擎对象):
public void draw(Canvas canvas)
{
canvas.drawColor(Color.GRAY);
StringBuilder stringBuilder = new StringBuilder(canvas, Color.BLACK, letters);
stringBuilder.drawString("Oh, hello there!");
stringBuilder.setLocation(10, 20);
stringBuilder.drawString("Why am I so small?");
}
有什么想法吗?
scale
吗? - K-ballo