我一直在寻找答案,但似乎找不到答案(这是一种非常规的 android 游戏编程方法,所以至少我认为这是可以预料的)。
我正在尝试在 Android 中创建 GBA 风格的 RPG 游戏(用于怀旧)。OpenGL 对我来说不够好,因为它在游戏循环中的可定制性不够(我只想在需要绘制某些东西时调用 draw,因为我希望这个游戏在使用方式上非常高效电池,这意味着让它更像一个投票应用程序而不是游戏)。我创建了一个自定义表面视图,它有自己的线程,每当需要完成绘图时就会调用它(我在 SDK 中的示例 LunarLander android 游戏之后对其进行建模)。
问题是,我希望游戏本身是固定大小(208x160),然后放大到屏幕大小。我遇到的问题是,在 XML 中扩展 SurfaceView 的正常参数中似乎没有这样做。当前状态下的游戏如下图所示。我试图让它伸展到屏幕的高度并保持宽度的比例,同时也不添加到可视游戏中(保持它固定,不管屏幕大小)。
https://i.stack.imgur.com/EWIdE.png(我打算在线发布实际图像。垃圾邮件预防会咬我>.<)
目前,我正在获取 SurfaceView 的画布并直接对其进行绘图,并将我的尺寸作为硬编码的像素尺寸(208 像素、160 像素)提供。
这就是线程当前在获取画布和绘制它时的样子。在不改变我希望游戏虚拟占用的大小的情况下绘制画布的更好方法是什么?
@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);
}
}
绘制方法是这样的(StringBuilder是我自己在引擎中编码的Object):
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?");
}
有任何想法吗?