Java er meget langsom i mit Graphics2D object
Hej eksperterJeg har leget lidt med Java for at se om jeg kunne lave lidt grafik i det, da min tanke er en dag at kunne lave lidt 2D spil, som tetris og Ping Pong.. men ligenu har jeg en masse udfordringer, bare at få java til at køre i den hastighed jeg gerne ville have det til.
Jeg har søgt lidt på nettet, og kan ikke rigtigt finde ud af hvorfor min computer er så langsom når den køre mit testprogram i fuld skærm (1920x1080), når jeg køre det i 800x600 køre den med 60fps, men i fuld skærm er det 29-31fps.
min testkode ser sådan her ud.
import java.awt.Color;
import javax.swing.*;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.Graphics;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
public class XGameFrame extends JFrame{
private static final long serialVersionUID = 1L;
private Image img;
private BufferedImage bi;
private double lx;
private double ly;
private double dx;
private double dy;
GraphicsDevice gd;
fps fps;
public XGameFrame(){
fps = new fps();
this.gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
this.setUndecorated(true);
gd.setFullScreenWindow(this);
this.loadImages();
bi = new BufferedImage(this.getWidth(),this.getHeight(),BufferedImage.TYPE_4BYTE_ABGR);
this.lx = 0;
this.ly = 0;
this.dx = 1;
this.dy = 2;
}
public Graphics2D getGraphics2D(){
return (Graphics2D)this.getGraphics();
}
public void loadImages(){
this.img = Toolkit.getDefaultToolkit().createImage(getClass().getResource("logo.gif"));
}
@Override
public void paint(Graphics g){
this.fps.tick();
Graphics2D g2 = this.getGraphics2D();
Graphics2D big = (Graphics2D)this.bi.getGraphics();
big.setColor(Color.black);
big.fillRect(0, 0, this.getWidth(), this.getHeight());
if(this.dy + this.ly < 0){
this.dy = Math.abs(this.dy);
}
else if(this.dy + this.ly + (this.img.getHeight(getOwner())*0.4) > this.getHeight()){
this.dy = -(this.dy);
}
if(this.dx + this.lx < 0){
this.dx = Math.abs(this.dx);
}
else if(this.dx + this.lx + (this.img.getWidth(getOwner())*0.4)-50 > this.getWidth()){
this.dx = -(this.dx);
}
this.ly = this.ly + this.dy;
this.lx = this.lx + this.dx;
big.drawImage(this.img, (int)lx, (int)ly, (int)(this.img.getWidth(getOwner())*0.4), (int)(this.img.getHeight(getOwner())*0.4), null);
big.setFont(new Font(Font.MONOSPACED,Font.PLAIN,12));
big.setColor(Color.red);
big.drawString("FPS: "+(int)fps.getFPS(),20,20);
g2.drawImage(this.bi, null, 0, 0);
}
}
på forhånd tak for hjælpen