2016-12-11 14 views
0

私はXcode 8.1 Swift 3を使用して、小さなバウンシングゲームを作成しています。最初に接触するスプライトノードは物理的ボディを取るだけです

プレーヤーは、飛び跳ねるボールの周りに壁を作り、このボールが各壁に跳ね返るはずです。

タッチダウンで、私はポイントに移動し、タッチで終了、私は2つのタッチの開始と終了の間に行の共有ノードを作成します。

自分のノードに必要な物理を追加してから、このノードに子を追加しました(下のノードを参照)。

各タッチが開始してタッチが終了すると、「スイフト」はラインノードを描画して自己に接続しますが、最初のノードだけがボールをバウンスします。 最初の行の後のすべての線(壁)はボールに影響しません。

import SpriteKit 

class GameScene: SKScene, SKPhysicsContactDelegate { 
// vars lets and nodes 
let startingBall = SKShapeNode(circleOfRadius: 10) 
let myPath = CGMutablePath() 
let ballCategory : UInt32 = 1 
let wallCategory : UInt32 = 2 

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
    for t in touches { 
     myPath.move(to: t.location(in: self)) 
    } 
} 

override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) { 
    for t in touches { 
     myPath.addLine(to: t.location(in: self)) 
     let wallNode = SKShapeNode(path: myPath) 
     wallNode.lineWidth = 5.0 
     wallNode.fillColor = SKColor.green 
     wallNode.strokeColor = SKColor.green 
     wallNode.physicsBody = SKPhysicsBody(edgeLoopFrom: myPath) 
     wallNode.physicsBody?.categoryBitMask = wallCategory 
     self.addChild(wallNode) 
    } 
} 

override func didMove(to view: SKView) { 

    self.physicsBody = SKPhysicsBody(edgeLoopFrom: self.frame) 
    self.physicsBody?.categoryBitMask = wallCategory 
    startingBall.fillColor = SKColor.red 
    startingBall.position = CGPoint(x: self.frame.width/2, y: self.frame.height/2) 
    startingBall.physicsBody = SKPhysicsBody(circleOfRadius: 10) 
    startingBall.physicsBody?.affectedByGravity = false 
    startingBall.physicsBody?.isDynamic = true 
    startingBall.physicsBody?.restitution = 1.0 
    startingBall.physicsBody?.friction = 0.0 
    startingBall.physicsBody?.linearDamping = 0.0 
    startingBall.physicsBody?.angularDamping = 0.0 
    self.addChild(startingBall) 

    startingBall.physicsBody?.applyImpulse(CGVector(dx: 3.0, dy: 3.0)) 
} 
} 

答えて

0

おかげで、すべて私が修正したことが

実際に変更可能なパスMYPATHタッチの間の線が始まり、タッチエンドラインは形状のみのノードを描画するために定義されています。

は、ここに私のコードGameSceneスウィフトファイルです。 ..各タッチ・シリーズごとに物理的エッジがノードからノードまで作成されている間... 2始点と終点の変数を追加しました 2タッチの開始ノードとノードをタッチしますen D 3- iは開始ノードと終了ノード

1-

var startPoint : CGPoint = CGPoint.zero 
var endPoint : CGPoint = CGPoint.zero 

2-点から点への物理ボディを設定..

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
    for t in touches { 
     startPoint = t.location(in: self) 
     myPath.move(to: t.location(in: self)) 
    } 
} 

     endPoint = t.location(in: self) 

3- ..

 wallNode.physicsBody = SKPhysicsBody(edgeFrom: startPoint, to: endPoint) 

スキューバでshow physicsをtrueに設定できるようにするには

skview.showsPhysics = true 

ありがとう

関連する問題