2017-11-08 30 views
0

私は、画面のもう一方の側から取得するボール(プレーヤー)があるゲームを作っています。どちらの側でも、私は1点を得るためにボールが触れる必要があるSKSpriteNodeを持っています。ボールが側面のSKSpriteNodeに接触すると、ボールは反対側に到達し、別の点をスコアリングするために他のSKSpriteNodeに触れる必要があります。等々。ゲームが始まると、上端のスプライトノードがアクティブになり、下端のスプライトノードがアクティブになるように、どうすればよいでしょうか?私は毎回ボールが「ポイント」に触れるのスコアに1を加え、「incrementScore」機能を作ったSpriteKitを使用したポイントシステム

:その後、私はボールがにタッチする必要があると私の二つの「ゴール」を持っている

func incrementScore() { 
    score += 1 
    scoreLabel.text = String(score) 
} 

スコア:

func createGoals() { 

    let goalTop = SKSpriteNode(imageNamed: "Goal") 
    goalTop.name = "Goal" 
    goalTop.anchorPoint = CGPoint(x: 0.5, y: 0.5) 
    goalTop.position = CGPoint(x: 0, y: 465) 
    goalTop.physicsBody = SKPhysicsBody(rectangleOf: goalTop.size) 
    goalTop.physicsBody?.affectedByGravity = false 
    goalTop.physicsBody?.isDynamic = false 
    goalTop.zPosition = 2 
    self.addChild(goalTop) 

    let goalBottom = SKSpriteNode(imageNamed: "Goal") 
    goalBottom.name = "Goal" 
    goalBottom.anchorPoint = CGPoint(x: 0.5, y: 0.5) 
    goalBottom.position = CGPoint(x: 0, y: -435) 
    goalBottom.physicsBody = SKPhysicsBody(rectangleOf: CGSize(width: 
    goalBottom.size.width - 10, height: goalBottom.size.height - 10)) 
    goalBottom.physicsBody?.affectedByGravity = false 
    goalBottom.physicsBody?.isDynamic = false 
    goalBottom.zPosition = 2 
    self.addChild(goalBottom) 

} 

はまた、私はdidBeginコンタクト機能に開始しました:

func didBegin(_ contact: SKPhysicsContact) { 

    var firstBody = SKPhysicsBody() 
    var secondBody = SKPhysicsBody() 

    if contact.bodyA.node?.name == "Player" { 
     firstBody = contact.bodyA 
     secondBody = contact.bodyB 
    } else { 
     firstBody = contact.bodyB 
     secondBody = contact.bodyA 
    } 

    if firstBody.node?.name == "Player" && secondBody.node?.name == 
    "Point" { 
     incrementScore() 
    } 
} 

答えて

0

はcategoを使用あなたはgoalTopをアクティブにしたい場合は

:ryBitMaskはアクティブボディを有効にする

goalTop.categoryBitMask = category.Goal 
goalBottom.categoryBitMask = 0 

あなたはgoalBottomをアクティブにしたいときは:

goalTop.categoryBitMask = 0 
goalBottom.categoryBitMask = category.Goal 

注:category.Goalはあなたのように使用どんな数であるがカテゴリ

+0

あなたは何を意味するのかよく分かりません。私は、両方の目標にcategoryBitMaskを追加しました。最初からそれをやっていない理由がわからないので、助けが必要なものを理解しやすくなりました。しかし、一方の目標がアクティブでないときにアクティブな目標を持つことになると、私は本当に理解しません。私は既に "struct ColliderType {}"にGoalを追加しています。 "player"がどちらかの "goal"に衝突するとスコアを追加します。それで、その部分は必要なように働いています。 – Flinigan

+0

カテゴリを割り当てることができるのは、オブジェクトをヒットできるようにする場合のみです。categoryBitMaskが0の場合、衝突は発生しません。 – Knight0fDragon

+0

はい、プレイヤーはいつでも両方の目標に常に衝突できるようにします。同時に両方にポイントを追加しないでください。 – Flinigan

関連する問題