🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Swift

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

Q&A

解決済

1回答

1799閲覧

重力を有効にしたい!

tein

総合スコア5

Swift

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

0グッド

0クリップ

投稿2019/12/11 01:23

前提・実現したいこと

落ち物アプリを製作しています。
ランダムで画像を表示しようとしています。

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

重力が有効にできない。
エラーメッセージ
Use of unresolved identifier 'mimo'

該当のソースコード

swift
ソースコード
import Foundation
import SpriteKit
import GameplayKit
// #A→SKPhysicsContactDelegate
class GameScene: SKScene,SKPhysicsContactDelegate {

// オブジェクト群 var background = SKSpriteNode(imageNamed: "haikei") var hero = SKSpriteNode(imageNamed: "jimen") //ミーモのノードを作成する。 //let tabi = SKSpriteNode(imageNamed: "tabi") override func didMove(to view: SKView) { // #B→self.physicsWorld.gravityとself.physicsWorld.contactDelegate // 重力の設定 self.physicsWorld.gravity = CGVector(dx:0,dy:-3.0) // 衝突の後にdidBeginContactメソッドが呼ばれるよ!の設定 self.physicsWorld.contactDelegate = self // 背景画像の設定 // background.anchorPoint = CGPoint(x:0,y:0) background.position = CGPoint(x:0,y:0) background.size = self.size self.addChild(background) // spaceshooterの配置 hero.position = CGPoint(x:0,y:-700) hero.size = CGSize(width: 500, height: 100) hero.physicsBody = SKPhysicsBody(rectangleOf: hero.frame.size) //重力を無効にする hero.physicsBody?.affectedByGravity = false //カテゴリ hero.physicsBody?.categoryBitMask = 0x1 << 0 //衝突 hero.physicsBody?.collisionBitMask = 0x1 << 2 self.addChild(hero) // #C→block.physicsBody // 岩石の配置 let names = ["tabi", "nougu", "aisatu"] let index = Int(arc4random_uniform(UInt32(names.count))) let name = names[index] let mimo = SKSpriteNode(imageNamed: name) mimo.physicsBody = SKPhysicsBody(texture: SKTexture(imageNamed: "mimo"), size: mimo.self.size) mimo.size = CGSize(width:150,height:150) mimo.physicsBody?.contactTestBitMask = 1 mimo.position = CGPoint(x:0,y:600) mimo.physicsBody = SKPhysicsBody(rectangleOf: mimo.frame.size) //カテゴリ mimo.physicsBody?.categoryBitMask = 0x1 << 1 //衝突 mimo.physicsBody?.collisionBitMask = 0x1 << 0 //重力を無効にする mimo.physicsBody?.affectedByGravity = false self.addChild(mimo) } override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { } //override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { //タッチした座標のノードを取得する。 // let location = touches.first!.location(in: self) //let node = atPoint(location) as! SKSpriteNode //鳥ノードの場合、物理ボディを設定する。 //if(node == block){ // node.physicsBody?.affectedByGravity = true //} else { //円形のシェイプノードを作成する。 // let circle = SKShapeNode(circleOfRadius: 60.0) //circle.position = CGPoint(location.x, location.y) //circle.strokeColor = SKColor.black //circle.fillColor = SKColor.gray //シーンに追加する。 //self.addChild(circle) // }

// }

override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) { let location = touches.first!.location(in: self) let node = atPoint(location) as! SKSpriteNode if(node.physicsBody != nil) { //タッチしたノードを落とす。 node.physicsBody!.isDynamic = true //重力を有効にする mimo.physicsBody?.affectedByGravity = true } } //override func update(_ currentTime: TimeInterval) { }

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

version9.2

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

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

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

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

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

vanderlvov

2019/12/11 01:28

コードブロックを ```swift code ``` のフォマットしてください。
guest

回答1

0

ベストアンサー

mimoを定義した所はおかしかったです。
こうすればエラーは出なくなりますね。

swift

1import Foundation 2import SpriteKit 3import GameplayKit 4// #A→SKPhysicsContactDelegate 5class GameScene: SKScene,SKPhysicsContactDelegate { 6 7 // オブジェクト群 8 var background = SKSpriteNode(imageNamed: "haikei") 9 var hero = SKSpriteNode(imageNamed: "jimen") 10 var mimo = SKSpriteNode() 11 12 //ミーモのノードを作成する。 13 //let tabi = SKSpriteNode(imageNamed: "tabi") 14 15 override func didMove(to view: SKView) { 16 17 // #B→self.physicsWorld.gravityとself.physicsWorld.contactDelegate 18 // 重力の設定 19 self.physicsWorld.gravity = CGVector(dx:0,dy:-3.0) 20 // 衝突の後にdidBeginContactメソッドが呼ばれるよ!の設定 21 self.physicsWorld.contactDelegate = self 22 23 // 背景画像の設定 24 // background.anchorPoint = CGPoint(x:0,y:0) 25 background.position = CGPoint(x:0,y:0) 26 background.size = self.size 27 self.addChild(background) 28 29 // spaceshooterの配置 30 hero.position = CGPoint(x:0,y:-700) 31 hero.size = CGSize(width: 500, height: 100) 32 hero.physicsBody = SKPhysicsBody(rectangleOf: hero.frame.size) 33 //重力を無効にする 34 hero.physicsBody?.affectedByGravity = false 35 //カテゴリ 36 hero.physicsBody?.categoryBitMask = 0x1 << 0 37 //衝突 38 hero.physicsBody?.collisionBitMask = 0x1 << 2 39 self.addChild(hero) 40 41 // #C→block.physicsBody 42 // 岩石の配置 43 let names = ["tabi", "nougu", "aisatu"] 44 let index = Int(arc4random_uniform(UInt32(names.count))) 45 let name = names[index] 46 mimo = SKSpriteNode(imageNamed: name) 47 mimo.physicsBody = SKPhysicsBody(texture: SKTexture(imageNamed: "mimo"), size: mimo.self.size) 48 mimo.size = CGSize(width:150,height:150) 49 mimo.physicsBody?.contactTestBitMask = 1 50 mimo.position = CGPoint(x:0,y:600) 51 mimo.physicsBody = SKPhysicsBody(rectangleOf: mimo.frame.size) 52 //カテゴリ 53 mimo.physicsBody?.categoryBitMask = 0x1 << 1 54 //衝突 55 mimo.physicsBody?.collisionBitMask = 0x1 << 0 56 //重力を無効にする 57 mimo.physicsBody?.affectedByGravity = false 58 59 self.addChild(mimo) 60 } 61 override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 62 63 } 64 65 66 override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) { 67 let location = touches.first!.location(in: self) 68 let node = atPoint(location) as! SKSpriteNode 69 70 if(node.physicsBody != nil) { 71 //タッチしたノードを落とす。 72 node.physicsBody!.isDynamic = true 73 //重力を有効にする 74 mimo.physicsBody?.affectedByGravity = true 75 } 76 } 77} 78

投稿2019/12/11 01:41

vanderlvov

総合スコア687

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

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

tein

2019/12/12 03:09

出来ました!ありがとうございます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問