2015-12-24 76 views
0

我有一個圓圈向上移動一個線,當該圓到達某個y點時,如何才能讓另一個節點從下面生成?如何在另一個點擊某個y值時生成一個新節點

這裏是我目前有填充圓圈的代碼,但我不能用物理體使用它,因爲它會產生太多的節點和減慢我的應用程序:

func createCirclesOnLine(line: CGFloat) { 
    var currentY : CGFloat = -110 
    let maxY = self.size.width * 15 
    let spacing : CGFloat = 120 
    while currentY < maxY { 
         let circle = SKSpriteNode(imageNamed: "[email protected]") 

      circle.physicsBody?.dynamic = false 

      circle.position = CGPointMake(line, currentY) 


      //circle.physicsBody?.restitution = -900 
      circle.size = CGSizeMake(75, 75) 
        // circle.physicsBody = SKPhysicsBody(rectangleOfSize: circle.size) 
        let up = SKAction.moveByX(0, y: 9000, duration: 90) 


    circle.runAction(up) 

      foregroundNode.addChild(circle) 
     currentY += CGFloat((random() % 400) + 70) 


    } 

將發佈更多的代碼,如果需要

回答

1

有兩種方法可以解決這個問題。一個是簡單地檢查每個圓圈的y位置,看它是否在屏幕上方。你需要在社交圈,以免參考...

class GameScene: SKScene { 
    var circles = Array<SKSpriteNode>() 
    ... 

在你createCirlcesOnLine功能,增加每圈數組作爲創建它。

... 
self.addChild(circle) 
circles.append(circle) 

然後,在你的更新方法,通過列舉的圈子中,看看其中是否有以上屏幕的頂部。

override func update(currentTime: NSTimeInterval) { 
    for circle in circles { 
     if circle.position.y > self.size.height + circle.size.height/2 { 
      //Send circle back to the bottom using the circle's position property 
     } 
    } 
} 

此解決方案將工作,但會導致每個更新週期進行大量不必要的檢查。

第二個更有效的(並且稍微複雜一些)建議是在屏幕頂部的上方添加一個不可見的節點,以延伸屏幕寬度。當圓與它碰撞時,將其移動到屏幕底部。研究實施SKPhysicsContactDelegate協議以及需要發生的工作。如果遇到此解決方案的問題,請針對這些問題發佈單獨的問題。

+0

它的偉大工程,但物理身體還在減緩下來:( –

+0

多少圈,你必須在這一點上數起,但沒有在屏幕上的人?表現在模擬器會比非常不同性能在設備上,特別是如果你有一臺舊機器 –

+0

我有三個圈子,但當我使用你的公式,他們乘以(明顯)如果我在設備上運行它會工作正常嗎?我的Mac是購買七月 –

相關問題