2016-06-03 9 views
0

Ich sah ein Youtube-Video von jemandem, der einen MineCraft-Klon, der kompiliert und lief ohne Fehler. Aber als ich es komplett kopiert habe, habe ich einen Fehler bekommen.Minecraft Klon auf Java Eclipse Fehler

Der Fehler ist in der Render-Klasse: int pixels = new int(width * height);

Render:

package com.mads.minecraft.graphics; 

public class Render { 
    public final int width; 
    public final int height; 
    public int[] pixels; 

    public Render(int width, int height){ 
     this.width = width; 
     this.height = height; 
     int pixels = new int(width * height); 

    } 

    public void draw(Render render, int xOffset, int yOffset){ 
     for (int y = 0; y < render.height; y++){ 
      int yPix = y + yOffset; 
      if(yPix < 0 || yPix >= height) continue; 

      for (int x = 0; y < render.width; x++){ 
       int xPix = x + xOffset; 
       if(xPix < 0 || xPix >= width) continue; 

       pixels[xPix + yPix + width] = render.pixels[x + y * render.width]; 
      } 
     } 
    } 
} 

Anzeige:

package com.mads.minecraft; 

import java.awt.Canvas; 
import java.awt.Graphics; 
import java.awt.image.BufferStrategy; 
import java.awt.image.BufferedImage; 
import java.awt.image.DataBufferInt; 

import javax.swing.JFrame; 

import com.mads.minecraft.graphics.Screen; 

public class Display extends Canvas implements Runnable{ 

    static final long serialVersionUID = 1L; 
    public static final int WIDTH = 800; 
    public static final int HEIGHT = 600; 
    public static final String TITLE = "Minecraft Alpha"; 

    private Thread thread; 
    private boolean running = false; 
    private BufferedImage img; 
    private Screen screen; 
    private int[] pixels; 

    public Display(){ 
     screen = new Screen(WIDTH, HEIGHT); 
     img = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB); 
     pixels = ((DataBufferInt) img.getRaster().getDataBuffer()).getData(); 
    } 

    public void start(){ 
     if(running) return; 
     running = true; 
     thread = new Thread(this); 
     thread.start(); 
    } 

    public void stop(){ 
     if(!running) return; 
     running = false; 
     try { 
      thread.join(); 
     } catch (Exception e){ 
      e.printStackTrace(); 
      System.exit(0); 

     } 
    } 

    public void run(){ 
     while(running){ 
      tick(); 
      render(); 
     } 
    } 

    public void tick(){} 

    public void render(){ 
     BufferStrategy bs = getBufferStrategy(); 
     if(bs == null){ 
      createBufferStrategy(3); 
      return; 
     } 
     screen.render(); 
     for (int i = 0; i < WIDTH * HEIGHT; i++){ 
      pixels[i] = screen.pixels[i]; 
     } 
     Graphics g = bs.getDrawGraphics(); 
     g.drawImage(img, WIDTH, HEIGHT, null); 
     g.dispose(); 
     bs.show(); 
    } 

    public static void main(String []args){ 
     Display game = new Display(); 
     JFrame frame = new JFrame(); 
     frame.add(game); 
     frame.pack(); 
     frame.setTitle(TITLE); 
     frame.setSize(WIDTH, HEIGHT); 
     frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE); 
     frame.setLocationRelativeTo(null); 
     frame.setResizable(false); 
     frame.setVisible(true); 

     game.start(); 
    } 
} 

Screen:

package com.mads.minecraft.graphics; 

import java.util.Random; 

public class Screen extends Render{ 
    private Render test; 

    public Screen(int width, int height) { 
     super(width, height); 
     Random random = new Random(); 
     test = new Render(256, 256); 
     for(int i = 0; i < 256 * 256; i++) { 
      test.pixels[i] = random.nextInt(); 
     } 
    } 

    public void render(){ 
     draw(test, 0, 0); 
    } 
} 
+1

Wir helfen könnten, wenn Sie Ihren Fehler posten – mcky

+0

Der Fehler in der Render-Klasse ist: "int Pixel = new int (Breite * Höhe); " –

+1

Versuchen 'int Pixel = Breite * Höhe;' – TychoTheTaco

Antwort

1

offenbar Sie versuchen, drin ialize ein Array in Render. Alles, was Sie tun müssen, ist int pixels = new int(width * height) in Render Konstruktor mit diesem ersetzen:

pixels = new int[width * height]; 
2

Nach einer ungültigen Anweisung, die Sie ersetzen müssen:

int pixels = new int(width * height); (int ein primitiven Daten Referenz-Typen nicht-Typen ist, so kann man nicht ein Objekt)

von

pixels = new int[width * height] schaffen; (Sie können ein Array von int erstellen. Sie haben bereits die Variable pixels auf Instanzebene als int [] deklariert, so dass Sie nicht erneut deklarieren müssen)

Hoffe, das hilft.