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

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

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

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Q&A

解決済

2回答

3060閲覧

BGMの再生方法と条件で止める方法について

MikeDavis

総合スコア13

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

0グッド

1クリップ

投稿2015/02/16 07:21

現在、イライラ棒ゲームをAndroidで作成しているのですが、壁に当たったりゲームクリアした際にBGMをとめる処理を書いたのですが、BGMをとめるどころか、BGMが鳴りません。どこが間違っているのでしょうか?

lang

1 2import java.util.ArrayList; 3import java.util.LinkedList; 4 5import jp.example.game2.Barricade.eType; 6import android.annotation.SuppressLint; 7import android.content.Context; 8import android.graphics.Canvas; 9import android.graphics.Color; 10import android.graphics.Paint; 11import android.media.MediaPlayer; 12 13@SuppressLint("WrongCall") 14public class GmaMgr { 15 private MediaPlayer mp1; 16 17@SuppressWarnings("unused") 18private void MediaPlayer(MediaPlayer mp1){ 19mp1=MediaPlayer.create(getContext(),R.drawable.kusai); 20mp1.start(); 21} 22 private enum eStatus{ 23 NORMAL, 24 GAMEOVER, 25 GAMECLEAR 26 }; 27 28 private static final float PI = (float) Math.PI; 29 private ArrayList<Barricade> _barrList = new ArrayList<Barricade>(); 30 private LinkedList<Task> _taskList = new LinkedList<Task>(); 31 private eStatus _status=eStatus.NORMAL; 32 private Player _player; 33 GmaMgr(){ 34 _barrList.add(new BarricadeSquare( 0, 0,1200, 20, null)); 35 _barrList.add(new BarricadeSquare( 0, 0, 20,1800, null)); 36 _barrList.add(new BarricadeSquare(1180, 0, 20,1800, null)); 37 _barrList.add(new BarricadeSquare( 0,1800,1200, 20, null)); 38 39 _barrList.add(new BarricadeSquare(550,0,40,1740,null)); 40 41 //Left 42 _barrList.add(new BarricadeSquare(70, 440, 480, 40, null)); 43 _barrList.add(new BarricadeSquare(0, 535, 500, 40, null)); 44 _barrList.add(new BarricadeSquare(70, 630, 480, 40, null)); 45 _barrList.add(new BarricadeSquare(0, 725, 500, 40, null)); 46 _barrList.add(new BarricadeSquare(70, 820, 480, 40, null)); 47 _barrList.add(new BarricadeSquare(0, 915, 500, 40, null)); 48 _barrList.add(new BarricadeSquare(70, 1010, 480, 40, null)); 49 _barrList.add(new BarricadeSquare(0, 1105, 500, 40, null)); 50 _barrList.add(new BarricadeSquare(70, 1200, 480, 40, null)); 51 _barrList.add(new BarricadeSquare(0, 1295, 500, 40, null)); 52 _barrList.add(new BarricadeSquare(70, 1390, 480, 40, null)); 53 _barrList.add(new BarricadeSquare(0, 1485, 500, 40, null)); 54 _barrList.add(new BarricadeSquare(70, 1580, 480, 40, null)); 55 _barrList.add(new BarricadeSquare(0, 1675, 500, 40, null)); 56 57 //Right 58 _barrList.add(new BarricadeSquare(590, 50, 540, 40, null)); 59 _barrList.add(new BarricadeSquare(650, 145, 530, 40, null)); 60 _barrList.add(new BarricadeSquare(590, 240, 540, 40, null)); 61 _barrList.add(new BarricadeSquare(650, 335, 530, 40, null)); 62 _barrList.add(new BarricadeSquare(590, 430, 540, 40, null)); 63 _barrList.add(new BarricadeSquare(650, 525, 530, 40, null)); 64 _barrList.add(new BarricadeSquare(590, 620, 540, 40, null)); 65 _barrList.add(new BarricadeSquare(650, 715, 530, 40, null)); 66 _barrList.add(new BarricadeSquare(590, 810, 540, 40, null)); 67 _barrList.add(new BarricadeSquare(650, 905, 530, 40, null)); 68 _barrList.add(new BarricadeSquare(590, 1000, 540, 40, null)); 69 _barrList.add(new BarricadeSquare(650, 1095, 530, 40, null)); 70 _barrList.add(new BarricadeSquare(590, 1190, 540, 40, null)); 71 _barrList.add(new BarricadeSquare(650, 1285, 530, 40, null)); 72 _barrList.add(new BarricadeSquare(590, 1380, 540, 40, null)); 73 _barrList.add(new BarricadeSquare(650, 1475, 530, 40, null)); 74 _barrList.add(new BarricadeSquare(590, 1570, 540, 40, null)); 75 _barrList.add(new BarricadeSquare(650, 1665, 530, 40, null)); 76 77 78 //_barrList.add(new BarricadeSquare(0, 900, 1200, 20, new BConf(+PI/180))); 79 //_barrList.add(new BarricadeSquare(0, 900, 1200, 20, new BConf(-PI/180))); 80 //_barrList.add(new BarricadeTriangle(900,1200,200,new BConf(+PI/180))); 81 82 _barrList.add(new BarricadeSquare(800,20,380,30,new BConf(eType.GOAL))); 83 for (Barricade bar : _barrList) { 84 _taskList.add(bar); 85 } 86 _player=new Player(); 87 _taskList.add(_player); 88 89 } 90 private Context getContext() { 91 // TODO 自動生成されたメソッド・スタブ 92 return null; 93 } 94 95 96 private boolean Collision(){ 97 Vec vec = new Vec(); 98 final Circle cir = _player.getPt(); 99 for(Barricade barr : _barrList){ 100 Def.eHitCode code = barr.isHit(cir, vec); 101 switch(code){ 102 case OUT: 103 _status = eStatus.GAMEOVER; 104 return true; 105 case GOAL: 106 _status=eStatus.GAMECLEAR; 107 return true; 108 case NO: 109 break; 110 default: 111 break; 112 } 113 } 114 return false; 115 } 116 117 public boolean onUpdate(){ 118 if( _status != eStatus.NORMAL ){ 119 return true; 120 } 121 if( Collision() ){ 122 return true; 123 } 124 for(int i=0; i<_taskList.size(); i++){ 125 if(_taskList.get(i).onUpdate()==false){ 126 _taskList.remove(i); 127 i--; 128 } 129 } 130 return true; 131 } 132 public void drawStatus(Canvas c){ 133 switch( _status ){ 134 case GAMEOVER: 135 { 136 mp1.pause(); 137 Paint paint = new Paint(); 138 paint.setTextSize(80); 139 paint.setColor(Color.BLACK); 140 c.drawText("GameOver", 40, 100, paint); 141 break; 142 } 143 case GAMECLEAR: 144 { 145 mp1.pause(); 146 Paint paint=new Paint(); 147 paint.setTextSize(80); 148 paint.setColor(Color.BLACK); 149 c.drawText("GameClear",40,100, paint); 150 } 151 break; 152 case NORMAL: 153 break; 154 default: 155 break; 156 } 157 } 158 159 public void onDraw(Canvas c){ 160 c.drawColor(Color.WHITE); 161 for(Task task:_taskList){ 162 task.onDraw(c); 163 } 164 drawStatus(c); 165 } 166} 167 168 169コード

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

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

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

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

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

guest

回答2

0

音声素材の読み込みが下記になっているのが気になります。

R.drawable.kusai

音声素材をres/rawに配置してみるといかがでしょうか?

投稿2015/02/16 09:56

jollyjoester

総合スコア1585

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

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

MikeDavis

2015/02/19 05:30

そこに配置してみたのですが、変わりません
guest

0

ベストアンサー

気になる点を以下に列挙します。こちらの勘違いがありましたらすみません。
・見た感じだとViewクラスの挙動に見えるが、Viewクラスを継承していない

lang

1@SuppressWarnings("unused") 2private void MediaPlayer(MediaPlayer mp1){ 3mp1=MediaPlayer.create(getContext(),R.drawable.kusai); 4mp1.start(); 5}

・音楽をセットするprivateメソッドのMediaPlayerをどこでも実行していない
getContext()メソッドをこのクラスでオーバーライドしており、nullを返している

追記
URLを教えていただきありがとうございます。
ゲーム状態を司っているクラスというわけですね。
でしたら、これを呼び出すSurfaceView系クラスのコンストラクタで
contextを引数に渡してGmaMgrコンストラクタを起動するのはどうでしょう?
(このページを元に改変します)

lang

1class GameSurfaceView extends SurfaceView implements SurfaceHolder.Callback, Runnable { 2 private GameMgr _gameMgr; //ここではフィールド宣言だけしておく 3 private Thread _thread; 4 5 public GameSurfaceView(Context context) { 6 super(context); 7 getHolder().addCallback(this); 8 _gameMgr = new GmaMgr(context); //Context情報を渡してコンストラクタ起動 9 } 10 //以下略 11}

GmaMgr側では、コンストラクタをContext型の引数を受け取るように変更し、
コンストラクタ内でmp1に音楽をセットし、再生する命令を記述するといいと思います。
ただし、MediaPlayer.createメソッドの第一引数はgetContext()ではなく、
コンストラクタ起動時に渡したContext型引数にするのを忘れずに。

それと、前の方も指摘してますが、第二引数がR.drawable.*なのがおかしい気がします。
drawableは画像を入れるディレクトリを指しているので。

投稿2015/02/18 08:40

編集2015/02/19 09:08
swordone

総合スコア20651

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

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

MikeDavis

2015/02/19 01:59

回答ありがとうございます。 これらの点を解決するには、どのようなコードを記述すればよろしいのでしょうか?
swordone

2015/02/19 02:10

一つ確認させてください このコードで問題なのは「音が出ない」の1点ですか? コード内容からして画面描画(+BGM再生)のクラスだと推測しているのですが、 描画がきちんとされるのであれば、どのようにしてこのクラスを使っているのでしょうか?
MikeDavis

2015/02/19 09:45

できました! ありがとうございました! 下の方も、ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問