在高清设备上的2D androidjava游戏中的坏FPS

在高清设备上的2D androidjava游戏中的坏FPS,第1张

概述我正在研究 Android / Java上的2D游戏. 在每个帧期间,我使用固定大小的Back Buffer位图(1024×768)来绘制所有游戏的资产(背景,精灵……). 然后在onDraw()的末尾,我在屏幕上绘制了具有正确大小的后缓冲区: Rect Source = new Rect(0, 0, 1024, 768);Rect Dest = new Rect(0, 0, m_ScreenW 我正在研究 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);    }@OverrIDepublic 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();    }@OverrIDeprotected 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") @OverrIDepublic 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运行.有人知道他们是怎么做到的吗?

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

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

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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1123596.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存