好的,所以我正在制作一个游戏,其中用户将图像(在我的代码中称为“地图”)移动到游戏角色的后面,从而看起来好像角色正在移动。
程序运行时,性能会有所下降,并且背景图像(“地图”)会滞后并且并不总是重新绘制。
这是我的主班叫绘画的一堂课:
public graphics(int z,int s, int f)
{
x = z;
y = s;
d = f;
try {
map = ImageIO.read(new File("background.png"));
//br = ImageIO.read(new File("blackrectangle.jpg"));
s0 = ImageIO.read(new File("spriteshoot0.png"));
s10 = ImageIO.read(new File("spriteshoot10.png"));
s20 = ImageIO.read(new File("spriteshoot20.png"));
s30 = ImageIO.read(new File("spriteshoot30.png"));
s40 = ImageIO.read(new File("spriteshoot40.png"));
s50 = ImageIO.read(new File("spriteshoot50.png"));
s60 = ImageIO.read(new File("spriteshoot60.png"));
s70 = ImageIO.read(new File("spriteshoot70.png"));
s80 = ImageIO.read(new File("spriteshoot80.png"));
s90 = ImageIO.read(new File("spriteshoot90.png"));
s100 = ImageIO.read(new File("spriteshoot100.png"));
s110 = ImageIO.read(new File("spriteshoot110.png"));
s120 = ImageIO.read(new File("spriteshoot120.png"));
s130 = ImageIO.read(new File("spriteshoot130.png"));
} catch (IOException e) {}
}
public void moveZ(int a,int b)
{
xz+=a;
yz+=b;
}
public void move(int a,int b)
{
x+=a;
y+=b;
}
public void angle(int t)
{
q=t;
}
public void paintComponent(Graphics g) {
g.drawImage(map,x,y,this);
if (q==1)
g.drawImage(s0,599,340,null);
if (q==2)
g.drawImage(s10,599,340,null);
if (q==3)
g.drawImage(s20,599,340,null);
if (q==4)
g.drawImage(s30,599,340,null);
if (q==5)
g.drawImage(s40,599,340,null);
if (q==6)
g.drawImage(s50,599,340,null);
if (q==7)
g.drawImage(s60,599,340,null);
if (q==8)
g.drawImage(s70,599,340,null);
if (q==9)
g.drawImage(s80,599,340,null);
if (q==10)
g.drawImage(s90,599,340,null);
if (q==11)
g.drawImage(s100,599,340,null);
if (q==12)
g.drawImage(s110,599,340,null);
if (q==13)
g.drawImage(s120,599,340,null);
if (q==14)
g.drawImage(s130,599,340,null);
}}
因此,我想知道如何更快地显示图像“地图”或找到替代此性能问题的替代路线。
注意**这段代码在我的主类中创建为一个对象,并且每次执行此操作时,都不会从文件中读取BufferedImages(据我所知)。另外,repaint();在我的程序中每16毫秒调用一次方法(是的,我尝试增加该时间,但问题仍然存在)。这是用于重新绘制框架的计时器的片段:
TimerTask任务= new TimerTask(){
public void run() {
if (onU)
g.move(0,3);
if (onL)
g.move(3,0);
if (onD)
g.move(0,-3);
if (onR)
g.move(-3,0);
//System.out.println(ze.getX(650,400,650,0,xZ,yZ));
//System.out.println(ze.getY(650,400,650,0,xZ,yZ));
if(onR||onL||onD||onU)
gameSurface.repaint();
}};
非常感谢任何帮助,谢谢。
最佳答案
如果您正在编写游戏,则应使用游戏引擎。编写高效能的游戏非常困难,并且对屏幕上所有内容的强行重新绘制都不会减少效果。其他聪明的人已经解决了这些问题,您可以利用他们的累加工作,而不必重新发明轮子。
我不是游戏引擎方面的专家,但是Google上“ java游戏引擎”的第一笔交易是jmonkeyengine.com。也许您应该尝试一下。
关于java - Java:如何更快绘制这些图像?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8017835/