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

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

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

SpriteKitは、iOSやOS Xで使用できるApple社製の2Dゲーム開発フレームワークです。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Q&A

解決済

2回答

351閲覧

spritekitでノード(敵)の位置がガクガクずれてしまう

tsuneet

総合スコア16

SpriteKit

SpriteKitは、iOSやOS Xで使用できるApple社製の2Dゲーム開発フレームワークです。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

0グッド

0クリップ

投稿2019/10/20 03:24

swiftのspritekitを用いてアクションゲームを作っています。
timer関数を用いて1秒に一回敵をランダムに発生させて画面上から下の方に降ってくるようにしようと思っています。
敵の発生、下への移動は実行されるのですが、画面下に敵が移動してくる途中に数秒に一回ガクガクと上下に残像のように分裂して表示されてしまいます。

個人的には
Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { (Timer) in¥
self.createEnemy()
}
の関数で定期的に敵のオブジェクトを生成していることが原因と考えていますが、なぜ残像のようなバグになってしまうのかわかりません。コードに根本的な誤りがあるのでしょうか。また、この方法以外に敵を定期的に発生させる方法はありますでしょうか。詰まってしまっている状態で何かヒントを頂けるとありがたいです。よろしくお願い致します。

swift

1 override func didMove(to view: SKView) { 2 layoutScene() 3 setupScoreLabel() 4 physicsWorld.contactDelegate = self 5 6 _ = Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { (Timer) in 7 self.createEnemy() 8 } 9 }

swift

1 func createEnemy(){ 2 3 4 var hasseiIchi = Int(arc4random_uniform(500)) 5 6 let texture5 = SKTexture(imageNamed: "bands") 7 let sprite5 = SKSpriteNode(texture:texture5) 8 sprite5.physicsBody = SKPhysicsBody(texture:texture5,size:sprite5.size) 9 10 sprite5.position=CGPoint(x:hasseiIchi,y:700) 11 sprite5.name="bands" 12 sprite5.physicsBody?.isDynamic = true 13 sprite5.physicsBody?.contactTestBitMask = PhysicsCategories.switchCategory 14 sprite5.physicsBody?.collisionBitMask = PhysicsCategories.none//0 15 self.addChild(sprite5) 16 17 let moveToDown=SKAction.moveTo(y: 0, duration: TimeInterval(5)) 18 sprite5.run(moveToDown) 19 20 21 }

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

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

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

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

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

guest

回答2

0

自己解決しました。
なぜか

let moveToDown=SKAction.moveTo(y: 0, duration: TimeInterval(5)) sprite5.run(moveToDown)

が良くなかったようで、次のような記載にしたらガクガク敵ノードが残像するエラーは消失しました。

sprite5.physicsBody?.velocity = CGVector(dx:0, dy:-480.0)// sprite5.physicsBody?.linearDamping=0

ありがとうございました。

投稿2019/10/20 06:34

tsuneet

総合スコア16

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

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

0

自己解決

自己解決しました。
なぜか

let moveToDown=SKAction.moveTo(y: 0, duration: TimeInterval(5)) sprite5.run(moveToDown)

が良くなかったようで、次のような記載にしたらガクガク敵ノードが残像するエラーは消失しました。

sprite5.physicsBody?.velocity = CGVector(dx:0, dy:-480.0)// sprite5.physicsBody?.linearDamping=0

ありがとうございました。

投稿2019/10/20 06:34

tsuneet

総合スコア16

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問