【问题标题】:Removing and adding children of a physics node移除和添加物理节点的子节点
【发布时间】:2014-07-23 16:51:23
【问题描述】:

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

当我移除一个节点并将其添加到物理体内的另一个父级时,其物理节点的位置不会改变

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

我面临的问题是,当我执行以下代码时,在调试绘制下,灯光的位置被转换为总体级别节点,但物理体没有。角色应该与物理体发生碰撞,然后执行一个动作,但由于物理体不会改变它们的位置,所以不会发生任何有用的事情。 这是我的代码: for (int i = 0; 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;
      }

我将不胜感激。

当然,临近发售日,我会彻底更新画面,让用户体验更出色,互动性更强,但现在,我专注于核心玩法

【问题讨论】:

  • 你需要把相关代码贴出来,否则没人知道你是不是做错了。还要提到使用的 cocos2d 的版本。
  • 谢谢。我以为我有。非常感谢您的提醒

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


【解决方案1】:

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

【讨论】:

  • 嗨,Ben,您回答我的问题真是巧合,因为我在 MGWU NYC,并与 Dion 讨论了这个问题。最后,我没有使用转换,而是实现了另外几个方法,它们采用具有特定名称的所有精灵,并创建一个红灯类。这个新版本的红灯类不是遍历其子代并将其添加到光束数组中,而是遍历由 Gameplay 传递给它的数组,并为每个唯一的精灵名称创建该类的新迭代;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多