重新启动游戏时,它会因内存不足警告而崩溃。 我正在寻找一种方法来关闭EAGLView并停止所有进程。 我不知道该向您展示什么,所以如果需要,请询问更多信息。
我有一个带有mainGameLoop的EAGLView,如下所示。
- (void)mainGameLoop {
// Create variables to hold the current time and calculated delta
CFTimeInterval time;
float delta;
// This is the heart of the game loop and will keep on looping until it is told otherwise
while(true) {
// Create an autorelease pool which can be used within this tight loop. This is a memory
// leak when using NSString stringWithFormat in the renderScene method. Adding a specific
// autorelease pool stops the memory leak
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
// I found this trick on iDevGames.com. The command below pumps events which take place
// such as screen touches etc so they are handled and then runs our code. This means
// that we are always in sync with VBL rather than an NSTimer and VBL being out of sync
while(CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0.02, TRUE) == kCFRunLoopRunHandledSource);
// Get the current time and calculate the delta between the lasttime and now
// We multiply the delta by 1000 to give us milliseconds
time = CFAbsoluteTimeGetCurrent();
delta = (time - lastTime) * 1000;
// Go and update the game logic and then render the scene
[self updateScene:delta];
[self renderScene];
// Set the lasttime to the current time ready for the next pass
lastTime = time;
// Release the autorelease pool so that it is drained
[pool release];
}
}
答案 0 :(得分:0)
我发布了一款游戏,并使用了EAGLView。我还使用了一个计时器来控制我的帧/秒(据说这也是控制设备本身功耗的一种好方法)。
最好的方法是识别退出游戏时的所有实例(甚至点击主页按钮)并控制退出例程的每一点。如果实现上面的计时器,你可以停止计时器,dealloc东西等...
在重新进入时,您将获得API中的例程,如果您实施本质上,您将有机会知道您正在从游戏中状态重新进入,而您的应用程序将从头开始重新启动。