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