Ver a proveniência

Moved Renderer

master
Kevin Li há 12 anos
ascendente
cometimento
5ae8ade3cd
3 ficheiros alterados com 124 adições e 158 eliminações
  1. +119
    -37
      src/Render.java
  2. +0
    -120
      src/Renderer.java
  3. +5
    -1
      src/Screen.java

+ 119
- 37
src/Render.java Ver ficheiro

@@ -1,37 +1,119 @@
package edu.stuy.goldfish;


import java.awt.Color;

public class Render {
public Render (int width, int height) {
}

public Render () {
this(100,100);
}



/**
* Render a color to a position
*
* This should draw to a buffer, which should be
* rendered with render()
*
* @param x The x coordinate
* @param y The y coordinate
* @param c The color to draw
*/
public void draw (int x, int y, Color c) {

}

/**
* Renders the stored buffer to the screen.
*/
public void render () {
}

}
import java.awt.Canvas;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.image.BufferStrategy;
import java.awt.image.BufferedImage;
import java.awt.image.DataBufferInt;
import javax.swing.JFrame;
public class Renderer extends Canvas implements Runnable {
private static final long serialVersionUID = 1L;
public static int width = 320;
public static int height = 240;
public static int scale = 2;
public String title = "Title";
private Thread thread;
private JFrame frame;
private boolean running = false;
private Screen screen;
private BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
private int[] pixels = ((DataBufferInt) image.getRaster().getDataBuffer()).getData();
public Renderer(int width, int height) {
System.out.println(width);
}
public Renderer() {
Dimension size = new Dimension(width*scale, height*scale);
setPreferredSize(size);
screen = new Screen(width, height);
frame = new JFrame();
}
public synchronized void start() {
running = true;
thread = new Thread(this, "Display");
thread.start();
}
public synchronized void stop() {
running = false;
try {
thread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public void run() {
long lastTime = System.nanoTime();
long timer = System.currentTimeMillis();
double delta = 0;
int frames = 0;
int updates = 0;
long now;
while (running) {
now = System.nanoTime();
delta += (now - lastTime) * 6.0 / 100000000.0;
lastTime = now;
while (delta >= 1) {
update();
updates++;
delta--;
render();
frames++;
}
if (System.currentTimeMillis() - timer > 1000) {
timer += 1000;
frame.setTitle(title + " | updates: " + updates + " | frames: "+ frames);
frames = 0;
updates = 0;
}
}
stop();
}
public void update() {
}
public void render() {
BufferStrategy bs = getBufferStrategy();
if (bs == null) {
createBufferStrategy(3);
return;
}
screen.clear();
screen.render();
for (int i = 0; i < pixels.length; i++) {
pixels[i] = screen.pixels[i];
}
Graphics g = bs.getDrawGraphics();
g.drawImage(image, 0, 0, getWidth(), getHeight(), null);
g.dispose();
bs.show();
}
public static void main(String[] args) {
Renderer render = new Renderer();
render.frame.setResizable(false);
render.frame.setTitle(render.title);
render.frame.add(render);
render.frame.pack();
render.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
render.frame.setLocationRelativeTo(null);
render.frame.setVisible(true);
render.start();
}
}

+ 0
- 120
src/Renderer.java Ver ficheiro

@@ -1,120 +0,0 @@
import java.awt.Canvas;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.image.BufferStrategy;
import java.awt.image.BufferedImage;
import java.awt.image.DataBufferInt;
import javax.swing.JFrame;
public class Renderer extends Canvas implements Runnable {
private static final long serialVersionUID = 1L;
public static int width = 320;
public static int height = 240;
public static int scale = 2;
public String title = "Title";
private Thread thread;
private JFrame frame;
private boolean running = false;
private Screen screen;
private BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
private int[] pixels = ((DataBufferInt) image.getRaster().getDataBuffer()).getData();
public Renderer(int width, int height) {
System.out.println(width);
}
public Renderer() {
Dimension size = new Dimension(width*scale, height*scale);
setPreferredSize(size);
screen = new Screen(width, height);
frame = new JFrame();
}
public synchronized void start() {
running = true;
thread = new Thread(this, "Display");
thread.start();
}
public synchronized void stop() {
running = false;
try {
thread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public void run() {
long lastTime = System.nanoTime();
long timer = System.currentTimeMillis();
double delta = 0;
int frames = 0;
int updates = 0;
long now;
while (running) {
now = System.nanoTime();
delta += (now - lastTime) * 6.0 / 100000000.0;
lastTime = now;
while (delta >= 1) {
update();
updates++;
delta--;
render();
frames++;
}
if (System.currentTimeMillis() - timer > 1000) {
timer += 1000;
frame.setTitle(title + " | updates: " + updates + " | frames: "+ frames);
frames = 0;
updates = 0;
}
}
stop();
}
public void update() {
}
public void render() {
BufferStrategy bs = getBufferStrategy();
if (bs == null) {
createBufferStrategy(3);
return;
}
screen.clear();
screen.render();
for (int i = 0; i < pixels.length; i++) {
pixels[i] = screen.pixels[i];
}
Graphics g = bs.getDrawGraphics();
g.drawImage(image, 0, 0, getWidth(), getHeight(), null);
g.dispose();
bs.show();
}
public static void main(String[] args) {
Renderer render = new Renderer();
render.frame.setResizable(false);
render.frame.setTitle(render.title);
render.frame.add(render);
render.frame.pack();
render.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
render.frame.setLocationRelativeTo(null);
render.frame.setVisible(true);
render.start();
render.screen.draw(100,100,0xFFFFFF);
}
}

+ 5
- 1
src/Screen.java Ver ficheiro

@@ -1,3 +1,4 @@
import java.util.Random;
public class Screen {
@@ -5,6 +6,8 @@ public class Screen {
public int[] pixels;
private int[] _grid;
Random random = new Random();
public Screen(int width, int height) {
this.width = width;
this.height = height;
@@ -22,7 +25,8 @@ public class Screen {
public void render() {
for (int x = 0; x < width; x++) {
for (int y = 0; y < height; y++) {
pixels[x + y * width] = _grid[x + y * width];
pixels[x+y*width] = random.nextInt();
//pixels[x + y * width] = _grid[x + y * width];
}
}
}


Carregando…
Cancelar
Guardar