Cocos2D CCScene черный экран, ничего не происходит? - PullRequest
3 голосов
/ 02 апреля 2012

Последние 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)

Мой код

У меня есть класс 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]];
}

Тогда у меня есть базовый метод CCScene в моем классе CCLayer:

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

Большая часть этого кода также копируется непосредственно из шаблонных проектов. Также у меня есть делегаты, заявленные в .h.

Консольный выход

Это моя тестовая консоль на моем iPhone 4S 5.0.1:

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. Я показываю UIViewController, где находится CCGLView, выполняя [self addSubview:]; если это имеет какое-то значение
  3. Я успешно импортировал Cocos2D до такой степени, что у меня нет красных файлов, предупреждений, ошибок, устаревших API и т. Д.
  4. Мои изображения были изменены, поэтому в нем есть суффиксы, на которые я изменил CCFileUtils в коде. Так оно и есть: @ 2x, -72 и @ 2x ~ ipad
  5. Я также проверил конструктор интерфейса на наличие каких-то странных вещей, которых нет

Если кто-нибудь знает, что происходит, пожалуйста, дайте мне знать !!!

Спасибо!

Ответы [ 2 ]

2 голосов
/ 02 апреля 2012

Я повторяюсь, но увы:

Если вам нужно обновить cocos2d в существующем проекте, самое важное - удалить все файлы cocos2d из проекта Xcode и Finder. Затем переместите новую версию cocos2d на место и заново добавьте ее.

В противном случае у вас могут остаться старые файлы cocos2d в вашем проекте или пропущенные новые файлы.

Если экран остается черным, это может указывать на проблему с шейдерами. В новой версии cocos2d все шейдеры представлены в виде строк в заголовочных файлах (.h). Если вы не добавили их, они не будут работать. Не уверен, что это даст вам черный экран или вылетит.

Наконец, поскольку Cocos2D 2.0 использует OpenGL ES 2.0, вам придется переписать весь пользовательский код рисования OpenGL, который есть в вашем проекте.

Другими вещами, которые вы должны проверить, является то, что glView не ноль, и, возможно, установите точку останова в методе обновления (посещения / рисования) CCDirector, чтобы проверить, действительно ли он посещает все узлы и правильно их рисует.

1 голос
/ 08 мая 2012

Хотя все @ LearnCocos2D было правдой. Для меня правильным решением было объявить IBOutlet CCGLView в .h и подключить его через Interface Builder.

Я думаю, что может возникнуть проблема, если вы по каким-то странным причинам используете старые проекты, а затем обновляетесь до Cocos2D.

Так что вместо того, чтобы делать это программно, просто сделайте это через Interface Builder.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...