Android Studio - - 只有1个按钮在MainActivity中播放声音

时间:2017-02-17 22:40:42

标签: java android audio

目前,我正在处理简单的俄罗斯轮盘申请。

它有三个按钮:

  • 旋转 - 它只是播放旋转桶的声音(目前有效)。

  • 插入圆形 - 将一颗子弹放入左轮手枪中(尚未获得)然后播放声音(正常工作)。

  • 播放 - 使用布尔方式失火或发射一个圆形(如果它发射一个圆形,将子弹从左轮手枪中取出)完全取决于机会和左轮手枪中有多少子弹。目前我使用1到6之间的随机数,0是你启动应用程序时开始的默认轮次(所以它包括在左轮手枪中没有轮次的机制)。

以下是我的活动:

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.media.MediaPlayer;

import java.util.Random;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    //Buttons of Main-activity displayed
    Button one = (Button) findViewById(R.id.spinner);
    one.setOnClickListener(this);
    Button two = (Button) findViewById(R.id.insert_Round);
    two.setOnClickListener(this);
    Button three = (Button) findViewById(R.id.fire_weapon);
    three.setOnClickListener(this);
    int rounds_left = 0;
}

//Let's make addition.
public static int add(int i) {
    i++;
    return i;
}

@Override
public void onClick (View v) {
    int rounds_left = 0;
    switch (v.getId()) {
        case R.id.spinner:
            //play spinner sound
            final MediaPlayer mp1 = MediaPlayer.create(this, R.raw.spinnersound);
            mp1.start();
            break;
        case R.id.insert_Round:
            //play insert_round sound
            final MediaPlayer mp2 = MediaPlayer.create(this, R.raw.insert_round_sound);
            mp2.start();
            //Adds one round into chamber (I need help here)
            break;
        case R.id.fire_weapon:
            //Random number between 1 and 6... *Click* or *Fire*
            Random rand = new Random();
            int  play_chances = rand.nextInt(7) + 1;
            if (play_chances < rounds_left) {
                final MediaPlayer mp4 = MediaPlayer.create(this, R.raw.fire_sound);
                mp4.start();
                //Take a bullet away (need help here too)
            } else {
                final MediaPlayer mp3 = MediaPlayer.create(this, R.raw.misfire_sound);
                mp3.start();
            }
            break;
    }
}

}

到目前为止this是它的样子。

我有两个问题:

  1. 如何制作,以便当我按下“插入圆形”按钮时,我可以向我的rounds_left添加1轮?

    我能够创建一个添加方法(这就是所谓的吗?),这使得这种添加成为可能。我曾试图多次使用它无济于事。

    public static int add(int i) {
        i++;
        return i;
    }
    
  2. 在我卸完子弹后,如何离开rounds_left一轮?

1 个答案:

答案 0 :(得分:0)

1:案件内部R.id.insert_Round:

case R.id.insert_Round:
  if(rounds_left < 6)
    rounds_left++;

2:案件内部R.id.fire_weapon:

case R.id.fire_weapon:
    if(rounds_left > 1){
      //do stuff
      rounds_left--;
    } else {
      //play empty chamber sound
    }

未经请求的建议:

而不是one.setOnClickListener(this);我建议做更多的事情:

one.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
          whateverMethodOrCodeYouWantToTriggerWhenUserClicksOne();
        }

two.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
          whateverMethodOrCodeYouWantToTriggerWhenUserClicksTwo();
        }

您的代码将更易于阅读和维护。

此外:

public static int add(int i) {
    i++;
    return i;
}  

像这样的代码有一天会困扰你或一些可怜的维护者。这种方法不需要。它的名字不清楚,它会产生一些可能没有人期待的副作用。只需在适当的时候增加i,而不使用自定义方法。