java - Android - 如何在游戏中正确适配位图?

标签 java android bitmap surfaceview

我正在 Android 上开发 PacMan 克隆,目前使用 Android API 17 上的 Netbeans IDE。我有一部华为 Y330 手机(我正在为其开发手机的设备),其分辨率为 480x800。我制作了 map ,使其几乎完全适合(宽度方向)它是 380x420 图像。当我运行游戏时, map 绘制得有点偏离屏幕

Screenshot

我尝试调整 SurfaceView 的大小,但角色只是消失在 map 的右边缘,我想这意味着它试图绘制 View 。如何才能正确显示图像?我调整了 Sprite 的大小,这样以后就不必缩放它们了。我猜问题不是位图的比例,而是 View 本身的显示。

public class Map 
{
    private final Bitmap mapImage;

    public Map(Bitmap mapImage)
    {        
        this.mapImage = mapImage;
    }

    public void draw(Canvas canvas)
    {
        canvas.drawBitmap(mapImage, 0, 0, null);
    }
}

这是我绘制图像的地方。

public MainGamePanel(Context context)
{
    super(context);
    getHolder().addCallback(this);
    mainGame = new Game("Player", BitmapFactory.decodeResource(getResources(), R.drawable.stepff), 
                        null, 
                        BitmapFactory.decodeResource(getResources(), R.drawable.map));
    thread = new MainThread(getHolder(), this);       
    setFocusable(true);
}  

这是我获取图像的地方。

最佳答案

您可以使用setFixedSize()设置SurfaceView的Surface的大小。称呼。对于软件渲染来说,这通常是一个好主意,因为它可以防止在具有大量像素的设备上性能严重下降。 Surface 的大小和它呈现的大小是独立的——如果 Surface 与 View 不匹配,Surface 将会适当缩放。 (基于 GLES 的演示视频 here 。)

诀窍是获得正确的纵横比,您可以通过调整 Surface 本身的大小(如演示中所示)或在 View 周围放置边框来实现。添加边框的一种方法是使用自定义 FrameLayout。格拉菲卡的AspectFrameLayout类演示了如何使用 SurfaceView 执行此操作;请参阅"Play video (SurfaceView)" Activity 为例。

关于java - Android - 如何在游戏中正确适配位图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31061998/

相关文章:

java - 是否有为日志记录添加注释的 Java 库?

java - 为什么我的音频播放会卡住ActionListners?

从像素缓冲区创建 HBITMAP 然后渲染

c - 位图文件的填充

java - 如何从 Java 向 Groovy List 接口(interface)添加方法?

java - 按升序对整数排序 - Java

android - 应用程序在 Android 后台运行时发送 GPS 数据

android - 如何在 Cordova 中设置 android.enableAapt2=false?

android - 在 Android Nougat 中显示软键盘时 EditText 失去焦点

android - 位图压缩给出空文件(0 字节)