我一直在做一個遊戲,並與花栗鼠一起實現物理的東西。在花栗鼠的整合之前,所有的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