我(仍在)正在开发一款游戏,当它接近完成时,会出现新的问题。所以这是短篇小说: 在修复了一些错误并实现新功能后,我可能 - 或许可能没有,遇到过一个小小的内存'问题。每个级别都有一定的时间,玩家必须解决它。当这个时间用完时,级别会重新加载。在重新加载之后,无论是在未能及时解决水平还是在完成水平之后,游戏逐渐开始减速。我的计时器每秒都会滴答,该级别以相同的速度重新加载,但是当在X重新加载后移动对象时,它们移动得更缓慢/迟缓,就好像跳帧一样。 我查看了我的ArrayLists,他们整齐地(争论不休)清空,我的计时器重置了。以下是我使用的一些(相关)代码:
我的更新计时器中的OnTick()
MoveObjects()移动所有对象,updateDraw()更新屏幕。此定时器具有15x1000ms定时器,定时速度为250ms
public void onTick(long millisUntilFinished) {
if(!loadingNewLevel)
MoveObjects();
updateDraw();
}
prepareNewLevel
此函数为新级别准备所有必需的变量。它在电平复位和电平完成时调用
public void prepareNewLevel(){
level.clear();
movables.clear();
totalSolved = 0;
solvable = 0;
levelWidth = 0;
levelHeight = 0;
allCollided = false;
}
updateDraw();刷新屏幕
public void updateDraw(){
RelativeLayout rl = (RelativeLayout)findViewById(R.id.game);
rl.removeAllViewsInLayout();
//Level
for(GameObject go : level){
ImageRAW(go.spriteID, R.id.game, go.position.x, go.position.y);
}
for(GameObject go : movables){
ImageRAW(go.spriteID, R.id.game, go.position.x, go.position.y);
}
//Timer
if(remaining_time >= 10000)
TextViewRAW(TIMER_ID, R.id.game, 32, 32, "00:"+String.valueOf(remaining_time/1000)+" Level "+String.valueOf(currLevel+1), 18, 0);
else
TextViewRAW(TIMER_ID, R.id.game, 32, 32, "00:0"+String.valueOf(remaining_time/1000)+" Level "+String.valueOf(currLevel+1), 18, 0);
}
现在,我发布的后一段代码就是为什么我猜测我的内存管理有问题,因为我直接从我的RAW文件夹画到屏幕上。如果是这种情况,如何处理直接绘制的RAW文件的内存?
我还会让您访问一些相关的Java文件: https://www.dropbox.com/s/kqu7sfi8qnlt9w6/Game.java?dl=0 https://www.dropbox.com/s/9ofpg1xj4anlvi0/UtilLib.java?dl=0
这些文件中的后一个包含我在整个项目中使用的功能,例如早期提到的 ImageRAW() 功能。
-Zubaja