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

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

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

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

Q&A

解決済

4回答

273閲覧

NPCのキャラクターに一定期間ごとにつぶやかせたい

KTH

総合スコア86

Swift

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

0グッド

0クリップ

投稿2019/01/23 05:03

編集2019/01/25 11:08

swiftを学習しているものです

ゲームを作ろうと考えていて、NPCのキャラクターが一定時間ごとにつぶやくようにしようと考えています

そこで質問なのですが、DispatchQueueの使い方とどういう処理を選ぶのが適切なのか教えていただけませんか?

今考えているのはArrayでそのキャラクターのセリフをいくつか作っておいて、それをキャラクターに喋らせて、ランダムの数十秒後に前回のセリフ以外のセリフをArrayの中からランダムで1つしゃべるというものを考えています

DispatchQueueという処理で〇〇秒後に実行できるというのはわかったのですが、whileやforのどれを使えばいいのかが良くわかりません

「今使ったばかりのものいがい」という条件をつくるにはどうすればいいのでしょうか?

追加分です↓

let セリフ = ["A","B","C","D","E","F","G"]

var Inta = Int.random(in: 1...7)

switch Inta {

case 1:
print(セリフ[1])
case 2:
print(セリフ[2])
case 3:
print(セリフ[3])
case 4:
print(セリフ[4])
case 5:
print(セリフ[5])
case 6:
print(セリフ[6])
case 7:
print(セリフ[7])

default:
print("sorry404")
}

これを繰り返してつねにキャラクターがつぶやくようにしたいのです

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

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

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

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

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

fuzzball

2019/01/23 05:09

この質問の中にはいくつの質問が含まれているのでしょうか?
fuzzball

2019/01/23 05:09

DispatchQueueについて自分で調べたことを書いて下さい。
fuzzball

2019/01/23 05:11

これはゲームなのでしょうか?使用しているフレームワーク(エンジン)を書いて下さい。
fuzzball

2019/01/23 05:12

let NPCSoliloquy = ["", "","", "","", "", "","", "","", ""] このコードは何でしょうか?
KTH

2019/01/25 11:09

自分でやってみた分を足しました ランダムにセリフを表示して、それを繰り返し表示したいのですがどうすればいいのでしょうか?
KTH

2019/01/25 11:14

えーとつまり、このswitch文でセリフのテキストを表示して、それを数秒後にもう一度switch文でセリフのテキストを表示したいわけです
guest

回答4

0

自己解決

class ViewController: UIViewController {

@IBOutlet weak var label: UILabel! var AA = ["a","b","c","d"] override func viewDidLoad() { super.viewDidLoad() Timer.scheduledTimer(timeInterval: 5, target: self, selector: #selector(ViewController.timerUpdate), userInfo: nil, repeats: true) } @objc func timerUpdate() { label.text = AA.randomElement() }

}

これでできました

投稿2019/02/02 16:44

KTH

総合スコア86

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

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

0

一つ前と違う要素をランダムにかつ無限に取り出せる何か

swift

1struct Hoge<Element: Hashable>: Sequence, IteratorProtocol { 2 3 init(elements: Set<Element>) { 4 5 guard elements.count > 1 else { 6 7 fatalError("few element") 8 } 9 10 guard let first = elements.randomElement() else { 11 12 fatalError("no element") 13 } 14 15 self.elements = elements 16 self.current = first 17 } 18 19 private let elements: Set<Element> 20 21 private var current: Element 22 23 mutating func next() -> Element? { 24 25 guard let new = elements.randomElement() else { 26 27 fatalError("no element") 28 } 29 30 guard new != current else { return next() } 31 32 defer { current = new } 33 34 return current 35 } 36} 37 38 39var hoge = Hoge(elements: [0, 1, 2, 3, 4, 5]) 40 41zip(0...80, hoge).forEach { print($0.1) }

投稿2019/01/23 06:15

MasakiHori

総合スコア3384

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

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

0

前半だけ。

一定時間ごとにつぶやくように

であれば、タイマーで十分かと思われます。

Swift4環境でTimerの使い方と挙動を確認してみた

投稿2019/01/23 05:48

takabosoft

総合スコア8356

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

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

0

後半だけ。

swift

1let array = ["A", "B", "C", "D", "E", "F"] 2 3for loop in 0..<5 { 4 print("#(loop): ", terminator: "") 5 var no = Int.random(in: 0..<array.count) //初回セリフ番号 6 for _ in 0..<10 { 7 print(" ", array[no], terminator: "") 8 no = (no + Int.random(in: 1..<array.count)) % array.count //次回セリフ番号 9 } 10 print() 11}

text

1#0: F D E C A B A C F D 2#1: B D A E F D C D B F 3#2: E B D C A D F C A E 4#3: B C B D A D A D B C 5#4: D A F E D F E C D F

分からない箇所があれば聞いて下さい。

投稿2019/01/23 05:30

編集2019/01/23 05:53
fuzzball

総合スコア16731

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問