我一直在开发游戏并用花栗鼠实现物理东西。cocos2d 部分一切正常,直到与花栗鼠集成。一点背景:
游戏是一个有积木的游戏。级别在属性列表中定义,其中位置、块的大小、重力等都是为要在级别中显示的每个块定义的。
问题在于出现的块。我的 BlockLayer 类有一个方法,它是我游戏主场景的一部分。创建图层后,将读取属性列表,并创建所有块。调用以下方法来创建块:
- (void)createBlock:(Block*)block withAssets:(NSBundle*)assets { 精灵*精灵; 开关(block.blockColor) { 案例 kBlockColourGreen: sprite = [Sprite spriteWithFile:[assets pathForResource:@"green" ofType:@"png" inDirectory:@"Blocks"]]; 休息; 案例 kBlockColourOrange: sprite = [Sprite spriteWithFile:[assets pathForResource:@"orange" ofType:@"png" inDirectory:@"Blocks"]]; 休息; 案例 kBlockColorRed: sprite = [Sprite spriteWithFile:[assets pathForResource:@"red" ofType:@"png" inDirectory:@"Blocks"]]; 休息; 案例 kBlockColourBlue: sprite = [Sprite spriteWithFile:[assets pathForResource:@"blue" ofType:@"png" inDirectory:@"Blocks"]]; 休息; } sprite.position = block.bounds.origin; [自我添加孩子:精灵]; 如果(block.blockColour == kBlockColourGreen || block.blockColour == kBlockColourRed) 空间->重力 = cpvmult(cpv(0, 10), 1000); cpVect 顶点[] = { 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); 块体->v = cpvzero; cpSpaceAddBody(空间,块体); cpShape* blockShape = cpPolyShapeNew(blockBody, 4, verts, cpvzero); 方块形状->e = 0.9f; 方块形状->u = 0.9f; 方块形状->数据=精灵; cpSpaceAddShape(空间,块形状); }
使用上面的代码,精灵永远不会出现。但是,如果我注释掉“cpSpaceAddBody(space, blockBody);” 线,精灵出现。
块的位置和大小存储在 Block 类实例的“bounds”属性中,它是一个 CGRect。
不确定它是否重要,但应用程序的方向是横向左侧,所有坐标都基于该方向。
任何帮助将不胜感激。