有人可以帮助新手在游戏中获得计时器吗? :P 在过去的一两天里,我一直在尝试各种方法,但我仍然无法让它发挥作用。这里有人有解决方案吗?
基本上,我有一款游戏,其目的是在最快的时间内收集6件物品。所以当然我想要一个从0开始计时的计时器显示,用户可以跟踪他的进展情况。
以下是相关课程的骨架 -
public class StartingPoint extends Applet implements Runnable{
Task t = new Task();
Menu menu = new Menu();
int num;
public static enum STATE{
MENU,
GAME,
};
public static STATE State = STATE.MENU;
public void init() {
setSize(800, 600);
}
public void start() {
if(num < 2){
Thread thread = new Thread(this);
thread.start();
num++;
}
}
public void run() {
if (State == STATE.GAME) {
while (true) {
repaint();
try {
Thread.sleep(17);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
} else if (State == STATE.MENU) {
while (true) {
repaint();
try {
Thread.sleep(17);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public void paint(Graphics g) {
if (State == STATE.GAME) {
ball.paint(g);
} else if (State == STATE.MENU) {
menu.render(g);
}
}
}
public class Task extends TimerTask {
int seconds;
int minutes;
public String time;
public void run() {
seconds++;
if (seconds == 60) {
seconds = 0;
minutes++;
}
String s = String.valueOf(seconds);
String m = String.valueOf(minutes);
if (seconds < 10) {
time = (m + ":0" + s);
} else {
time = (m + ":" + s);
}
}
}
public class Start {
private static Timer ourClock;
private static TimerTask ourTask;
public static void update(){
ourClock = new Timer();
ourTask = new Task();
ourClock.scheduleAtFixedRate(ourTask,1000,1000);
}
}
我知道很多,但是如果有人能帮我展示字符串&#34;时间&#34;从applet上的任务类开始,它会非常有用。
谢谢!
P.S注意它是Applet而不是JApplet。 : - / 另外,如果你能想出一种不能使用我现有课程的方法,那就去吧!我对任何建议持开放态度,我只想完成这件事,我已经做了好几天...
如果我只是尝试绘制字符串&#34; time&#34;
,这是错误消息Exception in thread "AWT-EventQueue-1" java.lang.NullPointerException: String is null
at sun.java2d.SunGraphics2D.drawString(SunGraphics2D.java:2880)
at Start.paint(Start.java:23)
at StartingPoint.paint(StartingPoint.java:229)
at StartingPoint.update(StartingPoint.java:215)
at sun.awt.RepaintArea.updateComponent(RepaintArea.java:255)
at sun.lwawt.LWRepaintArea.updateComponent(LWRepaintArea.java:47)
at sun.awt.RepaintArea.paint(RepaintArea.java:232)
at sun.lwawt.LWComponentPeer.handleJavaPaintEvent(LWComponentPeer.java:1312)
at sun.lwawt.LWComponentPeer.handleEvent(LWComponentPeer.java:1196)
at java.awt.Component.dispatchEventImpl(Component.java:4959)
at java.awt.Container.dispatchEventImpl(Container.java:2292)
at java.awt.Component.dispatchEvent(Component.java:4705)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:746)
at java.awt.EventQueue.access$400(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:697)
at java.awt.EventQueue$3.run(EventQueue.java:691)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:86)
at java.awt.EventQueue$4.run(EventQueue.java:719)
at java.awt.EventQueue$4.run(EventQueue.java:717)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:716)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
答案 0 :(得分:0)
我认为你是从错误的角度来看这个。
在Java中,您可以在现有类中创建内部类。这将允许您的实例类与其父母进行对话。
实际上(根据我有限的经验)在Java中使用Timers的标准。
public class Start {
private static Timer ourClock;
public static String time;
public static void update(){
ourClock = new Timer();
ourClock.scheduleAtFixedRate(new TimerTask(){
public void run() {
int seconds;
int minutes;
seconds++;
if (seconds == 60) {
seconds = 0;
minutes++;
}
String s = String.valueOf(seconds);
String m = String.valueOf(minutes);
if (seconds < 10) {
time = (m + ":0" + s);
} else {
time = (m + ":" + s);
}
},1000,1000);
}
}
你可以找到一些这个@
的好例子虽然这个问题与其他问题有点重复,但我认为这更像是一个与其他语言不同的Java的观点或范例问题。通常,内部或嵌套类的使用实际上是您在今天的Java中看到的。但是,使用C ++和C#会受到影响。在某些情况下,它被认为是非常糟糕的做法(PHP),而其他仅仅是不允许的(Objective-C)。
话虽如此,仅仅因为一个人并不喜欢它并不意味着它不应该被使用,只是你应该回顾为什么使用它,以及它如何适应你的环境。