package gal.doron.ballinthehole;
import android.media.MediaPlayer;
public class Bricks
{
Brick[][] bricks;
public Bricks(int rows, int cols, float brickW, float brickH)
{
bricks = new Brick[rows][cols];
float x=0,y=0;
for(int i=0;i<rows;i++,y+=brickH)
{
x=0;
for(int j=0;j<cols;j++,x+=brickW)
{
bricks[i][j] = new Brick(x, y, brickW, brickH, 1);
}
}
}
public boolean isHitAll()
{
for(int i=0;i<rows();i++)
{
for(int j=0;j<cols();j++)
{
if(bricks[i][j].getType()!=0 && bricks[i][j].getType()!=4)
return false;
}
}
MediaPlayer mp = MediaPlayer.create(this, R.raw.hopa);
mp.start();
return true;
}
}
各位大家好,当你调用'isHitAll()'的函数为真时(当所有的砖被击中时),你能帮我发声(在我的情况下是声音cal“hopa”)吗?
这是我的尝试..我在这一行得到错误“MediaPlayer mp = MediaPlayer.create(this,R.raw.hopa);”
“MediaPlayer类型中的方法crate(Context,int)不适用于参数(Brick,int)”。
抱歉我的英文,谢谢!
答案 0 :(得分:1)
您收到错误The method crate(Context, int) in the type MediaPlayer is not applicable for the arguments (Brick,int)
。因为您无法传递&#34; Brick
&#34;类型的对象需要Context
的地方。由于Brick
不是也不会扩展或实施活动,因此无法引用当前的Activity
Context
。
可能的解决方案是在Context
课程中添加Brick
字段,然后使用Getter
/ Setter
设置Context
字段您的MainActivity
&#39; OnCreate
。然后,您想要使用Context
字段构建MediaPlayer。
示例:
package gal.doron.ballinthehole;
import android.media.MediaPlayer;
Context context;
public class Bricks
{
Brick[][] bricks;
public Bricks(int rows, int cols, float brickW, float brickH)
{
bricks = new Brick[rows][cols];
float x=0,y=0;
for(int i=0;i<rows;i++,y+=brickH)
{
x=0;
for(int j=0;j<cols;j++,x+=brickW)
{
bricks[i][j] = new Brick(x, y, brickW, brickH, 1);
}
}
}
public boolean isHitAll()
{
for(int i=0;i<rows();i++)
{
for(int j=0;j<cols();j++)
{
if(bricks[i][j].getType()!=0 && bricks[i][j].getType()!=4)
return false;
}
}
MediaPlayer mp = MediaPlayer.create(context, R.raw.hopa);
mp.start();
return true;
}
public void setContext(Context context){
this.context = context;
}
public Context getContext(Context context){
return this.context;
}
}
在MainActivity
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Brick.setContext(getContext());
}
答案 1 :(得分:0)
MediaPlayer需要一个Activity的上下文才能被创建。创建一个扩展Application的类并将应用程序上下文存储在公共静态变量中是有帮助的。您也可以将活动的上下文传递给&#39; Bricks&#39;像这样的类构造函数:
编辑,因为您没有从某个活动中调用此类,您应该尝试创建一个名为MyApplication的新类,并按如下方式声明:
public class MyApplication extends Application {
public static Context context;
onCreate() {
super.onCreate();
context = getApplicationContext();
}
}
编辑:然后在Bricks中,在创建MediaPlayer时使用“应用程序”上下文。
public class Bricks
{
MediaPlayer mp;
Brick[][] bricks;
public Bricks(int rows, int cols, float brickW, float brickH)
{
mp = MediaPlayer.create(MyApplication.context, R.raw.hopa);
bricks = new Brick[rows][cols];
float x=0,y=0;
for(int i=0;i<rows;i++,y+=brickH)
{
x=0;
for(int j=0;j<cols;j++,x+=brickW)
{
bricks[i][j] = new Brick(x, y, brickW, brickH, 1);
}
}
}
public boolean isHitAll()
{
for(int i=0;i<rows();i++)
{
for(int j=0;j<cols();j++)
{
if(bricks[i][j].getType()!=0 && bricks[i][j].getType()!=4)
return false;
}
}
mp.start();
return true;
}
}
希望这有帮助!