删除和添加物理节点的子节点

时间:2014-07-23 16:51:23

标签: objective-c cocos2d-iphone game-physics children spritebuilder

我正在编写一个Cocos2d V3,花栗鼠游戏,它涉及加载ccbfile - 一个节点 - 并初始化它的类,称为redLight。然后我将具有一定数量子节点的ccbfile添加到一个总体级别节点,创建一个redlight数组,然后将它们作为自己的子节点删除,并将它们添加为总体级别节点的子节点。

当我删除一个节点并将其添加到物理体内的另一个父节点时,其物理节点的位置不会被转换

我需要这样做才能让redLight实例知道它的子节点,但是将它们添加到它的父节点,这样任何未来的位置计算都不需要涉及转换子节点在其父节点中的位置(redLight)到它在总体水平节点中的位置。

我面临的问题是,当我执行以下代码时,在调试绘制下,灯光的位置会转换为总体水平节点,但物理实体却不会。该角色应该与物理实体碰撞然后执行动作,但由于物理实体不会改变它们的位置,所以没有任何有用的事情发生。 这是我的代码: for(int i = 0; i< [redLights count]; i ++){

    lightSource *switchLight = [redLights objectAtIndex:i];
    CGPoint diffPos = ccpAdd(switchLight.position, self.position);
    [self removeChild:switchLight cleanup:NO];
    switchLight.physicsBody = nil;
    switchLight.position = diffPos;
//switchLight.physicsBody.absolutePosition = switchLight.position;
    switchLight.physicsBody = [CCPhysicsBody bodyWithCircleOfRadius:[switchLight          radius] andCenter:switchLight.position];
    switchLight.physicsBody.type = CCPhysicsBodyTypeStatic;
    [[[gameData sharedData].GamePlayNode level] addChild:switchLight];

    switchLight.physicsBody.collisionType = @"redLight";
//switchLight.physicsBody.absolutePosition = switchLight.position;
      }

我很感激你的帮助。

With debug draw

当然,接近发布日期,我将完全更新图形并使用更多交互性使UX更加卓越,但现在,我正专注于核心游戏玩法 This is without debug draw.

1 个答案:

答案 0 :(得分:0)

Cocos2D 3.x中物理实体的CCNodes变换与CCPhysicsNode相对于父节点(https://github.com/cocos2d/cocos2d-iphone/issues/570)无关。这意味着没有手动设置物理对象绝对位置的真正替代方法。将CCNodes与物理学一起移动的另一个选择是使用物理关节,但这似乎不是解决这个问题的正确方法。