2017-06-12 74 views
1

我目前正在開發一個使用SpriteKit的IOS遊戲。SKShapeNode更新觸摸物理身體

我有一個SKShapeNode的背景。基本上這個形狀的路徑是一條具有一些曲線的bezierPath。玩家可以使用touchBegan或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]]; 
} 

在更新背景的路徑時,其他一些SKNode可以在我的背景中輸入。

假設我們在y0(原始垂直位置)上放置了一些表格(SKNodes)。當將表格的物理更新爲另一個垂直位置(例如y0 + deltaY)時,這些框(受重力影響)落在屏幕的底部。

我如何避免這種情況?我想更新桌子的物理特性,但我希望箱子保持在上面。

Short video of the current issue

感謝,

+1

實際上有什麼行爲?請更好地描述一個問題,例如。添加一些圖片,動畫...很抱歉,但問題不清楚,從提供的代碼,它不能說是什麼問題。我最好的猜測是,你碰撞位掩碼設置有問題... – Whirlwind

+0

我編輯了我的文章。不知道我很清楚.. @Whirlwind –

+0

好吧,現在它有點清晰。更新物理機構總是一件事情。當您重新創建邊界時,您是否正確設置了蒙版? – Whirlwind

回答

0

在你gamescene:

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

Video results of implementation

gist of the whole gamescene

物理體和像.moveTo.position這樣的東西混合不好。每次嘗試混合物體時,您都必須與物理系統對抗。因此,我上面創建的功能:)

+1

好的,謝謝你的時間,我會盡快試一試! –

+0

@Johnsmith爲你解答了這個問題嗎?如果不讓我知道,我可以嘗試更新它。 – Fluidity