Cocos2D CCScene 黑屏,啥都没有?

Posted

技术标签:

【中文标题】Cocos2D CCScene 黑屏,啥都没有?【英文标题】:Cocos2D CCScene black screen, nothing happening?Cocos2D CCScene 黑屏,什么都没有? 【发布时间】:2012-04-02 05:22:35 【问题描述】:

过去 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 中声明的代表。

控制台输出

这是我在 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

其他几点

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

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

谢谢!

【问题讨论】:

【参考方案1】:

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

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

否则你的项目中可能仍然有旧的 cocos2d 文件,或者缺少新添加的文件。

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

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

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

【讨论】:

好的,我必须重新添加并重新检查每个文件至少 3 次。没有错误。我直接从模板项目的方式复制它。头文件搜索路径是正确的,一切都是2.0rc0a版本。我已经清理了它等等......没有警告或错误。没有任何东西被弃用。我的 CCGLView 不是零,我的主管也不是。我的 CCLayer 中的 init 方法也被调用并且没有运气。我什至尝试将 CCGLView 放入我可以清楚地看到的 UIView 中,没有运气,只是一个空白的 UIView。我所有的着色器都在那里,没有红色文件。而且我没有任何已弃用的 OpenGL 绘图代码。 ??【参考方案2】:

尽管@LearnCocos2D 的一切都是真的。对我来说真正的解决方法是在 .h 中声明一个 IBOutlet CCGLView 并通过 Interface Builder 连接它。

我认为如果您使用旧项目然后出于某种奇怪的原因升级到 Cocos2D 可能会出现问题。

因此,与其以编程方式进行,不如通过 Interface Builder 进行。

【讨论】:

以上是关于Cocos2D CCScene 黑屏,啥都没有?的主要内容,如果未能解决你的问题,请参考以下文章

新的视图控制器出现然后消失在 CCScene 后面

错误更改 CCScene

Debian安装完成后,啥都不显示,似乎黑屏

使用VNC远程连接Win7系统桌面,显示黑屏,啥都看不到

Debian安装完成后,啥都不显示,似乎黑屏

cocos2d如何预加载资源?