B
Bw2801
Gast
Hey Leute, ich habe mich mal daran gesetzt, in einem 800 * 600 Pixel großem Fenster ein 265 * 265 Pixel großes Feld mit zufällig gefärbten Pixeln zu rendern. Das ganze habe ich nach einem Tutorial auf Youtube gemacht.
Mein Problem dabei ist nur: Ich bekomme nur einen einzigen Pixel links oben in die Ecke des Fensters, keine 70225 (256 * 256) die eigentlich dort sein müssten (zumindest laut Video).
Display Class
Render Class
Screen Class
Ich weiß nicht, wo hier der Fehler liegen könnte,
hoffentlich könnt ihr mir helfen!
Danke schonmal im vorraus,
Bw2801
Mein Problem dabei ist nur: Ich bekomme nur einen einzigen Pixel links oben in die Ecke des Fensters, keine 70225 (256 * 256) die eigentlich dort sein müssten (zumindest laut Video).
Display Class
Java:
package java3dgame;
import java.awt.Canvas;
import java.awt.Graphics;
import java.awt.image.BufferStrategy;
import java.awt.image.BufferedImage;
import java.awt.image.DataBufferInt;
import java3dgame.graphics.*;
import javax.swing.JFrame;
public class Display extends Canvas implements Runnable{
public static final int width = 800;
public static final int height = 600;
public static final String title = "Java3DGame Pre-Alpha 0.01";
private Thread thread;
private Screen screen;
private BufferedImage img;
private Render render;
private boolean running = false;
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();
}
private 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){
System.exit(0);
}
}
public void run(){
while(running){
tick();
render();
}
}
private void tick(){
}
private void render(){
BufferStrategy bs = this.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, 0, 0, width*20, height*20, 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.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(width, height);
frame.setLocationRelativeTo(null);
frame.setResizable(false);
frame.setVisible(true);
game.start();
}
}
Render Class
Java:
package java3dgame.graphics;
public class Render {
public final int width;
public final int height;
public final int[] pixels;
public Render(int width, int height){
this.width = width;
this.height = height;
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;
for(int x = 0; x < render.width; x++){
int xPix = x * xOffset;
pixels[yPix+xPix*width] = render.pixels[x+y*render.width];
}
}
}
}
Screen Class
Java:
package java3dgame.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);
}
}
Ich weiß nicht, wo hier der Fehler liegen könnte,
hoffentlich könnt ihr mir helfen!
Danke schonmal im vorraus,
Bw2801