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

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

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

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

Q&A

1回答

581閲覧

GameScene.swiftとGameViewController.swift間での変数の受け渡しについて

edivud

総合スコア10

Swift

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

0グッド

0クリップ

投稿2018/09/29 08:37

編集2018/10/01 15:15

GameScene.swiftとGameViewController.swift間でDouble型の変数の受け渡し

プログラミング初心者です。
Xcodeの"Game"でゲームを作成しているのですが、時間とともに敵が変化するゲームを作りたいので、GameViewController.swiftにてゲームを開始してからの経過時間を表すDouble型の変数を用意し、それをGameScene.swiftに渡そうと思っています。
この受け渡しをどのように実現すればよいのかがわかりません。
初心者ゆえ理解が浅くつまらない質問かもしれませんが、どうかお願いいたします。

試したこと

GameViewController.swiftにて
var nowTime: Double = 0.0
とグローバル変数を用意したのですが、GameViewController.swiftのclassの中ではしっかり経過時間が出るものの、違うファイルのGameScene.swiftにおいてはnowTimeが0.0となってしまう。

### コード(GameSceneにおいてのnowTimeの参照)
if nowTime == 2.0 {
firstEnemy()
}else if nowTime == 4.0 {
secondEnemy()
}else if nowTime == 7.5 {
thirdEnemy()
}else {
}//もっと追加する

func firstEnemy(){

let mobu1 = SKSpriteNode(imageNamed: "mobu1") mobu1.position = CGPoint(x:0,y:frame.height * 3 / 10) mobu1.scale(to: CGSize(width: frame.width/6, height: frame.width/6)) mobu1.physicsBody = SKPhysicsBody(circleOfRadius: mobu1.frame.width ) mobu1.physicsBody?.categoryBitMask = enemyCategory mobu1.physicsBody?.contactTestBitMask = bulletCategory + shipCategory mobu1.physicsBody?.collisionBitMask = 0 addChild(mobu1) let move = SKAction.moveTo(y:-frame.height / 2 - mobu1.frame.height, duration: 6.0) let remove = SKAction.removeFromParent() mobu1.run(SKAction.sequence([move, remove])) }

//secondeEnemyやthirdEnemy...も追加する予定です。
//nowTimeを渡したい部分は以上になります。

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

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

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

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

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

fuzzball

2018/10/01 01:15

GameScene.swiftでどのようにnowTimeを参照しているかコードを書いて下さい。
fuzzball

2018/10/01 23:53

var nowTime:Double=0.0 を書く位置がおかしいんですかね。hodoru3seiさんの回答で解決しているでしょうか?
edivud

2018/10/06 13:11

いえ、どの方法も試してみたのですがうまくいきませんでした。
guest

回答1

0

ベテランのエンジニアに怒られてしまうと思いますが一番簡単なのはグローバル変数にしてしまうことだと思います。
書き方としてはこんな感じにクラス外に出せばokです。

Swift

1 2var nowTime:Double=0.0 3class ViewController: UIViewController{ 4//timeをつかってごにょごにょ 5}

何が正解かはわかりませんが、値の受け渡しにはUserDefaultに保存するというのが一般的かなと思います。私も初心者なので間違っていたらすみません。

Swift

1ViewController側で保存する処理 2//値とkeyを設定して保存する 3UserDefaults.standard.set(nowTime, forkey:"GameSceneで受け取るときに使うkey任意の文字列") 4//すぐに保存を適応させる 5UserDefaults.standard.syncronize() 6 7GameScene側で取り出す処理 8let time = UserDefault.double("GameSceneで受け取るときに使うkey任意の文字列")

あとはstatic変数にしてもアクセス可能だと思います。

Swift

1//変数宣言時 2static var nowTime:Double=0.0 3 4//呼び出すときはこんな感じ 5print(ViewController.nowTime)

投稿2018/09/29 15:05

編集2018/09/29 15:33
hodoru3sei

総合スコア284

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

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

edivud

2018/10/01 15:00

いくつか解決案を教えていただきありがとうございます。 参考にさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問