Iphone 在使用SpaceManager时,如何使一个静态精灵成为cocos2D中另一个精灵的子精灵

Iphone 在使用SpaceManager时,如何使一个静态精灵成为cocos2D中另一个精灵的子精灵,iphone,cocos2d-iphone,chipmunk,Iphone,Cocos2d Iphone,Chipmunk,我有两个静态(静态)SpaceManager精灵。一个是另一个的孩子——我的意思是,一种方式建立了另一种方式,但尽管孩子的图像显示在正确的位置,但孩子似乎不存在于花栗鼠物理引擎中,正如我所预期的那样。在我的例子中,我有一个背板(矩形精灵)和一个环(圆形精灵)。因为我可能想移动篮板,所以我想把篮圈固定到篮板上,这样篮圈就会自动沿着篮板向右移动 在这里,我们看到一个旋转篮板与附加箍。它在屏幕上看起来不错,但其他物体只会从篮板上弹起,但会直接穿过篮筐(这个术语的含义不好)。在物理引擎中,我的孩子精灵似

我有两个静态(静态)SpaceManager精灵。一个是另一个的孩子——我的意思是,一种方式建立了另一种方式,但尽管孩子的图像显示在正确的位置,但孩子似乎不存在于花栗鼠物理引擎中,正如我所预期的那样。在我的例子中,我有一个背板(矩形精灵)和一个环(圆形精灵)。因为我可能想移动篮板,所以我想把篮圈固定到篮板上,这样篮圈就会自动沿着篮板向右移动

在这里,我们看到一个旋转篮板与附加箍。它在屏幕上看起来不错,但其他物体只会从篮板上弹起,但会直接穿过篮筐(这个术语的含义不好)。在物理引擎中,我的孩子精灵似乎不存在什么

  // Add Backboard
  cpShape *shapeRect = [smgr addRectAt:cpvWinCenter mass:STATIC_MASS width:200 height:10 rotation:0.0f ];// We're upgrading this 
  cpCCSprite * cccrsRect = [cpCCSprite spriteWithShape:shapeRect file:@"rect_200x10.png"];
  [self addChild:cccrsRect];

  // Spin the static backboard: http://stackoverflow.com/questions/2691589/how-do-you-make-a-sprite-rotate-in-cocos2d-while-using-spacemanager
  // Make static object update moves in chipmunk
  // Since Backboard is static, and since we're going to move it, it needs to know about spacemanager so its position gets updated inside chipmunk.
  // Setting this would make the smgr recalculate all static shapes positions every step
  //    cccrsRect.integrationDt = smgr.constantDt; 
  //    cccrsRect.spaceManager = smgr;
  // Alternative method: smgr.rehashStaticEveryStep = YES;
  smgr.rehashStaticEveryStep = YES;

  // Spin the backboard
  [cccrsRect runAction:[CCRepeatForever actionWithAction:
                         [CCSequence actions:
                          [CCRotateTo actionWithDuration:2 angle:180],
                          [CCRotateTo actionWithDuration:2 angle:360],
                          nil]

                         ]];


  // Add the hoop
  cpShape *shapeHoop = [smgr addCircleAt:ccp(100,-45) mass:STATIC_MASS radius: 50 ];
  cpCCSprite * cccrsHoop = [cpCCSprite spriteWithShape:shapeHoop file:@"hoop_100x100.png"];
  [cccrsRect addChild:cccrsHoop];
上面的代码有点混乱。篮圈的图像显示在棋盘的旁边,这就是我想要的,如果我检测到碰撞,碰撞只发生在屏幕的左下角。奇怪的是,即使我检测到碰撞,我的物体实际上似乎并没有碰撞,它只是通过它而不是反弹


注意:SpaceManager是一个用于使用cocos2D iphone的工具包,对此的简单回答是它实际上不可能。花栗鼠喜欢所有东西都在世界坐标系中,当你开始在cocos2d中创建父子关系时,你正在设置坐标系的严重不匹配

然而。。。我确实试图解决这个问题,但没有取得多大成功(我相信问题在于旋转),看看SpaceManager.m中的函数“eachShapeAsChildren”。如果将SpaceManager的iterateFunc属性设置为指向此函数,则可以看到发生了什么


在某个时刻,我可能会再次尝试;事实上,我已经感到更有灵感了。

问题是,在物理引擎中,亲子关系没有意义。您可以将多个形状附加到同一个实体上,这样当您移动一个实体时,它会移动多个形状。

标记注意:这可能有一个“spacemanager”标记