java - 如何在我的最终屏幕中显示一个整数来计算我的游戏时间?
问题描述
我正在制作一个简单的游戏来学习如何使用 Android Studio。游戏的目标是尽可能快地完成一些简单的任务。在我的主游戏屏幕中,我有一个线程每秒计数一个 int,因此玩家知道过去了多少时间。当玩家完成所有简单的任务后,游戏进入结束画面。现在我想在最终屏幕中显示时间,以便玩家知道他们完成的速度。运行游戏时出现错误。
这是每秒运行线程的代码:
Timer d = new Timer(true);
thread1 thread1 = new thread1(this, myCanvas);
t.scheduleAtFixedRate(thread1, 0, 1000);
这是线程每秒执行的刻度函数:
public void tick1(){
timer++;
}
这是计时器的吸气剂:
public int getTimer(){
return timer;
}
当游戏结束并进入结束屏幕时,我使用 getTimer() 来创建一个应该显示计时器的文本视图:
err = (TextView)findViewById(R.id.textView);
err.setText("Tijd: "+ timer+"");
这是我尝试运行它时收到的错误消息:
2021-03-06 11:18:38.153 21729-21729/com.example.test_game E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.test_game, PID: 21729
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.test_game/com.example.test_game.Eindscherm}: java.lang.NullPointerException: Attempt to invoke virtual method 'int com.example.test_game.MyCanvas.getTimer()' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3792)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3968)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2307)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:246)
at android.app.ActivityThread.main(ActivityThread.java:8506)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int com.example.test_game.MyCanvas.getTimer()' on a null object reference
at com.example.test_game.Eindscherm.onCreate(Eindscherm.java:24)
at android.app.Activity.performCreate(Activity.java:8198)
at android.app.Activity.performCreate(Activity.java:8182)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3765)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3968)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2307)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:246)
at android.app.ActivityThread.main(ActivityThread.java:8506)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)
解决方案
我认为当您处于结束活动时,您正在调用getTimer()
该方法在另一个活动中的方法。
所以你不能在活动中这样做。因为活动与 JAVA 类不同。
您需要做的就是将数据传递给结束活动。别担心它是如此简单,我会告诉你如何做到这一点。
在第一个活动中:
FirstAcitivity {
// when you want to go to SecondActivity
Intent i = new Intent(context, SecondActivity.class)
//passing the data by Intent
i.putExtra("ex1", yourIntegenr);
}
在第二个活动中:
SecondActivity{
//checking the Intent has valid data
if (getIntent().getExtras() != null) {
//getting the data from Intent
int time = getIntent().getExtras().getSerializable("ex1");
yourTextView.setText(time.toString());
}
}
推荐阅读
- android - Android Studio 版本修复
- android - SearchView 不显示在带有嵌套片段的工具栏上
- node.js - Mongoose Aggregate 中的多个 $match 值
- c# - 页面不保留多页面 WPF/MVVM 应用程序中的 UI 更改
- bash - 具有可变路径的 Ansible 模块 lineinfile
- javascript - 嵌套 JSON 和 awesomecomplete.js
- data-binding - sap.m.DatePicker 的 SAPUI5 数据绑定
- linux - Cronjob 正在运行但未执行 python 脚本
- google-cloud-platform - 如何从谷歌云下载 NYC-TLC-GREEN_2015/2014 公共数据集到我的本地系统?
- excel - 指数公式excel