どのようにSKActionを定義し、ノードを回転させる度数を更新できますか?変数で定義しようとしていますが、変数値を更新するとアクションは更新されません。この例では変化する度数でSKSpritenodeを回転
答えて
var degreesToRotate = 4
var direction = 1
let action = SKAction.rotate(byAngle: CGFloat(degreesToRotate * direction), duration: TimeInterval(2))
charector.run(SKAction.repeatForever(action))
direction = -1
import SpriteKit
import GameplayKit
//Extensions borrowed from here : http://stackoverflow.com/a/29179878/3402095
extension Int {
var degreesToRadians: Double { return Double(self) * .pi/180 }
var radiansToDegrees: Double { return Double(self) * 180/.pi }
}
extension FloatingPoint {
var degreesToRadians: Self { return self * .pi/180 }
var radiansToDegrees: Self { return self * 180/.pi }
}
let kActionKey = "rotate"
class GameScene:SKScene {
let purpleCube = SKSpriteNode(color: .purple, size: CGSize(width: 150, height: 150))
let yellowCube = SKSpriteNode(color: .yellow, size: CGSize(width: 150, height: 150))
override func didMove(to view: SKView) {
addChild(purpleCube)
purpleCube.position.y = purpleCube.size.height
purpleCube.name = "purple"
addChild(yellowCube)
yellowCube.position.y = -yellowCube.size.height
yellowCube.name = "yellow"
let rotate = SKAction.rotate(byAngle: CGFloat(-M_PI * 2.0), duration: 5)
let loop = SKAction.repeatForever(rotate)
purpleCube.run(loop, withKey: kActionKey)
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
super.touchesBegan(touches, with: event)
if let touch = touches.first {
let location = touch.location(in: self)
if let cube = atPoint(location) as? SKSpriteNode {
if let name = cube.name {
switch name {
case "purple":
if let action = purpleCube.action(forKey: kActionKey){
purpleCube.run(action.reversed(), withKey: kActionKey)
}
case "yellow":
if action(forKey: "rotating") == nil{
yellowCube.run(SKAction.rotate(byAngle: CGFloat(4.degreesToRadians), duration: 0.1), withKey: kActionKey)
}
default:
break
}
}
}
}
}
}
、2つの異なる方法で回転された2つのノードがあります。パープルノードは時計回りにある速度で常に回転します。これを達成するために、スプライトを360度回転させるアクションを作成しました。これは1回転になり、永遠に繰り返されるので、スプライトは永遠に回転します。
黄色のノードについて...それをタップするたびに4度回転します。現在、スプライトの回転が停止するのを待たなければならないので、回転させることができます。これはオプションですが、私はあなたにアクションキーの有用性を示したかっただけです。
回転方向
SpriteKitベース0度で正のx軸と正の角度を指定しているため反時計方向にあり、Iは時計方向にスプライトを回転-360度紫キューブを、回転させました。 SpriteKit座標系の詳細については、this documentation sectionを参照してください。
ラジアンVsはあなたが見ることができるように、私はむしろラジアンよりも、度で話してい
学位...それはそれは言うのは本当に難しいだろうので、私は6.2831853072ラジアンでスプライトを回転させています。 )そのため、私は、度からラジアンへの変換とその逆の変換を行う拡張を使用しています。あなたはこれを頻繁に使用するかもしれないので、私はあなたのためにそれらを追加しました
まさに私が探していたもの!どうもありがとうございます! – John
- 1. 回転中のCABasicAnimation変化の持続時間/回転速度
- 2. CGAffineTransform角度の代わりに回数を回転する回転
- 3. 回転したSKSpriteNodeの正確なフレームを見つける
- 4. 回転すると(ランダムに)色が変化する回転する三角形をアニメーション化する方法
- 5. IE6でテキストを270度回転する
- 6. 加速度を3D回転で変換する
- 7. WebGLでキューブの回転角度を変更するスライダ
- 8. サブピクセル精度で回転/ポイント
- 9. FFmpeg - 角度で回転
- 10. スウィフト - ジェスチャーと回転の増分を90度回転します
- 11. マテリアル化css回転角が角度2で動作しない
- 12. ページを180度回転する
- 13. 画像を180度回転する
- 14. Androidを90度回転する
- 15. イメージを回転する-45度
- 16. GoJs図形を90度回転する
- 17. イメージを180度以上回転する
- 18. リストアイテムを90度回転する
- 19. ビューを90度回転するiOS
- 20. アイコンを180度回転する
- 21. イメージを90度回転する
- 22. 回転度をBox2Dのインパルスに変換する
- 23. SKSpriteNodeが配列変化画像
- 24. 画像を90度、180度または270度回転する
- 25. 球体をアニメーション化する(回転)
- 26. コントロールの回転をアニメーション化する
- 27. テーブルを時計回りに90度回転(転置しない)
- 28. IE11で回転を変換
- 29. 360度のCSS回転
- 30. ロボットの360度回転プラットフォーム
あなたは 'SKAction.rotate(byAngle'はラジアンで、度ではありません)を使うべきです[ここ](https://developer.apple.com/reference/spritekit/skaction/1417805-rotate) –
それは私に与えます"期待セパレータ"エラー:let action = SKAction.rotate(byAngleラジアン:CGFloat(degreesToRotate * direction)、duration:TimeInterval(2)) – John
@Johnこれはあなたがそのメソッドを呼び出す方法です: 'let action = SKAction.rotate – Whirlwind