objective-c - Cocos2D CCScene 黑屏,没有任何反应?

标签 objective-c ios cocos2d-iphone

过去 3 天我一直在尝试从 Cocos2D 1.1.0-pre->2.0rc0a 升级,但这是迄今为止我在制作应用程序时遇到的最艰巨的任务。所以它在 Cocos2D 1.1 中运行良好,我的图像加载,一切正常,等等......现在在 2.0rc0a 中它只是进入黑屏,但我的所有方法都被调用了!

这里有一些关于我正在使用的代码、设备、日志等的信息......

Xcode 版本

1. Xcode version: 4.3.2

测试设备

2. A) Devices: iPhone 4S - 5.0.1 (doesn't work)
B) iPad 3 - 5.1 (doesn't work)
C) iPhone 5.1 simulator (doesn't work)
D) iPad 5.1 simulator (doesn't work)

我的代码

我有一个包含 CCGLView 的 UIViewController 类。然后我有一个 CCLayer 类,它是实际游戏的一切。 CCLayer 类中的代码很好,因为它适用于 Cocos2D 1.1.0-pre,所以我将发布 UIViewController 类的代码:

- (void)viewDidLoad {
    [super viewDidLoad];

    // Create an CCGLView with a RGB565 color buffer, and a depth buffer of 0-bits
    CCGLView *glView = [CCGLView viewWithFrame:[self.view bounds]
                                   pixelFormat:kEAGLColorFormatRGB565   //kEAGLColorFormatRGBA8
                                   depthFormat:0    //GL_DEPTH_COMPONENT24_OES
                            preserveBackbuffer:NO
                                    sharegroup:nil
                                 multiSampling:NO
                               numberOfSamples:0];
    director_ = (CCDirectorIOS*) [CCDirector sharedDirector];
    director_.wantsFullScreenLayout = YES;
    [director_ setDisplayStats:YES];
    [director_ setAnimationInterval:1.0/60];
    [director_ setView:glView];
    [director_ setDelegate:self];
    [director_ setProjection:kCCDirectorProjection2D];
    [director_ setDepthTest:FALSE];
    if(![director_ enableRetinaDisplay:YES])
        CCLOG(@"Retina Display Not supported");
    [CCTexture2D setDefaultAlphaPixelFormat:kCCTexture2DPixelFormat_RGBA8888];
    [CCFileUtils setiPhoneRetinaDisplaySuffix:@"@2x"];
    [CCFileUtils setiPadSuffix:@"-72"];
    [CCFileUtils setiPadRetinaDisplaySuffix:@"@2x~ipad"];
    [CCTexture2D PVRImagesHavePremultipliedAlpha:YES];
    [director_ pushScene:[CCSceneGame scene]];
}

然后我的 CCLayer 类中有这个基本的 CCScene 方法:

+(CCScene *) scene
{
    CCScene *scene = [CCScene node];
    CCSceneGame *layer = [CCSceneGame node];
    [scene addChild:layer];
    return scene;
}

大部分代码也是直接从模板项目中复制的。我还在 .h 中声明了委托(delegate)。

控制台输出

这是我在 5.0.1 iPhone 4S 上测试的控制台:

2012-03-31 17:14:54.484 App[56089:707] cocos2d: OS version: 5.0.1 (0x05000100)
2012-03-31 17:14:54.485 App[56089:707] cocos2d: GL_VENDOR:   Imagination Technologies
2012-03-31 17:14:54.486 App[56089:707] cocos2d: GL_RENDERER: PowerVR SGX 543
2012-03-31 17:14:54.486 App[56089:707] cocos2d: GL_VERSION:  OpenGL ES 2.0 IMGSGX543-63.14.2
2012-03-31 17:14:54.488 App[56089:707] cocos2d: GL_MAX_TEXTURE_SIZE: 4096
2012-03-31 17:14:54.488 App[56089:707] cocos2d: GL_MAX_TEXTURE_UNITS: 8
2012-03-31 17:14:54.489 App[56089:707] cocos2d: GL_MAX_SAMPLES: 4
2012-03-31 17:14:54.489 App[56089:707] cocos2d: GL supports PVRTC: YES
2012-03-31 17:14:54.490 App[56089:707] cocos2d: GL supports BGRA8888 textures: YES
2012-03-31 17:14:54.490 App[56089:707] cocos2d: GL supports NPOT textures: YES
2012-03-31 17:14:54.491 App[56089:707] cocos2d: GL supports discard_framebuffer: YES
2012-03-31 17:14:54.491 App[56089:707] cocos2d: compiled with Profiling Support: NO
2012-03-31 17:14:54.492 App[56089:707] cocos2d: cocos2d v2.0.0-rc0
2012-03-31 17:14:54.493 App[56089:707] cocos2d: Using Director Type:CCDirectorDisplayLink
2012-03-31 17:14:54.745 App[56089:707] cocos2d: CCTexture2D: Using RGBA888 texture since image has no alpha
2012-03-31 17:14:54.891 App[56089:707] cocos2d: CCTexture2D. Can't create Texture. cgImage is nil
2012-03-31 17:14:54.892 App[56089:707] cocos2d: Couldn't add image:particleTexture.png in CCTextureCache
2012-03-31 17:14:54.999 App[56089:707] cocos2d: animation started with frame interval: 60.00

其他几点

  1. 除了这个 View ,我的应用都是 UIKit
  2. 我通过 [self addSubview:] 向 UIViewController 显示 CCGLView 所在的位置;如果这有什么不同的话
  3. 我已成功导入 Cocos2D,没有红色文件、没有警告、没有错误、没有弃用的 API 等...
  4. 我的图像已被修改,因此它具有我在代码中将 CCFileUtils 更改为的后缀。所以它是:@2x、-72 和@2x~ipad
  5. 我还检查了界面生成器是否有任何奇怪的事情发生,没有

如果有人知道发生了什么,请告诉我!!!

谢谢!

最佳答案

我一直在重复自己,但是唉:

如果您需要更新现有项目中的 cocos2d,最重要的是从 Xcode 项目和 Finder 中删除所有的 cocos2d 文件。然后将新的 cocos2d 版本移动到位,并重新添加它。

否则,您最终可能会在项目中保留旧的 cocos2d 文件,或者丢失新添加的文件。

如果屏幕保持黑色,这可能表示着色器存在问题。新的 cocos2d 版本将所有着色器作为头文件 (.h) 中的字符串。如果您没有添加这些,它们将无法工作。不确定这是否会给您带来黑屏或彻底崩溃。

最后,由于 Cocos2D 2.0 使用 OpenGL ES 2.0,您将不得不重写项目中的所有自定义 OpenGL 绘图代码。

您应该验证的其他事情是 glView 不为零,并且可能在 CCDirector 的更新(访问/绘制)方法中设置断点以检查它是否实际访问所有节点并正确绘制它们。

关于objective-c - Cocos2D CCScene 黑屏,没有任何反应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9971246/

相关文章:

iphone - 当我尝试在我的 iPhone 项目中添加 Twitter 框架工作时,出现此错误 : OBJC_CLASS$_SLRequest. 我该如何解决

objective-c - 向 Minecraft 服务器发送数据包 : Objective c

ios - 过滤 NSFetchedResultsController 以仅获取具有某种关系的对象

ios - 测试是否在 View Controller 方法中调用了 performSegueWithIdentifier

cocos2d-iphone - 更改 CCAnimation 中的延迟

cocos2d-iphone - 为什么在cocos2d中只有60 fps真正平滑?

ios - 在录制视频时将动态文本渲染到 CVPixelBufferRef 上

ios - 为什么将其[__NSCFString objectAtIndex:]:无法识别的选择器发送到实例?

ios - iOS 中的 Kiosk 应用程序我们能否为该应用程序提供标识符以从 URL 方案中使用。

ios - 运行带有 Retina 显示器的模拟器时,场景似乎显示大四倍