teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

返信による追記(コードや引用を使用したかったため)

2016/08/23 03:36

投稿

SASAHARA
SASAHARA

スコア247

answer CHANGED
@@ -14,4 +14,45 @@
14
14
 
15
15
  ※ちょっと調べてみたところ、rubyはinitializeによる初期化ができるようなので、それを利用するのがいいのかもしれませんね。
16
16
 
17
- お試し頂ければと思います。
17
+ お試し頂ければと思います。
18
+
19
+
20
+ 追記
21
+ ---
22
+
23
+ 返信読みまして、こちらに回答させて頂きます。
24
+
25
+ > たぶん、whileの中にないと、時間は1秒ごとに変化していかないと思うので、whileの中にあるのだと思います。
26
+
27
+ これはまさにその通りだと思います。
28
+ なので(書き方わかりにくかったかもですね)自分の上記回答の、
29
+
30
+ > def kaisiでゲームが始まった直後にあると思われるwhileの前でtimeを初期化してやればいいのではないでしょうか。
31
+
32
+ ここが該当すると思いました。
33
+ 私もrubyのinitializeの書き方がわからないので、ものすごく簡単に修正するなら、
34
+
35
+ ```ruby
36
+  //kaisi呼ばれた後
37
+
38
+  time = 0             // ←ここで初期化
39
+  while true do         // ゲーム開始のwhile
40
+
41
+   time = window3.getTime  // ここを通るたびに1秒追加
42
+   while event = SDL::Event2.poll do
43
+    case event
44
+    when SDL::Event2::Quit
45
+     exit
46
+    when SDL::Event2::MouseButtonDown
47
+     x = event.x
48
+     y = event.y
49
+ ```
50
+ のように、whileの前(上)で初期化してやればいいかと思います。得点なんかも合わせてやるといいだろうと思いますし、initializeもやるならゲーム開始前ですね。ゲームオーバー後にタイトルに行った直後とかでもいいかもしれません。
51
+
52
+ また、
53
+ > getTimeに書いてあるものをinitalizeに書くことにより、タイムを初期化することができるのだと思ったのですが、どうでしょう
54
+
55
+ getTimeは1秒を計算して返す処理(でいいのかな?)となっているため、初期化はgetTimeで取得した時間が蓄積されているtimeでなければいけないのではないかなと思います(同様に得点やクリック回数の初期化も格納されている変数を初期化する必要があります。本来ならそれをinitalizeするのがスマートなやり方かと思います)
56
+
57
+
58
+ 参考になれば幸いです。