Cela fait trois jours que j'essaie de mettre à niveau mon logiciel Cocos2D. 1.1.0-pre->2.0rc0a Cependant, c'est la tâche la plus difficile à laquelle j'ai été confronté dans la création de mon application jusqu'à présent. Donc, à peu près tout fonctionnait bien dans Cocos2D 1.1, mes images se chargeaient, tout fonctionnait, etc... Maintenant, dans 2.0rc0a Il y a juste un écran noir ET pourtant toutes mes méthodes sont appelées !
Voici quelques informations sur le code que j'utilise, les dispositifs, les journaux, etc...
Version de Xcode
1. Xcode version: 4.3.2
Dispositifs testés sur
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)
Mon code
J'ai une classe UIViewController qui contient le CCGLView. J'ai ensuite une classe CCLayer qui contient tout ce qui concerne le jeu proprement dit. Le code de la classe CCLayer est correct car il fonctionne dans Cocos2D 1.1.0-pre. Je vais donc publier le code de la classe 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]];
}
J'ai ensuite cette méthode CCScene de base dans ma classe CCLayer :
+(CCScene *) scene
{
CCScene *scene = [CCScene node];
CCSceneGame *layer = [CCSceneGame node];
[scene addChild:layer];
return scene;
}
La plupart de ce code est également copié directement à partir des projets de modèles. J'ai également déclaré les délégués dans les .h.
Sortie de console
C'est la console que j'ai testée sur mon 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
Quelques autres points
- Mon application est entièrement UIKit, à l'exception de cette vue.
- Je montre au UIViewController où se trouve le CCGLView en faisant [self addSubview :]; si cela fait une différence.
- J'ai importé Cocos2D avec succès au point de n'avoir aucun fichier rouge, aucun avertissement, aucune erreur, aucune API dépréciée, etc...
- Mes images ont été modifiées pour qu'elles aient les suffixes que j'ai changés dans le code de CCFileUtils. C'est donc : @2x, -72, et @2x~ipad
- J'ai aussi vérifié le constructeur d'interface pour voir s'il y a des choses bizarres et il n'y en a pas.
Si quelqu'un a une idée de ce qui se passe, faites-le moi savoir !
Gracias.