2014-02-20 4 views
1

У меня проблемы с 2D-платформенной игрой. Я получаю сообщение об ошибке, которое читает, что говорит название вопроса. Вот мои файлы Game.java и Window.java. Пожалуйста, скажите мне, что я должен делать. Я пробовал массу вещей, и я просто не знаю, куда идти или что делать. Заранее спасибо :)«Конструктор Window (int, int, String, Game) не определен»

Window.java

package com.sam.platform.window;  
import java.awt.Dimension;  
import javax.swing.JFrame;  

public class Window 
{ 
    public Window(int w, int h, String title, Game game) 
    { 
     game.setPreferredSize(new Dimension(w, h)); 
     game.setMaximumSize(new Dimension(w, h)); 
     game.setMinimumSize(new Dimension(w, h)); 

     JFrame frame = new JFrame(title); 
     frame.add(game); 
     frame.pack(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setResizable(true); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 

     game.start(); 
    } 

} 

Game.java

package com.sam.platform.window; 

import java.awt.Canvas; 
import java.awt.Color; 
import java.awt.Graphics; 
import java.awt.Window; 
import java.awt.image.BufferStrategy; 

import com.sam.platform.framework.ObjectId; 

public class Game extends Canvas implements Runnable 
{ 
    private static final long serialVersionUID = -414187095722102896L; 
    private boolean running = false; 
    private Thread thread; 

    public static int WIDTH, HEIGHT; 
    //Object 
    Handler handler; 


    private void init() 
    { 
     WIDTH = getWidth(); 
     HEIGHT = getHeight(); 


     handler = new Handler(); 

     handler.addObject(new Player(100, 100, handler, ObjectId.Player)); 

     handler.createLevel(); 

     this.addKeyListener(new KeyInput(handler)); 
    } 


    public synchronized void start(){ 
     if(running) 
      return; 

     running = true; 
     thread = new Thread(this); 
     thread.start(); 

    } 

    public void run() 
    { 
     init(); 
     this.requestFocus(); 
     long lastTime = System.nanoTime(); 
     double amountOfTicks = 60.0; 
     double ns = 1000000000/amountOfTicks; 
     double delta = 0; 
     long timer = System.currentTimeMillis(); 
     int updates = 0; 
     int frames = 0; 
     while(running){ 
      long now = System.nanoTime(); 
      delta += (now - lastTime)/ns; 
      lastTime = now; 
      while(delta >= 1){ 
       tick(); 
       updates++; 
       delta--; 
      } 
      render(); 
      frames++; 

      if(System.currentTimeMillis() - timer > 1000){ 
       timer += 1000; 
       System.out.println("FPS:" + frames + " TICKS: " + updates); 
       frames = 0; 
       updates = 0; 
      } 
     } 
    } 

    private void tick() 
    { 
     handler.tick(); 
    } 

    private void render() 
    { 
     BufferStrategy bs = this.getBufferStrategy(); 
     if(bs == null) 
     { 
      this.createBufferStrategy(3); 
      return; 
     } 

     Graphics g = bs.getDrawGraphics(); 
     ////////////////////////////////// 
     //Draw Here 
     g.setColor(Color.black); 
     g.fillRect(0, 0, getWidth(), getHeight()); 

     handler.render(g); 

     ////////////////////////////////// 
     g.dispose(); 
     bs.show(); 

    } 
    public static void main(String args[]){ 
     new Window(900, 900, "Hop", new Game()); //error is here "The constructor     Window(int, int, String, Game) is undefined" 

    } 


} 
+0

Как вы создали экземпляр класса 'Window'? – lakshman

+0

BTW. Это хорошая причина, по которой вы используете AWT (т. Е. Окно, холст), а не Swing (например, JFrame, JPanel)? Или, подумайте об этом, JavaFX. (Как я понимаю, Oracle прекращает разработку Swing, начиная с Java 1.8, в пользу JavaFX.) – Paul

ответ

2

Ваш Window класс это хорошо, но класс вы импортируете в Game является java.awt.Window ,

Вы могли бы решить это, выполнив новый com.sam.platform.window.Window(...), но я бы посоветовал вам это, это просто смутит вас.

Переименуйте класс на что-то вроде GameWindow.

+0

Я просто удалил импорт «java.awt.Window», теперь он отлично работает :) – invadingdingo

2

У вас есть два разных класса: Window, используемый в вашем классе Game. Один из них - com.sam.platform.window.Window. Другой - java.awt.Window. Поскольку вы импортировали java.awt.Window в свой класс Game, он думает, что вы пытаетесь создать экземпляр одного из них (а не свой собственный класс Window).

Предлагаю переименовать свой класс, чтобы устранить неоднозначность (и избежать путаницы), скажем, GameWindow.

+0

Спасибо! Я удалил импорт java.awt.Window, и теперь он отлично работает! Ты обалденный! – invadingdingo

+1

Хорошо. Но переименуйте свой класс в нечто иное, чем «Window»; вы не пожалеете об этом. – Paul

+0

Также - согласно моему комментарию выше - есть ли причина, по которой вы используете классы AWT, а не Swing (или JavaFX)? – Paul

Смежные вопросы