2016-03-30 4 views
0

単にdidSimulatePhysics()でコーディングして、サメが画面の最後に到達したとき反対方向に進むようにします。しかし、私は私はそれを使用しようとすると、スウィフトは、サメを見つけるために取得することはできません 'didSimulatePhysics()'別のクラスのオブジェクトを参照

GameElementsClass:

import SpriteKit 

extension GameScene { 

    func createSharkAtPosition (position:CGPoint, ofType type:SharkType) -> SharkNode { 

     let node = SharkNode() 
     let position = CGPoint(x: position.x * scaleFactor, y: position.y) 
     node.position = position 
     node.name = "SHARKNODE" 
     node.sharkType = type 
     var sprite:SKSpriteNode 


     sprite = SKSpriteNode(imageNamed: "shark1") 

     node.addChild(sprite) 

     node.physicsBody = SKPhysicsBody(rectangleOfSize: sprite.size) 
     node.physicsBody?.dynamic = true 
     node.physicsBody?.affectedByGravity = false 
     node.physicsBody?.velocity.dx = CGFloat(-60) 

     node.physicsBody?.categoryBitMask = CollisionBitMask.Shark 
     node.physicsBody?.collisionBitMask = 0 


     return node 
    } 
} 

GameSceneClass:

func sharkMaker() { 
    let randomXPos = arc4random_uniform(170) + 10 
    let yPosition = CGRectGetMidY(self.frame) + 200 * CGFloat(counter) 
    counter += 1 
    let shark = createSharkAtPosition(CGPoint(x: CGFloat(randomXPos), y: yPosition - 180), ofType: SharkType.normalShark) 
    foreground.addChild(shark) 

} 


override func didSimulatePhysics() { 

    if node.position.x < -10 { 
     node.xScale = -1 
     node.physicsBody?.velocity.dx = CGFloat(50) 
    }else if (node.position.x > self.size.width + 10) { 
     node.xScale = 1 
     node.physicsBody?.velocity.dx = CGFloat(-50) 
    } 
+0

あなたのゲームからあなたのサメを作りましょう。 – Max

+0

didSimulatePhysics()の下にコードを追加します。しかし、私はそれを働かせるように思わない 'if player.position.x <-10 { shark.xScale = shark.xScale * -shark.physicsBody?.velocity.dx = CGFloat(60) } else if (player.position.x> self.size.width + 10){ shark.xScale = shark.xScale shark.physicsBody?.velocity.dx = CGFloat(-60) } ' – rkoi95

+1

あなたの質問を編集する必要があります](http://stackoverflow.com/posts/36320205/edit)。今は不明です。私たちはあなたがしようとしていることをあいまいに説明しています。あなたは[MCVE](http://stackoverflow.com/help/mcve)を作成していません。 [オブジェクト指向プログラミング](http://importblogkit.com/2015/04/programming-objectively/)について少し学ぶことは、長い道のりになります。 – nhgrif

答えて

0

shark変数はsharkMakerにローカルです。あなたのコードがコンパイルされないと思いますか?いずれかのプロパティを使用して、サメを保存するか、それをshark.name="Sharky" and then useという名前で、あなたの階層のどこかで見つけるために、shark = childNodeByName( "Sharky") `としましょう。

+0

もう一度did​​SimulatePhysics()を編集しました。この場合、 シャーク=ノード。私は、 'GameElementsClass'の外でノードを使用し、それを 'didSimulatePhysics'で使用できるようにしたいと考えています。 'node.name = "Sharky"を設定してから' GameElementsClass 'で使用すると動作しないようですが、何も起こりません。 他の提案はありますか? – rkoi95

+0

すでに述べたように、私たちはあなたにこれをもっと導くコードはありません... –

関連する問題