我一直在做一个游戏,并与花栗鼠一起实现物理的东西。在花栗鼠的整合之前,所有的cocos2d部分都很好。一点背景:iphone cocos2d精灵正在消失
游戏是一个块与游戏。级别在属性列表中定义,其中块的位置,块的大小,重力等都是为每个要在该级别中显示的块定义的。
问题在于块出现。我的BlockLayer类有一个方法,这是我游戏主场景的一部分。创建图层后,读取属性列表,并创建所有块。调用以下方法创建块:
- (void)createBlock:(Block*)block withAssets:(NSBundle*)assets { Sprite* sprite; switch(block.blockColour) { case kBlockColourGreen: sprite = [Sprite spriteWithFile:[assets pathForResource:@"green" ofType:@"png" inDirectory:@"Blocks"]]; break; case kBlockColourOrange: sprite = [Sprite spriteWithFile:[assets pathForResource:@"orange" ofType:@"png" inDirectory:@"Blocks"]]; break; case kBlockColourRed: sprite = [Sprite spriteWithFile:[assets pathForResource:@"red" ofType:@"png" inDirectory:@"Blocks"]]; break; case kBlockColourBlue: sprite = [Sprite spriteWithFile:[assets pathForResource:@"blue" ofType:@"png" inDirectory:@"Blocks"]]; break; } sprite.position = block.bounds.origin; [self addChild:sprite]; if(block.blockColour == kBlockColourGreen || block.blockColour == kBlockColourRed) space->gravity = cpvmult(cpv(0, 10), 1000); cpVect verts[] = { cpv(-block.bounds.size.width, -block.bounds.size.height), cpv(-block.bounds.size.width, block.bounds.size.height), cpv(block.bounds.size.width, block.bounds.size.height), cpv(block.bounds.size.width, -block.bounds.size.height) }; cpBody* blockBody = cpBodyNew([block.mass floatValue], INFINITY); blockBody->p = cpv(block.bounds.origin.x, block.bounds.origin.y); blockBody->v = cpvzero; cpSpaceAddBody(space, blockBody); cpShape* blockShape = cpPolyShapeNew(blockBody, 4, verts, cpvzero); blockShape->e = 0.9f; blockShape->u = 0.9f; blockShape->data = sprite; cpSpaceAddShape(space, blockShape); }
使用上面的代码,精灵永远不会显示出来。但是,如果我注释掉“cpSpaceAddBody(space,blockBody);”线,精灵出现。
块的位置和大小存储在Block类的实例的“bounds”属性中,该类是CGRect。
不知道它是否重要,但应用程序的方向是横向左侧,并且所有坐标均基于该方向。
任何帮助将不胜感激。
你为什么要重复'精灵= [雪碧spriteWithFile:资产pathForResource:@ “绿色” ofType:@ “PNG” inDirectory:@ “块”];'这么多的时候,你可以这样做“@”绿色“部分的变量替换?不妨做'createGreenBlock','createRedBlock','createBlueBlock'等等...... – Lukman 2011-03-30 09:14:40