2016-11-22 6 views
3

SKEffectNodeの子としてSKLabelNodeをワープしようとしていますが(ドキュメントではそうすることができます)、ラベルノードを逆さまにしてからワープ。これはバグかもしれないが、私はそれを提出する前に、私はここにお願いしたいと思った...ここでSKEffectNodeの子としてSKLabelNodeのSKWarpGeometryがラベルを逆さまに反転します

は私のコードです:

func warpNode(_ node: SKEffectNode) 
{ 
    if #available(iOS 10.0, *) 
    { 
     let sourcePositions: [vector_float2] = 
      [ 
       vector_float2(0, 0), vector_float2(0.5, 0), vector_float2(1, 0), //bottom row of object 
       vector_float2(0, 0.5), vector_float2(0.5, 0.5), vector_float2(1, 0.5), //middle row of object 
       vector_float2(0, 1), vector_float2(0.5, 1), vector_float2(1, 1) //top row of object 
      ] 

     let destinationPositions: [vector_float2] = 
      [ 
       vector_float2(0, 0), vector_float2(0.5, 0), vector_float2(1, 0), //bottom row of object 
       vector_float2(0, 0.5), vector_float2(0.5, 0.5), vector_float2(1, 0.5), //middle row of object 
       vector_float2(0, 0.8), vector_float2(0.5, 0.8), vector_float2(1, 0.8) //top row of object 
      ] 

     let warpGeometryGrid = SKWarpGeometryGrid(columns: 2, rows: 2, sourcePositions: sourcePositions, destinationPositions: destinationPositions) 

     let warpGeometryGridNoWarp = SKWarpGeometryGrid(columns: 2, rows: 2) 

     node.warpGeometry = warpGeometryGridNoWarp 

     let warpAction = SKAction.animate(withWarps: [warpGeometryGridNoWarp, warpGeometryGrid, warpGeometryGridNoWarp], times: [0.25, 0.5, 0.75], restore: true) 

     node.run(warpAction!) 
    } 
    else 
    { 
     print("Need iOS >= iOS 10 to warp!!!") 
    } 
} 

let effectNode = SKEffectNode() 
effectNode.shouldEnableEffects = true     
addChild(effectNode) 

let labelNode = SKLabelNode(fontNamed: "Chalkduster") 
labelNode.text = "Label" 
effectNode.addChild(labelNode) 

warpNode(effectNode) 

このコードがダウンして、ラベルの上部を押しつぶしすべきです(ボールや何かを押した場合のように)元の位置に戻しますが、逆さまに反転させた後、上端(単語の一番下にある)を押し下げて元のサイズに戻しますと位置(rightside-up)。

EDIT:0x141Eのコメントに基づいて、SKLabelnodeをSKTextureに変換し、そのSKUriteNodeにそのテクスチャを追加しました。 effectNodeでwarpNode関数を使用した場合、単語を逆さにしてスキームを適用するのと同じ効果があります。しかし、新しいSKSpriteNodeでwarpNode関数を直接使用した場合、正しく動作します。

以下の新しいコード:

func warpNode(_ node: SKSpriteNode) 
{ 
    if #available(iOS 10.0, *) 
    { 
     let sourcePositions: [vector_float2] = 
      [ 
       vector_float2(0, 0), vector_float2(0.5, 0), vector_float2(1, 0), //bottom row of object 
       vector_float2(0, 0.5), vector_float2(0.5, 0.5), vector_float2(1, 0.5), //middle row of object 
       vector_float2(0, 1), vector_float2(0.5, 1), vector_float2(1, 1) //top row of object 
      ] 

     let destinationPositions: [vector_float2] = 
      [ 
       vector_float2(0, 0), vector_float2(0.5, 0), vector_float2(1, 0), //bottom row of object 
       vector_float2(0, 0.5), vector_float2(0.5, 0.5), vector_float2(1, 0.5), //middle row of object 
       vector_float2(0, 0.8), vector_float2(0.5, 0.8), vector_float2(1, 0.8) //top row of object 
      ] 

     let warpGeometryGrid = SKWarpGeometryGrid(columns: 2, rows: 2, sourcePositions: sourcePositions, destinationPositions: destinationPositions) 

     let warpGeometryGridNoWarp = SKWarpGeometryGrid(columns: 2, rows: 2) 

     node.warpGeometry = warpGeometryGridNoWarp 

     let warpAction = SKAction.animate(withWarps: [warpGeometryGridNoWarp, warpGeometryGrid, warpGeometryGridNoWarp], times: [0.25, 0.5, 0.75], restore: true) 

     node.run(warpAction!) 
    } 
    else 
    { 
     print("Need iOS >= iOS 10 to warp!!!") 
    } 
} 

let labelNode = SKLabelNode(fontNamed: "Chalkduster") 
labelNode.text = "Label" 

let labelNodeTexture = SKView().texture(from: labelNode)! 
let labelNodeSprite = SKSpriteNode(texture: labelNodeTexture) 

addChild(labelNodeSprite) 

warpNode(labelNodeSprite) 

私は、コードの全体effectNode部分を排除して、新しいスプライトを追加し、その上のワープをしました。

+1

これはバグのようです。あるいは、 'SKView'の' texture() 'メソッドを使ってラベルをテクスチャに変換し、テクスチャから' SKSpriteNode'を作成し、スプライトをワープすることもできます。 – 0x141E

+0

これを数時間稼働させようとしてきましたが、テクスチャアトラスでうまくいきません...残念ながら、これは新しいSpriteKit機能のトレンドです。 – CloakedEddy

答えて

1

0x141Eのコメントに基づく回答として私の質問を編集しました。

+0

iOS 10.3.1でも同じ問題が残っていました。 SKSpriteNodeでワープを行うのはうまくいくが、SKEffectsNodeで終わったら壊れる。 0x141EのSKSpriteNodeに変換するコメントは完全に機能しました。 Appleのバグの回避策を見つけなければならないのは初めてです。 「それはうまくいく」という同情はスプライトキットには当てはまりません。 1つは、より良い品質を期待する - それはすべての後に、インディーデベの店ではなく、アップルの... – JohnV

関連する問題