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

Objective c 删除和添加物理节点的子节点,objective-c,cocos2d-iphone,game-physics,children,spritebuilder,Objective C,Cocos2d Iphone,Game Physics,Children,Spritebuilder,我正在写一个cocos2dv3,花栗鼠游戏,它包括加载一个CCB文件——一个节点——并初始化它的类,称为redLight。然后,我将具有一定数量子节点的CCB文件添加到一个总体级别节点,创建一个红灯数组,然后将其作为自身的子节点删除,并将其作为总体级别节点的子节点添加 当我删除一个节点并将其添加到物理体中的另一个父节点时,其物理节点的位置不会被变换 我需要这样做,以便使redLight实例知道其子节点,但将它们添加到其父节点,以便将来的任何位置计算都不需要涉及将其父节点(redLight)中的子

我正在写一个cocos2dv3,花栗鼠游戏,它包括加载一个CCB文件——一个节点——并初始化它的类,称为redLight。然后,我将具有一定数量子节点的CCB文件添加到一个总体级别节点,创建一个红灯数组,然后将其作为自身的子节点删除,并将其作为总体级别节点的子节点添加

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

我需要这样做,以便使redLight实例知道其子节点,但将它们添加到其父节点,以便将来的任何位置计算都不需要涉及将其父节点(redLight)中的子节点的位置转换为其在总体级别节点中的位置

我面临的问题是,当我执行下面的代码时,在debug draw下,灯光的位置会转换为总体级别节点,但物理实体不会。角色应该与物理实体碰撞,然后执行一个动作,但是由于物理实体不变换其位置,因此没有发生任何有用的事情。 这是我的密码: 对于(int i=0;i<[红灯计数];i++){

我将非常感谢您的帮助。

当然,在接近发布日期的时候,我会完全更新图形,让用户体验更出色,更具交互性,但现在,我专注于核心游戏
Cocos2D 3.x中带有物理体的
CCNodes
的变换相对于
CCPhysisnode
而不是相对于父节点()。这意味着除了手动设置物理对象的绝对位置之外,没有真正的替代方法。使用物理关节将
CCNodes
与其父节点一起移动的另一个选项是使用物理关节,但这似乎不是解决此问题的正确方法。

您需要发布相关代码,否则没有人可以知道是什么原因你做得有点不正确。还提到了使用的cocos2d版本。谢谢。我想我有。我非常感谢你的提醒。我Ben,你应该回答我的问题是多么巧合啊,因为我在MGWU NYC,并且与Dion讨论了这个问题。最后,我没有使用转换,而是实现了另外一些方法这个新版本的红光类不再遍历其子类并将其添加到光束数组中,而是遍历游戏传递给它的数组,并为每个唯一的精灵名称创建新的类迭代;
    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;
      }