スプライト接触検出が迅速に機能しない

f_qi

4色を均等に分割した円を作成しました。各色はノードです。次に、画面の上部から画面の中央に向かって飛んでいるボールである別のノードがあります。ボールが円に接触すると、1ポイントを獲得します。私が今直面している問題は、接触検出が機能していないことです。ここにコードがあります。

また、各色との衝突を検出するために、FourColorSquareの各ノードに個別の物理ボディをセットアップするのが良い方法を知りたいですか?

// move groups outside of class, so that other game scene can use it

let ballGroup:UInt32 = 1 let nodeGroup:UInt32 = 2

クラスFourColorCircle:SKShapeNode {

override init() {
    super.init()
    self.createCircle()
}

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
}

func createCircle () {
    let center = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame))
    // node1
    let node1bezierPath = UIBezierPath()
    node1bezierPath.addArcWithCenter(center, radius: 100, startAngle: 0.78, endAngle: 2.35, clockwise: true)
    node1bezierPath.addLineToPoint(center)

    let node1 = SKShapeNode(path: node1bezierPath.CGPath)
    node1.strokeColor = SKColor.redColor()
    node1.fillColor = SKColor.redColor()
    node1.physicsBody?.categoryBitMask = nodeGroup
    node1.physicsBody?.collisionBitMask = ballGroup
    node1.physicsBody?.contactTestBitMask = ballGroup
    self.addChild(node1)
    // node2
    let node2bezierPath = UIBezierPath()
    node2bezierPath.addArcWithCenter(center, radius: 100, startAngle: 2.35, endAngle: 3.92, clockwise: true)
    node2bezierPath.addLineToPoint(center)

    let node2 = SKShapeNode(path: node2bezierPath.CGPath)
    node2.strokeColor = SKColor.blueColor()
    node2.fillColor = SKColor.blueColor()
    node2.physicsBody?.categoryBitMask = nodeGroup
    node2.physicsBody?.collisionBitMask = ballGroup
    node2.physicsBody?.contactTestBitMask = ballGroup
    self.addChild(node2)
    // node3
    let node3bezierPath = UIBezierPath()
    node3bezierPath.addArcWithCenter(center, radius: 100, startAngle: 3.92, endAngle: 5.48, clockwise: true)
    node3bezierPath.addLineToPoint(center)

    let node3 = SKShapeNode(path: node3bezierPath.CGPath)
    node3.strokeColor = SKColor.greenColor()
    node3.fillColor = SKColor.greenColor()
    node3.physicsBody?.categoryBitMask = nodeGroup
    node3.physicsBody?.collisionBitMask = ballGroup
    node3.physicsBody?.contactTestBitMask = ballGroup
    self.addChild(node3)
    // node4
    let node4bezierPath = UIBezierPath()
    node4bezierPath.addArcWithCenter(center, radius: 100, startAngle: 5.48, endAngle: 0.78, clockwise: true)
    node4bezierPath.addLineToPoint(center)

    let node4 = SKShapeNode(path: node4bezierPath.CGPath)
    node4.strokeColor = SKColor.yellowColor()
    node4.fillColor = SKColor.yellowColor()
    node4.physicsBody?.categoryBitMask = nodeGroup
    node4.physicsBody?.collisionBitMask = ballGroup
    node4.physicsBody?.contactTestBitMask = ballGroup
    self.addChild(node4)

}

func rotate(angle : CGFloat, animated : Bool) {
    var rotateAction : SKAction!

    if animated {
        rotateAction = SKAction.rotateByAngle(angle, duration: 0.6)
    }
    else {
        rotateAction = SKAction.rotateByAngle(angle, duration: 0)
    }

    self.runAction(rotateAction)
}

}

class GameScene: SKScene, SKPhysicsContactDelegate {

var ball = SKShapeNode(circleOfRadius: 10)
var ballColor = ["red", "blue", "green", "yellow"]
let circle = FourColorCircle()

override func didMoveToView(view: SKView) {

    self.physicsWorld.contactDelegate = self


    ball.physicsBody?.dynamic = true
    ball.physicsBody?.categoryBitMask = ballGroup
    ball.physicsBody?.collisionBitMask = nodeGroup
    ball.physicsBody?.contactTestBitMask = nodeGroup

    circle.physicsBody?.categoryBitMask = nodeGroup
    circle.physicsBody?.collisionBitMask = ballGroup
    circle.physicsBody?.contactTestBitMask = ballGroup


    backgroundColor = SKColor.whiteColor()
    circle.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame))
    self.addChild(circle)

    self.addChild(ball)
    ball.position = CGPointMake(150, 0)
    println("Initial Ball Pos:   \(ball.position)")

}

override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {

    rotateCenterCircle()

    setBallPosition()

    setRandomColor()

    ballMove()

    // test ball position

    println("--------------")

    println("Ball Pos:   \(ball.position)")

    println("Circle pos: \(circle.position)")

    println("Midpoint:   \(CGPoint(x:CGRectGetMidX(self.frame), y:CGRectGetMidY(self.frame) + self.frame.size.width))")

    println("--------------")

    // super.touchesBegan(touches as Set<NSObject> , withEvent:event)

}



override func update(currentTime: CFTimeInterval) {
    /* Called before each frame is rendered */
}

func rotateCenterCircle() {

    circle.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame))
    circle.rotate(-3.14/2, animated: true)

}

func ballMove() {
    let ballMovement = SKAction.moveTo(CGPoint(x: CGRectGetMidX(self.frame), y: CGRectGetMidY(self.frame)), duration: 3)
    ball.runAction(ballMovement)
}

func setRandomColor() {
    ball.strokeColor = SKColor.whiteColor()
    ball.zPosition = 10


    let ballColorIndex = Int(arc4random_uniform(UInt32(ballColor.count)))
    switch(ballColorIndex) {
    case 0:
        ball.fillColor = SKColor.redColor()
    case 1:
        ball.fillColor = SKColor.blueColor()
    case 2:
        ball.fillColor = SKColor.greenColor()
    case 3:
        ball.fillColor = SKColor.yellowColor()
    default:
        println("Unexpected random index value ", ballColorIndex)
    }
}

func setBallPosition() {

    ball.position = CGPoint(x:CGRectGetMidX(self.frame), y:CGRectGetMidY(self.frame) + (self.frame.size.width / 2))

    println("ball position = \(ball.position)")
}

func didBeginContact(contact: SKPhysicsContact) {

    if contact.bodyA.categoryBitMask == nodeGroup || contact.bodyB.categoryBitMask == nodeGroup {

        println("contact")

    }

}

}

したがって、2つのスプライトが互いに接触しても、コンソールにログは印刷されません。

サンゴニー

ノードの物理ボディのプロパティを設定する前に、まずそれを作成する必要があります。円や長方形などのボリュームベースのボディと、パスから作成されたエッジベースの物理ボディがあります。

現在ボールを操作していることを確認すると、init(circleOfRadius:)またはなどのボリュームベースのボディを使用しますinit(circleOfRadius:center:)先に進む前に、SKPhysicsBodyクラスリファレンスをよく読んでおくことをお勧めします

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Pygameスプライト-衝突検出が機能しない

分類Dev

スワイプ検出とタッチリスナーがフラグメント内で機能しない

分類Dev

iOSスプライトの接触検出

分類Dev

スプライトキットが接触を検出

分類Dev

TTTAttributedLabelリンク検出がiOS8で迅速に機能しない

分類Dev

サイプレスルート機能がネットワーク要求を検出しない

分類Dev

Jquery検証プラグインがストライプJavaScriptで機能しない

分類Dev

ブートストラップスタイルを選択して検索が機能しない

分類Dev

ブートストラップパネルの見出しのスタイリングが機能しない

分類Dev

iOSスプライトキットbodyWithBodiesが機能しない

分類Dev

ChromiumCast機能がChromecastデバイスを検出しない

分類Dev

迅速なエスケープバックスラッシュが期待どおりに機能しない

分類Dev

プライムフェイスのBean検証 (JSR 303) が機能しない

分類Dev

GestureRecognizerが動的に機能しない/追加のクラスで迅速に機能しない

分類Dev

pygameスプライトで衝突が機能しない

分類Dev

Divストライプ内のDivが機能しない

分類Dev

行ストライプが角度* ngForで機能しない

分類Dev

行ストライプが角度* ngForで機能しない

分類Dev

Googleドライブスクリプトが機能しない、

分類Dev

cssスプライトの背景-位置が機能しない

分類Dev

iTween.FadeToがNGUIスプライトで機能しない

分類Dev

CSSスプライトが機能しない

分類Dev

ブートストラップ3JQuery検証が機能しない

分類Dev

スプライス機能が機能しない、Actionscript 2

分類Dev

ブートストラップ3プルライトが機能しない

分類Dev

ブートストラッププルライトが機能しない

分類Dev

UIViewのCollectionViewセルインスタンス(デリゲートの外部)が迅速に機能しない5

分類Dev

$ .when()。done()内で呼び出されたときに、ブートストラップdatepickerbeforeShowDayが機能しない

分類Dev

startMonitoringSignificantLocationChangesが迅速に機能しない

Related 関連記事

  1. 1

    Pygameスプライト-衝突検出が機能しない

  2. 2

    スワイプ検出とタッチリスナーがフラグメント内で機能しない

  3. 3

    iOSスプライトの接触検出

  4. 4

    スプライトキットが接触を検出

  5. 5

    TTTAttributedLabelリンク検出がiOS8で迅速に機能しない

  6. 6

    サイプレスルート機能がネットワーク要求を検出しない

  7. 7

    Jquery検証プラグインがストライプJavaScriptで機能しない

  8. 8

    ブートストラップスタイルを選択して検索が機能しない

  9. 9

    ブートストラップパネルの見出しのスタイリングが機能しない

  10. 10

    iOSスプライトキットbodyWithBodiesが機能しない

  11. 11

    ChromiumCast機能がChromecastデバイスを検出しない

  12. 12

    迅速なエスケープバックスラッシュが期待どおりに機能しない

  13. 13

    プライムフェイスのBean検証 (JSR 303) が機能しない

  14. 14

    GestureRecognizerが動的に機能しない/追加のクラスで迅速に機能しない

  15. 15

    pygameスプライトで衝突が機能しない

  16. 16

    Divストライプ内のDivが機能しない

  17. 17

    行ストライプが角度* ngForで機能しない

  18. 18

    行ストライプが角度* ngForで機能しない

  19. 19

    Googleドライブスクリプトが機能しない、

  20. 20

    cssスプライトの背景-位置が機能しない

  21. 21

    iTween.FadeToがNGUIスプライトで機能しない

  22. 22

    CSSスプライトが機能しない

  23. 23

    ブートストラップ3JQuery検証が機能しない

  24. 24

    スプライス機能が機能しない、Actionscript 2

  25. 25

    ブートストラップ3プルライトが機能しない

  26. 26

    ブートストラッププルライトが機能しない

  27. 27

    UIViewのCollectionViewセルインスタンス(デリゲートの外部)が迅速に機能しない5

  28. 28

    $ .when()。done()内で呼び出されたときに、ブートストラップdatepickerbeforeShowDayが機能しない

  29. 29

    startMonitoringSignificantLocationChangesが迅速に機能しない

ホットタグ

アーカイブ