SKShapeNode在触摸时更新物理主体



我目前正在使用SpriteKit开发IOS游戏。

我有一个背景是SKShapeNode。基本上,这个形状的路径是带有一些曲线的贝塞尔路径。玩家可以使用 touchStarted 或 touchMove 触发器更新此路径。

- (void) touchesMoved:(NSSet*)touches withEvent:(UIEvent*)event{
     CGPoint touchPoint = [[touches anyObject] locationInView:self.view];
     // Create path
     UIBezierPath* newPath = ...
     // Update path
     [self.backgroundShape setPath:newPath.CGPath];
     [self.backgroundShape setPhysicsBody:[SKPhysicsBody bodyWithEdgeLoopFromPath:newPath.CGPath]];
} 

在更新背景路径的同时,其他一些SKNodes可以进入我的背景。

假设我们在y0(原始垂直位置(处有一张桌子的地板,上面有一些盒子(SKNodes(。当将表格的物理特性更新到另一个垂直位置(例如 y0 + deltaY(时,框(受重力影响(会在屏幕底部下降。

我怎样才能防止这种情况?我想更新桌子的物理特性,但我希望盒子留在上面。

当前问题的短视频

谢谢

在你的游戏场景中:

func keepBallOnTable() {
  if ball.frame.minY < table.frame.maxY {
    ball.position.y = table.frame.maxY + (ball.size.height / 2) + 1
  }
}
override func didFinishUpdate() {
  keepBallOnTable()
}

您必须翻译成 objC :P

视频实施结果

整个游戏场景的要点

物理体和像.moveTo.position这样的东西不能很好地混合。每次尝试混合它们时,您都必须与物理系统作斗争。因此,我在上面创建的函数:)

最新更新