我对Android和Java相当陌生,我正在进行我的第一款游戏。
这场比赛似乎每6-8秒暂时停止一次,持续大约半秒钟。我正在做一个平台游戏,时间是一切,所以小故障使游戏不可玩。
这是一个已知的垃圾收集问题,还是一些背景任务?我尝试过引导到安全模式,并使用不同的手机,但做同样的事情。
加载雪碧:
public void load() {
mysprite = new Sprite(this);
mysprite_image = new Texture(this);
if (!mysprite_image.loadFromAsset("mysprite_sprite_sheet.png")) {
fatalError("Error loading sprite_sheet");
}
mysprite.setTexture(mysprite_image);
}我的测试程序的主循环就是这样做的:
public void draw() {
canvas = getCanvas();
canvas.drawColor(Color.BLACK);
for (int i=0; i<20; i++) {
if (x[i] + vx[i] <= 0 || x[i] + vx[i] + 60 >= screenWidth) vx[i] *= -1;
if (y[i] + vy[i] <= 0 || y[i] + vy[i] + 60 >= screenHeight) vy[i] *= -1;
x[i] += vx[i];
y[i] += vy[i];
mysprite.position = new Point(x[i], y[i]);
drawSheetFrame(mysprite, 20, 29, 1, myspriteFrame, 4);
}
}draw()在锁定和解锁画布之间被调用。
发布于 2015-01-09 06:22:47
正如您已经知道的那样,在onDraw()方法中执行新对象是一种糟糕的行为,在这段代码中,您甚至在循环中调用新对象!所以GC会时不时地把你拖慢。
为了避免这种情况,您可以在onDraw()方法的外面创建一个“点轮询”,并在需要时创建/缓存实例。
https://stackoverflow.com/questions/27854614
复制相似问题