Cocos2D CCScene黑屏,什么都没发生?

时间:2012-04-02 05:22:36

标签: objective-c ios cocos2d-iphone

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

以下是我正在使用的代码,设备,日志等的一些信息......

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)

我的代码

我有一个UIViewController类,它包含CCGLView。然后我有一个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

其他几点

  1. 除了这个视图外,我的应用程序都是UIKit
  2. 我通过[self addSubview:]显示了CCGLView所在的UIViewController;如果这有任何区别
  3. 我已成功导入Cocos2D,我没有红色文件,没有警告,没有错误,没有弃用的API等...
  4. 我的图片已被修改,因此它有后缀我在代码中将CCFileUtils更改为。所以它是:@ 2x,-72和@ 2x~ipad
  5. 我还检查了界面构建器是否有任何奇怪的事情发生,没有
  6. 如果有人知道发生了什么事,请告诉我!!!

    谢谢!

2 个答案:

答案 0 :(得分:2)

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

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

否则,您可能最终仍会在项目中使用旧的cocos2d文件,或者缺少新添加的文件。

如果屏幕保持黑色,则可能表示着色器出现问题。新的cocos2d版本将所有着色器作为标题(.h)文件中的字符串。如果你没有添加它们,它们将无法正常工作。不确定这是否会给你一个黑屏或直接崩溃。

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

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

答案 1 :(得分:1)

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

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

因此,不是通过编程方式进行,而是通过Interface Builder进行。