关闭EAGLView并停止所有进程

时间:2012-04-20 12:08:30

标签: ios opengl-es

重新启动游戏时,它会因内存不足警告而崩溃。 我正在寻找一种方法来关闭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];
    }
}

1 个答案:

答案 0 :(得分:0)

我发布了一款游戏,并使用了EAGLView。我还使用了一个计时器来控制我的帧/秒(据说这也是控制设备本身功耗的一种好方法)。

最好的方法是识别退出游戏时的所有实例(甚至点击主页按钮)并控制退出例程的每一点。如果实现上面的计时器,你可以停止计时器,dealloc东西等...

在重新进入时,您将获得API中的例程,如果您实施本质上,您将有机会知道您正在从游戏中状态重新进入,而您的应用程序将从头开始重新启动。