【发布时间】:2021-10-25 00:54:33
【问题描述】:
我正在尝试在 Android Studio 中调整蛇游戏,以便游戏结束触发 GameOverActivity。问题是游戏文本当前是在 redrawCanvas() 函数中写入屏幕的:
public void redrawCanvas(Canvas canvas) {
if (this.snake.isEnabled()) {
this.snake.draw(canvas);
this.apple.draw(canvas);
this.score.draw(canvas);
} else {
Paint p = getPaint();
p.setTextSize(50);
p.setColor(Color.BLACK);
canvas.drawText("Game over!", 100, 100, p);
// LAUNCH PLAY AGAIN ACTIVITY HERE?
}
}
并且这个redrawCanvas 代码包含在一个扩展SurfaceView 的类中。我通常会调用一个意图,但我不能从 SurfaceView 类中调用 startActivity()。我的 SnakeGameActivity 只是设置了内容视图,所有代码都发生在这个表面视图中。这是SnakeGameActivity中的代码:
public class SnakeGameActivity extends com.codepath.simplegame.GameActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//before activity is created : cold start
//switch back to original Theme (App Theme)
setTheme(R.style.AppTheme);
switchFullscreen();
setContentView(new SnakeGamePanel(this));
}
}
这是 SnakeGamePanel 中的完整代码:
public class SnakeGamePanel extends AbstractGamePanel {
public SnakeGamePanel(Context context) {
super(context);
}
private SnakeActor snake;
private AppleActor apple ;
private ScoreBoard score;
private boolean isPaused = false;
@Override
public void onStart() {
this.snake = new SnakeActor(100, 100);
this.apple = new AppleActor(200, 50);
this.score = new ScoreBoard(this);
}
@Override
public void onTimer() {
if (!isPaused) {
if (this.snake.checkBoundsCollision(this)) {
this.snake.setEnabled(false);
}
this.snake.move();
if (this.apple.intersect(this.snake)) {
this.snake.grow();
this.score.earnPoints(50);
this.apple.reposition(this);
}
}
}
@Override
public void redrawCanvas(Canvas canvas) {
if (this.snake.isEnabled()) {
this.snake.draw(canvas);
this.apple.draw(canvas);
this.score.draw(canvas);
} else {
Paint p = getPaint();
p.setTextSize(50);
p.setColor(Color.BLACK);
canvas.drawText("Game over!", 100, 100, p);
// LAUNCH PLAY AGAIN ACTIVITY?
}
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
this.snake.handleKeyInput(keyCode);
if (keyCode == KeyEvent.KEYCODE_G) {
this.onStart();
}
if (keyCode == KeyEvent.KEYCODE_P) {
isPaused = !isPaused;
}
return true;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
this.snake.handleTouchInput(event);
return true;
}
return false;
}
}
游戏结束时有什么方法可以开始活动吗?
【问题讨论】:
-
什么是
SnakeGamePanel?你会展示这个类的相关部分,特别是它的声明和构造函数。
标签: android android-studio surfaceview start-activity