2014-07-14 2 views
0

누구든지 초보자를 도와 게임에 타이머를 얻을 수 있습니까? : P 나는 지난 1-2 일 동안 다양한 접근법을 시도 해왔다. 여기에 해결책이있는 사람이 있습니까?애플릿에 타이머를 구현 하시겠습니까?

기본적으로 가장 빠른 시간에 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); 
    } 
} 

내가 많이 알고의 골격이지만, 누군가가 내 애플릿에 작업 클래스의 문자열 "시간"을 표시 좀 도와주세요 수 있다면, 그것은 것 정말 도움이됩니다.

감사합니다.

P.S 참고로 JApplet이 아닌 애플릿입니다. : -/ 또한 현재 가지고있는 수업을 사용하지 않는 방법을 생각해보십시오. 어떤 제안이든 열려 있어도이 일을 끝내고 싶습니다. 며칠 동안 작업하고 있습니다 ...

"time"문자열을 페인트하려고하면 오류 메시지가 표시됩니다.

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

내가 왜 '애플릿'이고 'JApplet'이 아닌지 물어봐도 될까요? Swing조차 JavaFX 8을 지원하는 EOL입니다. AWT는 너무 오랫동안 죽어 있었기 때문에 피요르드에게 피고인이라고 주장 할 수는 없었다. –

+0

나는 Youtube의 Mybringback에서 Java의 기초를 배웠다. 이 게임은 그가 튜토리얼에서 만든 게임을 기반으로합니다. 어떤 이유로 그는 애플릿을 사용했습니다. 나는 이유를 모른다. 비디오는 2012 년에 제작되었지만, 사람들이 말하는 방식으로 애플릿이 구식이었던 것처럼 들립니다. ?? 두 번째 게임에서는 확실히 JApplet을 사용합니다. 그래도이 게임으로 돌아 가기에는 너무 늦었습니다. 거의 끝났습니다. (변환이 쉬운 것이 아니라면) – RJrules64

답변

0

나는 당신이 틀린 관점에서 이것을보고 있다고 생각합니다.

Java에서 기존 클래스 내에 내부 클래스를 만들 수 있습니다. 이렇게하면 인스턴스가 설정된 클래스가 부모 클래스와 다시 이야기 할 수 있습니다.

사실은 (내 제한된 경험으로) Java에서 타이머를 사용하기위한 표준입니다. 이 질문은 다른 질문의 중복의 종류 나는

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 (PHP)와 PHP (Objective-C) 만 허용됩니다.

한 사람이 좋아하지 않는다고해서 사용해서는 안된다는 의미는 아닙니다. 사용하는 이유와 사용자 환경에 맞는 방법을 검토해야합니다.

+0

"시작"과 "작업"클래스를 합쳤습니까?멋지다. 배울 점이 있지만, 애플릿에서 타이머를 그리는 방법은 어떻게 될까? g.drawString (time, 300, 300); 작동하지 않는 것 같은데, 그냥 오류가 발생합니다. – RJrules64

+0

문자열을 검색하기 위해 draw 코드에서 start.time을 사용할 수 있어야합니다. [Bah Enter 커밋]. 아이디어 (그리고 이것은 깊이있는 대화가 될 수 있습니다)는 실행 코드와 렌더링 코드가 분리되어 있다는 것입니다. 렌더링 코드를 사용하여 실행 코드 뒤에있는 데이터 메서드에 액세스합니다. –

+0

실행 코드와 렌더링 코드를 분리하기 위해 어떤 코드를 사용해야합니까? 제발 그걸 쓸 수 있니? 죄송합니다. 새로운 내용이므로 얼마나 부탁드립니다. 너무 많이 묻는다면 걱정하지 마십시오. – RJrules64

관련 문제