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

回答編集履歴

1

具体策の提示

2015/02/19 09:08

投稿

swordone
swordone

スコア20675

answer CHANGED
@@ -8,4 +8,32 @@
8
8
  }
9
9
  ```
10
10
  ・音楽をセットするprivateメソッドのMediaPlayerをどこでも実行していない
11
- ・`getContext()`メソッドをこのクラスでオーバーライドしており、`null`を返している
11
+ ・`getContext()`メソッドをこのクラスでオーバーライドしており、`null`を返している
12
+ ---
13
+
14
+ 追記
15
+ URLを教えていただきありがとうございます。
16
+ ゲーム状態を司っているクラスというわけですね。
17
+ でしたら、これを呼び出すSurfaceView系クラスのコンストラクタで
18
+ contextを引数に渡してGmaMgrコンストラクタを起動するのはどうでしょう?
19
+ ([このページ](http://dixq.net/Android/s02_03.html)を元に改変します)
20
+ ```lang-java
21
+ class GameSurfaceView extends SurfaceView implements SurfaceHolder.Callback, Runnable {
22
+ private GameMgr _gameMgr; //ここではフィールド宣言だけしておく
23
+ private Thread _thread;
24
+
25
+ public GameSurfaceView(Context context) {
26
+ super(context);
27
+ getHolder().addCallback(this);
28
+ _gameMgr = new GmaMgr(context); //Context情報を渡してコンストラクタ起動
29
+ }
30
+ //以下略
31
+ }
32
+ ```
33
+ GmaMgr側では、コンストラクタをContext型の引数を受け取るように変更し、
34
+ コンストラクタ内でmp1に音楽をセットし、再生する命令を記述するといいと思います。
35
+ ただし、`MediaPlayer.create`メソッドの第一引数は`getContext()`ではなく、
36
+ コンストラクタ起動時に渡したContext型引数にするのを忘れずに。
37
+
38
+ それと、前の方も指摘してますが、第二引数が`R.drawable.*`なのがおかしい気がします。
39
+ drawableは画像を入れるディレクトリを指しているので。