Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了在高清设备上的2D android / java游戏中的坏FPS大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在研究 Android / Java上的2D游戏.
在每个帧期间,我使用固定大小的BACk Buffer位图(1024×768)来绘制所有游戏的资产(背景,精灵……).

然后在onDraw()的末尾,我在屏幕上绘制了具有正确大小的后缓冲区:

Rect source = new Rect(0,1024,768);
Rect Dest = new Rect(0,m_ScreenWidth,m_ScreenHeight);
canvas.drawBitmap(BACkBufferBitmap,source,Dest,null);

问题是,当我使用这个引擎在屏幕上绘制一个简单的1024×768图像时(我能做的最简单),LG G4手机上的操作需要35到40毫秒(即大约25fps).是否有可能通过另一种管理2D图形的方式获得更好的fps?

我打开硬件加速,线程的最高优先级.
我在像素数较少的手机上没有这个问题.我想我的问题与LG G4(2560×1440)上的大量像素有关.
是否可以更快地完成绘图?
或者,是否可以在具有较低清晰度的高清设备上运行我的游戏(就像我们在PC上那样)?

编辑:这是完整的代码

1)我的观点

public class ElementaryView extends SurfaceView implements SurfaceHolder.CallBACk
{
private ElementaryThread    m_Thread;
private SurfaceHolder       m_Holder;
private Bitmap      m_SimpleBitmap=null;
private Bitmap      m_BACkBuffer =null;
private Canvas      m_BACkBufferCanvas =null;

public ElementaryView(Context context)
    {
    super (context);
    m_Holder =getHolder();
    m_Holder.addCallBACk(this);
    setFocusable(true);
    }

@Override
public void surfaceCreated(SurfaceHolder holder) 
    {
    m_Thread =new ElementaryThread(m_Holder,this);
    m_Thread.setPriority(Thread.MAX_PRIORITY);

    m_BACkBuffer =Bitmap.createBitmap(1024,768,Config.ARGB_8888);
    m_BACkBufferCanvas =new Canvas(m_BACkBuffer);
    m_SimpleBitmap =BitmapFactory.decoderesource(this.getresources(),R.drawable.splashscreen); 
    //"splashscreen" is a 1024x768 jpg image

    m_Thread.setRunning(true);
    m_Thread.start();
    }
@Override
protected void onDraw(Canvas canvas) 
    {
    m_BACkBufferCanvas.drawBitmap(m_SimpleBitmap,null);

    Rect source =new Rect(0,768);
    Rect Dest =new Rect(0,this.getWidth(),this.getHeight());

    canvas.drawBitmap(m_BACkBuffer,null);
    }
}

2)我的主题

public class ElementaryThread extends Thread
{
private SurfaceHolder   m_SurfaceHolder;
private ElementaryView  m_View;
private Boolean         m_Running;

public ElementaryThread(SurfaceHolder sh,ElementaryView view)
    {
    super();
    m_SurfaceHolder = sh;
    m_View = view;
    }

public void setRunning(Boolean r)       { m_Running = r; }

@SuppressLint("WrongCall") @Override
public void run() 
    {
    Canvas canvas;

    while (m_Running)
        {
        canvas =null;
        try
            {
            canvas =this.m_SurfaceHolder.lockCanvas();
            this.m_View.onDraw(canvas);
            }
        finally
            {
            if (canvas!=null)   m_SurfaceHolder.unlockCanvasAndPost(canvas);
            }
        }
    }
}

这使LG G4的帧速率低于30fps.然而,很多2D游戏在我的G4上以更好的fps运行.有人知道他们是怎么做到的吗?

解决方法

@H_404_42@ 认情况下,LG G4将始终以res运行. 2560×1440,这当然会让手机难以渲染任何图形.这也是为什么较小的资源.手机运行得更顺畅.因此,解决此问题的唯一方法是根据像素数和设备处理能力来改变分辨率.

大佬总结

以上是大佬教程为你收集整理的在高清设备上的2D android / java游戏中的坏FPS全部内容,希望文章能够帮你解决在高清设备上的2D android / java游戏中的坏FPS所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。