スプライトキット| Swift3 | SKWarpGeometryをノードに適用する

user3482617

私はインターネットの奥深くを検索して、SKSpritenodesにSKWarpGeometryを実装するためのチュートリアルを見つけました。

トランポリンSKSpritenodeとボールSKSpritenodeがあります。

 ballNode = childNode(withName: "ballNode") as? SKSpriteNode
    ballNode?.physicsBody = SKPhysicsBody(circleOfRadius: (ballNode?.frame.size.width)! / 2)
    ballNode?.physicsBody?.isDynamic = true
    ballNode?.physicsBody?.usesPreciseCollisionDetection = true
    ballNode?.zPosition = 3
    ballNode?.physicsBody!.categoryBitMask = PhysicsCategory.ballCategory
    ballNode?.physicsBody!.contactTestBitMask = PhysicsCategory.trampolineCategory
    ballNode?.physicsBody!.collisionBitMask = PhysicsCategory.platformCategory
    ballNode?.physicsBody?.velocity = CGVector(dx: 0.0, dy: 0.0)
    ballNode?.move(toParent: _gameNode)

enumerateChildNodes(withName: "trampoline") {trampolineNode,_ in
    trampoline = trampolineNode as? SKSpriteNode
    trampolineNode.physicsBody = SKPhysicsBody.init(rectangleOf: CGSize(width: (trampoline?.size.width)!, height: (trampoline?.size.height)!))
    trampolineNode.physicsBody?.categoryBitMask = PhysicsCategory.trampolineCategory
    trampolineNode.physicsBody?.contactTestBitMask = PhysicsCategory.ballCategory
    trampolineNode.physicsBody?.collisionBitMask = PhysicsCategory.ballCategory
    trampolineNode.physicsBody?.affectedByGravity = false
    trampolineNode.physicsBody?.isDynamic = false
    trampolineNode.physicsBody?.usesPreciseCollisionDetection = true
    trampolineNode.physicsBody?.restitution = 1
    trampolineNode.move(toParent: _gameNode)

ballNodeがトランポリンに当たったとき。トランポリンノードの上部を内側に曲げたいです。ただし、次のコードを実行すると、トランポリンの画像が消えます。

if collision == PhysicsCategory.ballCategory | PhysicsCategory.trampolineCategory {
        let src = [float2(0.0), float2(1.0), float2(2.0),
                   float2(3.0), float2(4.0), float2(5.0),
                   float2(6.0), float2(7.0), float2(8.0)]

        let dst = [float2(0.0), float2(0.0), float2(2.0),
                   float2(3.0), float2(1.0), float2(5.0),
                   float2(6.0), float2(7.0), float2(8.0)]

        warpGrid = SKWarpGeometryGrid(columns: 2, rows: 2,
                                      sourcePositions: src,
                                      destinationPositions: dst)
        //
        trampoline?.warpGeometry = warpGrid     <---This line removes the trampoline image, so I could only assume its the way I set up the source and destination points.

        let transform = SKAction.warp(to: warpGrid!, duration: 1)
        let transformAction = SKAction.repeat(transform!, count: 1)
        trampoline?.run(transformAction)            
    }

グリッドノードを間違って設定している可能性がありますが、ガイドとなるチュートリアルがないため、手がかりがありません。SKGeometryを使用した人はいますか?

user3482617

それを解決しました。これが他の人に役立つことを願っています!!!

//Create your SKSpritenodes
ballNode = childNode(withName: "ballNode") as? SKSpriteNode
ballNode?.physicsBody = SKPhysicsBody(circleOfRadius: (ballNode?.frame.size.width)! / 2)
ballNode?.physicsBody?.isDynamic = true
ballNode?.physicsBody?.usesPreciseCollisionDetection = true
ballNode?.zPosition = 3
ballNode?.physicsBody!.categoryBitMask = PhysicsCategory.ballCategory
ballNode?.physicsBody!.contactTestBitMask = PhysicsCategory.trampolineCategory
ballNode?.physicsBody!.collisionBitMask = PhysicsCategory.platformCategory
ballNode?.physicsBody?.velocity = CGVector(dx: 0.0, dy: 0.0)
ballNode?.move(toParent: _gameNode)

enumerateChildNodes(withName: "trampoline") {trampolineNode,_ in
trampoline = trampolineNode as? SKSpriteNode
trampolineNode.physicsBody = SKPhysicsBody.init(rectangleOf: CGSize(width: (trampoline?.size.width)!, height: (trampoline?.size.height)!))
trampolineNode.physicsBody?.categoryBitMask = PhysicsCategory.trampolineCategory
trampolineNode.physicsBody?.contactTestBitMask = PhysicsCategory.ballCategory
trampolineNode.physicsBody?.collisionBitMask = PhysicsCategory.ballCategory
trampolineNode.physicsBody?.affectedByGravity = false
trampolineNode.physicsBody?.isDynamic = false
trampolineNode.physicsBody?.usesPreciseCollisionDetection = true
trampolineNode.physicsBody?.restitution = 1
trampolineNode.move(toParent: _gameNode)

   // Declare the following SKWarpGeometryGrids
   var trampolineWarpGrid: SKWarpGeometryGrid?
   var trampolineNoWarpGrid: SKWarpGeometryGrid?

   // For 2x2 grid - State the source positions
    let sourcePositions: [vector_float2] = [
        vector_float2(0, 0),   vector_float2(0.5, 0),   vector_float2(1, 0),
        vector_float2(0, 0.5), vector_float2(0.5, 0.5), vector_float2(1, 0.5),
        vector_float2(0, 1),   vector_float2(0.5, 1),   vector_float2(1, 1)
    ]

    // For 2x2 grid - State the destination positions
    // To make the dent, I changed row 3 column 2 value from (0.5, 1) to (0.5, 0.8)
    let destinationPositions: [vector_float2] = [
        vector_float2(0, 0),   vector_float2(0.5, 0),   vector_float2(1, 0),
        vector_float2(0, 0.5), vector_float2(0.5, 0.5), vector_float2(1, 0.5),
        vector_float2(0, 1),   vector_float2(0.5, 0.8),   vector_float2(1, 1)
    ]

    //Create the 2x2 warp grid based on the source and destination positions
    trampolineWarpGrid = SKWarpGeometryGrid(columns: 2, rows: 2,
                                  sourcePositions: sourcePositions,
                                  destinationPositions: destinationPositions)

    //Create and assign a Grid to the SKSpritenode that has no warp effects
    //Will be used to convert the trampoline back to original view  
    trampolineNoWarpGrid = SKWarpGeometryGrid(columns: 2, rows: 2)
    trampoline?.warpGeometry = trampolineNoWarpGrid

 func didBegin(_ contact: SKPhysicsContact) {
    let collision: UInt32 = contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask

    if collision == PhysicsCategory.ballCategory | PhysicsCategory.trampolineCategory {
    //Transform the trampoline grid to show dent
    let transform = SKAction.warp(to: trampolineWarpGrid!, duration: 0.3)
    //Warp the trampoline gird back to normal
    let transformBack = SKAction.warp(to: trampolineNoWarpGrid!, duration: 0.3)
    //Run Action
    let transformAction = SKAction.sequence([transform!, transformBack!])
    trampoline?.run(SKAction.repeat(transformAction, count: 1))
}

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

FBSDKGraphRequestHandler Swift3エラー

分類Dev

Swift3でタイプ「UnsafeMutableRawPointer」の変数をUnsafeMutablePointer <>にキャストする

分類Dev

Swift3型キャストエラー

分類Dev

FirebaseスナップショットをSwift3オブジェクトにキャストする

分類Dev

UITextView Swift3にテキストを保存する

分類Dev

Swift3ドラッグ可能なUIButton

分類Dev

Swift3サウンドプレイ

分類Dev

Swift3。特定のプロトコルに準拠するクラスにAnyをキャストします

分類Dev

PersistentStoreDescriptions をどこに置くか? Swift3 Coredata ボイラープレート スタック内

分類Dev

swift3はintをindexPathにキャストします

分類Dev

SpotifySDKとSwift3でトークンの更新を適切に処理する方法。エラーコード= 3840

分類Dev

Swift3プロトコルの静的キーワード

分類Dev

キューとSwift3の問題

分類Dev

Swift3変換エラー/ NSError

分類Dev

Swift3のCoreDataNSFetchRequestエラーNSInvalidArgumentException

分類Dev

tableViewでのSwift3エラー

分類Dev

Swift3のテキストビューからルックアップと共有を削除する方法

分類Dev

スプライトキットのさまざまな画面に合わせてスプライトノードのサイズを変更する方法(Swift)

分類Dev

Swift3のCustomCellにイベントを追加する方法

分類Dev

タプルの配列をソートするSwift3

分類Dev

Swift3でWiFiネットワークを取得する

分類Dev

Swift3を使用したFacebookグラフリクエスト-

分類Dev

ネストされたforループの制御Swift3

分類Dev

エラーの原因となるSwift3のアップデート

分類Dev

ある角度で画像にテキストを描画する[Swift3]

分類Dev

Swift3の操作クラスでデフォルト値をオーバーライドする

分類Dev

配列インデックスを比較するSwift3

分類Dev

Swift3のUIAlertControllerでのワードラップ

分類Dev

Swift3がUIButtonのタイトルを変更する

Related 関連記事

  1. 1

    FBSDKGraphRequestHandler Swift3エラー

  2. 2

    Swift3でタイプ「UnsafeMutableRawPointer」の変数をUnsafeMutablePointer <>にキャストする

  3. 3

    Swift3型キャストエラー

  4. 4

    FirebaseスナップショットをSwift3オブジェクトにキャストする

  5. 5

    UITextView Swift3にテキストを保存する

  6. 6

    Swift3ドラッグ可能なUIButton

  7. 7

    Swift3サウンドプレイ

  8. 8

    Swift3。特定のプロトコルに準拠するクラスにAnyをキャストします

  9. 9

    PersistentStoreDescriptions をどこに置くか? Swift3 Coredata ボイラープレート スタック内

  10. 10

    swift3はintをindexPathにキャストします

  11. 11

    SpotifySDKとSwift3でトークンの更新を適切に処理する方法。エラーコード= 3840

  12. 12

    Swift3プロトコルの静的キーワード

  13. 13

    キューとSwift3の問題

  14. 14

    Swift3変換エラー/ NSError

  15. 15

    Swift3のCoreDataNSFetchRequestエラーNSInvalidArgumentException

  16. 16

    tableViewでのSwift3エラー

  17. 17

    Swift3のテキストビューからルックアップと共有を削除する方法

  18. 18

    スプライトキットのさまざまな画面に合わせてスプライトノードのサイズを変更する方法(Swift)

  19. 19

    Swift3のCustomCellにイベントを追加する方法

  20. 20

    タプルの配列をソートするSwift3

  21. 21

    Swift3でWiFiネットワークを取得する

  22. 22

    Swift3を使用したFacebookグラフリクエスト-

  23. 23

    ネストされたforループの制御Swift3

  24. 24

    エラーの原因となるSwift3のアップデート

  25. 25

    ある角度で画像にテキストを描画する[Swift3]

  26. 26

    Swift3の操作クラスでデフォルト値をオーバーライドする

  27. 27

    配列インデックスを比較するSwift3

  28. 28

    Swift3のUIAlertControllerでのワードラップ

  29. 29

    Swift3がUIButtonのタイトルを変更する

ホットタグ

アーカイブ