我正在用帆布制作游戏。我需要这样做,所以当游戏赢了它会改变活动,但这只能在一个活动文件中完成。 所以我的游戏就像这样:它从MainActivity.class开始,然后创建画布并将其设置为视图。
MainAcitivity.java:
public class MainActivity extends Activity {
private MainGamePanel game;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
// making it full screen
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
// set our MainGamePanel as the View
game = new MainGamePanel(this, 1);
setContentView(game);
}
}
MainGamePanel.java:
public class MainGamePanel extends SurfaceView implements
SurfaceHolder.Callback {
public MainGamePanel(Context context, int lvl) {
super(context);
this.context = context;
Level = lvl;
getHolder().addCallback(this);
setFocusable(true);
thread = new MainThread(getHolder(), this);
ball = new com.csdevelopers.canvas.sprite.Ball(
BitmapFactory.decodeResource(getResources(), R.drawable.ball),
100, 100);
if (Level == 1) {
lvl1 = new lvl1(context);
}
public void checkWon1(){
if(lvl1.checkWon(ball)){
// change Activity HERE!!!
}
}
}
所以在public void checkWon1()中我无法更改Activity,因为无法从非Activity类调用intent。我怎样才能回到MainActivity并告诉它更改活动?
评论是否需要更多解释。
答案 0 :(得分:1)
你改变它:
Intent intent = new Intent().setClass(getContext(), ActivityToChange.class);
((Activity) getContext()).startActivity(intent);
答案 1 :(得分:0)
如果你的设置和我的一样,试试
下面的代码将进入surfaceView类
private void passToMainActivity() {
((MainActivity) context).callMe(dead);
}
下一个代码进入您的活动类,用于创建surfaceView类
public void callMe(boolean dead) {
Intent intent = new Intent(this,MainActivity2.class);
startActivity(intent);
finish();
}
取决于您是否有一个具有第二个线程的第三个 java 类,您可能需要暂停该线程
suspend();