我刚开始在android中进行游戏开发,而我正在开发一款超级简单的游戏.
这场比赛基本上就像飞扬的小鸟.
我设法让一切工作,但我得到了很多口吃和滞后.
我用来测试的手机是LG G2,所以它应该并且确实运行的游戏比这更重,更复杂.
基本上有4个"障碍"是全屏宽度彼此分开.
当游戏开始时,障碍物开始以恒定速度移动(朝向角色).玩家角色的x值在整个游戏中是一致的,而其y值会发生变化.
滞后主要发生在角色穿过障碍物时(有时也会在障碍物之后).会发生的是,游戏状态的每个图形都存在不均匀的延迟,导致运动中出现断断续续的情况.
我的想法是有一行或多行代码导致某种延迟发生(因此跳过帧).我也认为这些线路应该是围绕update()和draw()方法PlayerCharacter,Obstacle以及MainGameBoard.
问题是,我还是专门针对Android开发和Android 游戏开发的新手,所以我不知道是什么原因导致这种延迟.
我试着在网上寻找答案......不幸的是,我发现所有这些都指向了GC.但是,我不相信这种情况(如果我错了,请纠正我)这些答案对我不适用.我也阅读了android开发者的Performance Tips页面,但找不到任何帮助.
所以,请帮助我找到解决这些令人讨厌的滞后的答案!
MainThread.java:
public class MainThread extends Thread {
public static final String TAG = MainThread.class.getSimpleName();
private final static int MAX_FPS = 60; // desired fps
private final static int MAX_FRAME_SKIPS = 5; // maximum number of frames to be skipped
private final static int FRAME_PERIOD = 1000 / MAX_FPS; // …Run Code Online (Sandbox Code Playgroud) 从事咨询项目。最后一分钟的要求是球在屏幕上弹跳(不要问为什么......叹息)
不管怎样......这些球是按值分组的。10 个红球价值 100 分。5 个球为蓝色,价值 50 分。5 个绿色球价值 25 分。5 个球为黄色,得 10 分。
在此背景下,我采取的方法是扩展 SurfaceView 并定义 5 个线程,每个线程管理一组特定的球。
每个线程从 SurfaceView 接收相同的 SurfaceHolder。
我选择多线程而不是单线程的原因是管理屏幕上所有球的性能并不是最好的。
OpenGL 目前还不是一个真正的选择。
这是线程类之一的示例。当线程运行时,它会创建一定数量的球。每个球都是随机创建并添加到列表中的。
public class hundred_balls_thread extends base_balls_thread {
public hundred_balls_thread(SurfaceHolder holder, Context ctext, int radius) {
super(holder, ctext, radius);
}
@Override
public void run() {
int x, y, radius;
while (Calorie_balls.size() <= 21) {
x = 100 + (int) (Math.random() * (mCanvasWidth - 200));
y = 100 + (int) (Math.random() * (mCanvasHeight) - …Run Code Online (Sandbox Code Playgroud)