我用类a创建了一个简单的游戏 extends SurfaceView 和 implements Runnable . 在游戏中,绘图是在 public void run 内完成的 . 一旦活动启动,线程就会将其作为目标 . 游戏需要花费大量时间(有时10-15秒)来加载 . 当游戏暂停( thread. join() )并恢复( thread = new Thread(this); thread.start() )时,它需要花费太多时间 . 什么可能使游戏加载缓慢?什么是解决方案?
我发现游戏加载缓慢,因为线程一直在运行,没有任何 sleep . 所以只需在 run 中添加 Thread.sleep(15); ,处理所有异常,就可以解决这个问题 . 谢谢你的支持 .
Thread.sleep(15);
最常见的原因是资源加载 .
I / O操作非常慢,因此,如果您在实际绘制之前尝试加载所有位图,这可能会在绘图实际开始之前导致显着延迟 .
避免这种情况的一种策略是在实际需要开始使用资产之前预先加载资产 . 很多游戏都是在所谓的Splash屏幕上做到这一点 . 此外,不要太快以回收您的资产并释放他们正在使用的内存 . 这意味着您需要在下次启动时重新加载它们 .
总的来说,没有确切的方法可以做到这一点 - 在加载时间和内存消耗之间存在不断的权衡 . 您只需要进行实验并尝试查看最适合您的用例的内容 .
确保使用IDE配置应用程序,检查对象创建和内存分配调用 . 大多数情况下,您可以轻松找出问题的原因 .
2 回答
我发现游戏加载缓慢,因为线程一直在运行,没有任何 sleep . 所以只需在 run 中添加
Thread.sleep(15);
,处理所有异常,就可以解决这个问题 . 谢谢你的支持 .最常见的原因是资源加载 .
I / O操作非常慢,因此,如果您在实际绘制之前尝试加载所有位图,这可能会在绘图实际开始之前导致显着延迟 .
避免这种情况的一种策略是在实际需要开始使用资产之前预先加载资产 . 很多游戏都是在所谓的Splash屏幕上做到这一点 . 此外,不要太快以回收您的资产并释放他们正在使用的内存 . 这意味着您需要在下次启动时重新加载它们 .
总的来说,没有确切的方法可以做到这一点 - 在加载时间和内存消耗之间存在不断的权衡 . 您只需要进行实验并尝试查看最适合您的用例的内容 .
确保使用IDE配置应用程序,检查对象创建和内存分配调用 . 大多数情况下,您可以轻松找出问题的原因 .