質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

0回答

1383閲覧

SKAction.rotate による回転で回転中心を変更する方法

Ponkiti27

総合スコア9

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2018/07/21 03:10

前提・実現したいこと

swift の SpraiteKit を使ってプログラミングをしています。
スワイプでオブジェクトを画面の中心を回転軸にして回転させたいと思い、
SKAction.rotate を使いオブジェクトを回転させようとしたのですが、
回転中心を変更することができません。
アンカーポイントの変更で回転軸の変更はできそうなのでずが、
アンカーポイントを変更してしまうと、SKPhysicsBodyで作成した当たり判定が
ずれてしまいます。

SKAction.rotate や SpraiteKitのその他のコードでSKPhysicsBodyで作成した当たり判定をずらすことなく、画面の中心を中心に回転させることはできますでしょうか?

該当のソースコード

swift

1 2 override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 3 let touchEvent = touches.first! 4 savePos = (touchEvent.location(in: self).x, touchEvent.location(in: self).y) 5 } 6 7 func addsquare(xs:Int ,ys:Int, xp:Int, yp:Int ){ 8 csquare += 1 9 let square = SKSpriteNode(texture: texture) 10 square.xScale = CGFloat(xs) 11 square.yScale = CGFloat(ys) 12 square.position = CGPoint(x: xp, y: yp) 13 square.zPosition = -1.0 14 15 square.physicsBody = SKPhysicsBody(texture: texture, size: square.frame.size) 16 square.physicsBody!.affectedByGravity = false 17 square.physicsBody?.categoryBitMask = squareCategory 18 square.physicsBody?.contactTestBitMask = ballCategory 19 square.physicsBody?.collisionBitMask = 0b1000 20 addChild(square) 21 squares.append(square) 22 } 23 24 override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) { 25 let touchEvent = touches.first! 26 27 let newDx = touchEvent.location(in: self).x 28 let newDy = touchEvent.location(in: self).y 29 30 let distancex = newDx - savePos.x 31 let distancey = newDy - savePos.y 32 let aa = 0.0001 33 let anglex = Double(distancex) * aa 34 let angley = Double(distancey) * aa 35 36 if(fabs(newDy - savePos.y) > 10.0 || fabs(newDx - savePos.x) > 10.0) { 37 for n in 1...csquare { 38 let square = squares[n-1] 39 40 if(savePos.x > 0.0 && savePos.y > 0.0) { 41 let rotateAction = SKAction.rotate(byAngle: CGFloat(-anglex + angley), duration: 0) 42 square.run(rotateAction) 43 } else if(savePos.x > 0.0 && savePos.y < 0.0 ) { 44 let rotateAction = SKAction.rotate(byAngle: CGFloat(anglex + angley), duration: 0) 45 square.run(rotateAction) 46 } else if(savePos.x < 0.0 && savePos.y < 0.0 ){ 47 let rotateAction = SKAction.rotate(byAngle: CGFloat(anglex - angley), duration: 0) 48 square.run(rotateAction) 49 } else{ 50 let rotateAction = SKAction.rotate(byAngle: CGFloat(-anglex - angley), duration: 0) 51 square.run(rotateAction) 52 } 53 } 54 } 55 }

試したいこと

回転と同時に移動を行い、あたかも原点中心で回転しているようにみせる。
アンカーポイント の変更で当たり判定とずれないようなコードを作る。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tanakana

2018/07/29 13:07

回答ついでに拝見しました。目指している動きがよくわからないですが、Actionをグループでまとめて同時に動かしたいと言う事ですか?
Ponkiti27

2018/08/08 08:03

Actionをグループでまとめで同時に動作させるというのは、現状のコードでも実現できています。実現したかった動作は、回転させるオブジェクト全てを同じある一点の回転軸で回転させるということです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問