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

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

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

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

Swift

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

Q&A

0回答

324閲覧

Spritekitでsegueを使わない画面遷移ができない

tein

総合スコア5

SpriteKit

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

Swift

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

0グッド

0クリップ

投稿2020/01/21 07:36

前提・実現したいこと

現在、SwiftのSpriteKitを使いアプリを製作しています。
StartSceneからGameSceneに画面遷移をしたいのですが、GameSceneが左下にずれてします。原因がわかりません。

発生している問題・エラーメッセージ

GameSceneが正しく表示されない

該当のソースコード

swift

1import Foundation 2import SpriteKit 3import GameplayKit 4 5class StartScene: SKScene,SKPhysicsContactDelegate { 6 7 var background = SKSpriteNode(imageNamed: "haikeii") 8 var button = SKSpriteNode(imageNamed: "botan") 9 //現在シーン設定時の呼び出しメソッド 10 override func didMove(to view: SKView) { 11 self.scaleMode = .aspectFit 12 background.position = CGPoint(x:0,y:0) 13 background.size = CGSize(width: 750, height: 1350)//self.size 14 background.zPosition = -20 15 self.addChild(background) 16 button.position = CGPoint(x:0,y:-550) 17 button.size = CGSize(width: 400, height: 200) 18 button.zPosition = -10 19 self.addChild(button) 20 } 21 override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 22//ここでGameSceneに遷移する 23 for touch in (touches as! Set<UITouch>) { 24 let view = self.view as! SKView 25 let scene = GameScene() 26 scene.size = view.frame.size 27 view.presentScene(scene) 28 29 30 } 31 32 } 33} 34

swift

1//StaetSceneからこっちへ遷移する 2import Foundation 3import SpriteKit 4import GameplayKit 5// #A→SKPhysicsContactDelegate 6 7class GameScene: SKScene,SKPhysicsContactDelegate { 8 private enum GameState { 9 case Playing 10 case GameOver // ゲームオーバー 11 case WaitToRestartFromLose // ゲームオーバーからのリスタート待ち 12 } 13 // オブジェクト群 14 var background = SKSpriteNode(imageNamed: "haikei") 15 var jimen = SKSpriteNode(imageNamed: "jimen") 16 var over = SKSpriteNode(imageNamed: "over") 17 var gameOverTitle = SKSpriteNode(imageNamed: "aisatu") 18 var mimo = SKSpriteNode() 19 var a = 0 20 var positions: [SKAction]? 21 var y: [CGPoint] = [] 22 var y2: [CGPoint] = [] 23 var texture : SKTexture! 24 var timer: Timer! 25 26 27 private var gameState = GameState.Playing 28 //ミーモのノードを作成する。 29 //let tabi = SKSpriteNode(imageNamed: "tabi") 30 31 override func didMove(to view: SKView) { 32 33 // #B→self.physicsWorld.gravityとself.physicsWorld.contactDelegate 34 // 重力の設定 35 self.physicsWorld.gravity = CGVector(dx:0,dy:-3.0) 36 // 衝突の後にdidBeginContactメソッドが呼ばれるよ!の設定 37 self.physicsWorld.contactDelegate = self 38 39 // 背景画像の設定 40 // background.anchorPoint = CGPoint(x:0,y:0) 41 background.position = CGPoint(x:0,y:0) 42 background.size = self.size 43 background.zPosition = -20 44 self.addChild(background) 45 // ゲームオーバー用タイトルをセットアップする 46 gameOverTitle.position = CGPoint(x: size.width * 0.5, y: size.height * 0.5) // シーン中央に配置する 47 gameOverTitle.zPosition = 200 48 // jimenの配置 49 jimen.position = CGPoint(x:0,y:-600) 50 jimen.size = CGSize(width: 500, height: 100) 51 jimen.physicsBody = SKPhysicsBody(rectangleOf: jimen.frame.size) 52 jimen.zPosition = -10 53 //重力を無効にする 54 jimen.physicsBody?.affectedByGravity = false 55 self.addChild(jimen) 56 //overの設置 57 over.position = CGPoint(x:0,y:-1500) 58 over.size = CGSize(width: 1000, height: 100) 59 over.physicsBody = SKPhysicsBody(rectangleOf: over.frame.size) 60 61 //重力を無効にする 62 over.physicsBody?.affectedByGravity = false 63 //カテゴリ 64 // jimen.physicsBody?.categoryBitMask = 0x1 << 0 65 //衝突 66 // jimen.physicsBody?.collisionBitMask = 0x1 << 2 67 68 self.addChild(over) 69 mi() 70 71 72 } 73 override func update(_ currentTime: TimeInterval) { 74 75 /* ゲームオーバー*/ 76 77 78 79 } 80 func mi(){ 81 UIApplication.shared.endIgnoringInteractionEvents() 82 positions = [] 83 let names = ["tabi","aisatu","nougu","den","san","san2","teto","sika"] 84 let index = Int(arc4random_uniform(UInt32(names.count))) 85 let name = names[index] 86 mimo = SKSpriteNode(imageNamed: name) 87 texture = SKTexture(imageNamed: name) 88 mimo.size = CGSize(width:150,height:150) 89 // mimo.physicsBody = SKPhysicsBody(texture: texture, size: mimo.frame.size) 90 if let texture = mimo.texture { 91 mimo.physicsBody = SKPhysicsBody(texture: texture, size: mimo.size) 92 } 93 94 mimo.physicsBody?.contactTestBitMask = 1 95 mimo.position = CGPoint(x:0,y:600) 96 mimo.physicsBody = SKPhysicsBody(rectangleOf: mimo.frame.size) 97 mimo.zPosition = -10 98 //カテゴリ 99 // mimo.physicsBody?.categoryBitMask = 0x1 << 1 100 //衝突 101 //mimo.physicsBody?.collisionBitMask = 0x1 << 0 102 //重力を無効にする 103 mimo.physicsBody?.affectedByGravity = false 104 //衝突判定 105 mimo.physicsBody?.categoryBitMask = 0b0110 106 jimen.physicsBody?.categoryBitMask = 0b0001 107 over.physicsBody?.categoryBitMask = 0b0010 108 mimo.physicsBody?.collisionBitMask = 0b0101 109 jimen.physicsBody?.collisionBitMask = 0b0001 110 over.physicsBody?.collisionBitMask = 0b0010 111 jimen.physicsBody?.contactTestBitMask = mimo.physicsBody!.categoryBitMask 112 over.physicsBody?.contactTestBitMask = mimo.physicsBody!.categoryBitMask 113 mimo.physicsBody?.contactTestBitMask = mimo.physicsBody!.categoryBitMask 114 if(a == 1){ 115 a = 0 116 } 117 self.addChild(mimo) 118 print(mimo.frame.origin.x) 119 } 120 121 override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 122 123 } 124 //画面タッチ移動時の呼び出しメソッド 125 override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) { 126 super.touchesMoved(touches, with: event) 127 positions = [] 128 //タッチした座標を取得する。 129 let location = touches.first!.location(in: self) 130 131 //タッチした位置まで移動するアクションを作成する。 132 mimo.run(SKAction.moveTo(x: location.x, duration: 0.0)) 133 print("touchesMoved") 134 135 136 } 137 138 override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) { 139 let location = touches.first!.location(in: self) 140 let node = atPoint(location) as! SKSpriteNode 141 142 if(node.physicsBody != nil) { 143 //タッチしたノードを落とす。 144 node.physicsBody!.isDynamic = true 145 //重力を有効にする 146 mimo.physicsBody?.affectedByGravity = true 147 //タッチイベントを無効にする 148 UIApplication.shared.beginIgnoringInteractionEvents() 149 } 150 151 a = 0 152 print("ended") 153 154 timer = Timer.scheduledTimer(timeInterval: 5, target: self, selector: #selector(GameScene.hantei), userInfo: nil, repeats: true) 155 156 } 157 158 func didBegin(_ contact: SKPhysicsContact){ 159 // var firstBody:SKPhysicsBody 160 // var secondBody:SKPhysicsBody 161 162 if(contact.bodyA.categoryBitMask == jimen.physicsBody?.categoryBitMask || contact.bodyA.categoryBitMask == mimo.physicsBody?.categoryBitMask){ 163 run(SKAction.sequence([ 164 SKAction.wait(forDuration: 1.0)])) 165 print("didBegin") 166 if(a == 0){ 167 print("1111111") 168 // mi() 169 UIApplication.shared.endIgnoringInteractionEvents() 170 a = 1 171 } 172 print("2") 173 print(a) 174 print(mimo.physicsBody?.categoryBitMask) 175 print(mimo.physicsBody?.collisionBitMask) 176 print(jimen.physicsBody?.collisionBitMask) 177 print(over.physicsBody?.collisionBitMask) 178 179 180 181 182 183 } 184 185 186 187 // ゲームの状態がプレイ中でなければ処理を抜ける 188 // ゲームリスタートを処理するメソッド 189 //private func restart() { 190 // ゲームの状態がリスタート待ちでなければ処理を抜ける 191 // if (gameState != .WaitToRestartFromLose) { 192 // return 193 // } 194 } 195 func overr(){ 196 let scene = GameOverScene(size: self.scene!.size) 197 scene.scaleMode = SKSceneScaleMode.aspectFill 198 self.view!.presentScene(scene) 199 } 200 201 @objc func hantei(){ 202 if (mimo.frame.origin.x <= over.frame.origin.x) { 203 overr() 204 }else{ 205 mi() 206 } 207 if let workingTimer = timer{ 208 workingTimer.invalidate() 209 } 210 } 211} 212

補足情報(FW/ツールのバージョンなど)

version9.2

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問