重新加载openGL场景时帮助闪烁

时间:2011-07-11 20:05:36

标签: objective-c opengl-es rendering flicker

我开始因为提出这么多问题并且无法回答任何问题而感到难过,但只要我找到一些我能做到的,我就会这样做!忏悔......

我有一个gameLoop可以运行我正在制作的游戏中的所有内容,并且在菜单中然后在游戏中一切正常,但是当我退出游戏然后重新加载菜单屏幕时,屏幕会闪烁。

这是我的游戏循环,我希望它能提供一些见解。

//A game loop that is triggered by a timer with intervals of 1/60 seconds
- (void)gameLoop
{
    // we use our own autorelease pool so that we can control when garbage gets collected
    NSAutoreleasePool * apool = [[NSAutoreleasePool alloc] init];

    thisFrameStartTime = [levelStartDate timeIntervalSinceNow];
    deltaTime =  lastFrameStartTime - thisFrameStartTime;
    lastFrameStartTime = thisFrameStartTime;

    // add any queued scene objects
    if ([objectsToAdd count] > 0) 
    {
        [sceneObjects addObjectsFromArray:objectsToAdd];
        [objectsToAdd removeAllObjects];
    }


    // update our model
    [self updateModel];

    // send our objects to the renderer
    [self renderScene];

    // remove any objects that need removal
    if ([objectsToRemove count] > 0) 
    {
        [sceneObjects removeObjectsInArray:objectsToRemove];
        [objectsToRemove removeAllObjects];
    }

    [apool release];

    if (needToLoadScene) 
    {
        [sceneObjects removeAllObjects];
        [self loadScene];           
    }
    if (needToEndScene)
    {
        [sceneObjects removeAllObjects];
        [self stopAnimation];
        //We'll need to add unloading sounds later on
        [inputController endScene];
        [self renderScene];
        needToEndScene = NO;
    }
}

我应该添加的另一件事是视图由类MusicAndViewController控制,我将其用作视图,然后添加后续视图。菜单和游戏视图实际上是相同的openGL视图,但我在切换到另一个视图之前呈现一个干净的视图

1 个答案:

答案 0 :(得分:0)

任何与我有过类似问题的人都是这样的。

设置定时器时,我必须覆盖设置器,使其无效,然后设置定时器。在我的gameScene上我没有这样做,所以当我使计时器= nil它继续发射(因为它在设置为nil之前没有失效,并且仍在运行)然后在下一个加载的场景上引起闪烁(菜单)