2016-10-28 2 views
0

私のレベルエディタで、私は "風車"という名前のSKSpritenodeを作成しました。 (|文字列|回転左) これに私は、ユーザーのデータ属性を追加しましたSpritekit | Swift3 |レベルエディタ - レベルエディタからSKSpritenodesのユーザデータを参照する

//I have no problem in loading the object in the GameScene class. 
enumerateChildNodes(withName: "windmill") {windmillNode,_ in 
     windmill = windmillNode as? SKSpriteNode 
     windmillNode.zPosition = 3 
     windmillNode.move(toParent: _gameNode) 
} 

しかし、私がやりたいことは、ユーザデータのプロパティを呼び出すと回転値に応じています。私は角度を設定したい。

---エラー "タイプ '_?'の不変式に割り当てることができません。
が正しい表現ですか?

var angle: Int 
    if (windmillNode.userData?.object(forKey: "rotation")) = "left" { 
     angle = 360 
    } else { 
     angle = -360 
    } 

答えて

1

単一=が割り当てているあなた、あなたはその比較をしたいが==を使用しています。あなたが設定した場合、あなたの表現が

let rotation = windmillNode.userData?.value(forKey: "rotation") 
    if let rotation = rotation as? String { 
     print(rotation == "left") 
    } 
+0

ありがとうございました。操作のための文字列を宣言しなければなりませんでした。 if文は回転値が "left"のSKSpritenodesを見つけられないので、常に-360です(例:windmillNode.userData?.object(forKey: "rotation"))== "left" {} – user3482617

+0

。これはエディタからノードのユーザデータを呼び出す正しい方法ですか? – user3482617

+0

それを考え出した。エディタの「左」の値は、「オプション(左)」として引き出されています。ユーザーデータに印刷して見つけました。アイデアアイデアはありませんが、I == "Optional(left)"のとき、角度は-360ではなく360でした。 – user3482617

0
var angle: Int 
    if String(describing: windmillNode.userData?.object(forKey: "rotation")) == "Optional(left)" { 
      angle = 360 
     } else { 
      angle = -360 
     } 

のように見えますレベルエディタのノードのユーザデータ値を文字列として返します。

コードでユーザデータ値を呼び出すときは、値は私のインスタンスでオプション(左)として返されます。確かにそれは「左」だけでなく、これで返されます。

これに一致するように==「文字列」を変更すると、正しい角度が正しく割り当てられます。

関連する問題