2015-10-07 26 views
1

我正在用Swift Sprite套件開發遊戲。但是我遇到了一個問題,就像你在圖片中看到的,我有許多相同大小的物理塊對齊。當我把這個塊滑到別人的上面,有時他會卡住或者跳得很小。 似乎有時身體重疊。 任何人都知道我可以如何解決它有一個連續的,沒有精密的運動?Sprite Kit - 將身體滑過其他人

一些物理特性:

player.physicsBody?.friction  = 0.0 
player.physicsBody?.restitution = 0.00 
player.physicsBody?.linearDamping = 0.1 
player.physicsBody?.angularDamping = 0.0 
player.physicsBody?.allowsRotation = false 
player.physicsBody?.velocity.dx = 0 
player.physicsBody?.velocity.dy = 0 
player.physicsBody?.categoryBitMask = heroCategory 
player.physicsBody?.contactTestBitMask = enemyCategory 
player.physicsBody?.density = 2.3 

enter image description here

回答

3

出現的問題是物理引擎的只是輕微的瑕疵(哎,這是一個模擬,並沒有完全準確的,我碰到的這種事情之前)。我看到你正在阻止玩家的旋轉,所以你可以將方塊player的物理體改變成一個圓圈。這應該是這樣的:

player.physicsBody = SKPhysicsBody(circleOfRadius: 10) 

用適當半徑的player替換10。這應該消除你遇到的顛簸。

+0

我在這一點上有同樣的想法我的播放器的最新版本是一個橢圓形,並提高了很多。但仍然不完美,如果發動機出現問題,這是非常煩人的:( –

+0

@ user2838026啊,好吧,我不知道,現在我想到了,如果你在場景中顯示物理,描述應該顯示一個低分辨率的圓圈(有大約16個頂點),你可以使用一個'CGPath',它會是一個更平滑的圓圈,像'player.physicsBody = SKPhysicsBody(polygonFromPath:CGPathCreateWithEllipseInRect(CGRectMake(0,0, 20,20),nil))'也似乎有一個圓角矩形'CGPath'創建者,如果這不起作用,你可能需要查看地形。 – Gliderman

0

你是如何滑動塊的?

我有同樣的問題,我能解決它滑動我的英雄使用SKAction運行代碼塊,改變英雄的速度或只是簡單地運行SKAction.moveBy。你的SKAction不應該試圖將你的方塊推倒在地。僅在x方向上移動塊的操作。

你也可以通過確保你的groundBody(s)的地面塊不重疊來平滑表面。引入1-2分的差距。或者也許可以用一個單一的物理組合來組合瓷磚。這可能也有幫助。