【问题标题】:Game scene starts blinking after few replays几次回放后游戏场景开始闪烁
【发布时间】:2012-06-27 06:14:36
【问题描述】:

我正在使用 cocos2D 游戏引擎。几次重播后,游戏场景开始闪烁,精灵根本不动。但是精灵的位置会随着玩家离开而移动。每个函数都会被调用。但什么也没有出现。我已经通过仪器检查了内存消耗。内存消耗没问题。任何帮助表示赞赏。 提前致谢。

这是我结束游戏时使用的代码。

[[CCDirector sharedDirector].openGLView removeFromSuperview];
[[CCDirector sharedDirector] stopAnimation];
[[CCDirector sharedDirector] end];

这是我再次加载游戏场景时使用的代码。

if( ! [CCDirector setDirectorType:kCCDirectorTypeDisplayLink] )
    [CCDirector setDirectorType:kCCDirectorTypeDefault];

CCDirector *director = [CCDirector sharedDirector];

viewController = [[RootViewController alloc] initWithNibName:nil bundle:nil];
viewController.wantsFullScreenLayout = YES;

EAGLView *glView = [[EAGLView alloc] initWithFrame:[window bounds]];

[director setOpenGLView:glView];

if( ! [director enableRetinaDisplay:YES] )
    CCLOG(@"Retina Display Not supported");

[director setDeviceOrientation:kCCDeviceOrientationLandscapeRight];

[viewController setView:glView];
[window addSubview: viewController.view];
[window makeKeyAndVisible];

[CCTexture2D setDefaultAlphaPixelFormat:kCCTexture2DPixelFormat_RGBA8888];


[[CCDirector sharedDirector] runWithScene: [HelloWorldLayer node]];

【问题讨论】:

  • 想做什么?说清楚。
  • 我正在使用精灵并通过改变它们的位置来移动这些精灵。检测精灵的 pixelPerfect 碰撞。如果检测到碰撞,则结束游戏场景。然后在重播时,我再次开始新的游戏场景。这发生在我的游戏中。对于几次重播,游戏进行得很顺利。但是当我重玩游戏一段时间后,游戏画面开始闪烁。精灵似乎不动。但是游戏结束了,碰撞被检测到但什么都看不到。只是屏幕开始闪烁。这是我的问题。
  • 奇怪的行为。请发布您的重启代码
  • @Morion - 我已经更新了这个问题。请看一看。
  • 为什么不 [[CCDirector sharedDirector] replaceScene:[HelloWorldLayer node]]; ?

标签: iphone ios cocos2d-iphone


【解决方案1】:

我不断重复我自己的建议,所以我把它放在引号里:

如果您在 Cocoa 触控应用中使用 cocos2d,请始终不要删除并重新创建 OpenGL 视图。创建一次,并保留它。也不要完全关闭 cocos2d。只调用 stopAnimation 和 startAnimation。如果您的内存非常低,请在停止 cocos2d 并返回应用程序的 Cocoa touch 部分之前将当前 cocos2d 场景替换为空场景。

不遵循此建议的开发人员会不断遇到各种问题。可能是因为 cocos2d 没有经过很好的测试,在各种条件下反复关闭和​​重启循环。

【讨论】:

  • 同意,让它在后台运行。仅重置您的游戏状态,以便您的所有游戏对象返回其原始位置..
  • @LearnCocos2D,@jake_hetfield - 你好。你能告诉我,如果我想一次又一次地重复使用同一个游戏场景,那么我只需要做[[CCDirector sharedDirector] stopAnimation]; ,然后当我需要再次重启游戏场景时,我必须在应用程序中做[[CCDirector sharedDirector] startAnimation];代表。我想我错过了一些东西。你能帮我解决这个问题吗?
  • 是的,就是这样。您可能还想暂时隐藏 cocos2d gl 视图,因为它是从 UIView 派生的,它应该有一个 hidden 属性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多