[英]Drawing to canvas
所以我涉足制作游戏,我是一个相当凌乱的工人,然后我回去整理它。 因此,请忽略任何愚蠢的命名约定或方法。 等我回去整理一下。
所以基本上我想做一个主菜单,我只想在屏幕上画些东西并留在那里。 我正在将图形写入图像ATM并显示图像,就像我尝试绘制到画布上一样,它只是闪烁到屏幕上,然后变成空白。 我将其更改为可运行,因此可以放入sleep()尝试进行错误搜索。 我现在删除了我所有的错误搜索代码。 事实证明,当我在屏幕上放置图像超过50ms之前或之后拥有sleep()时,矩形停留在屏幕上并且在绘制后不会像1ms那样闪烁。
我不确定发生了什么。 我可能不太清楚,我深表歉意。
import java.awt.Canvas;
import java.awt.Graphics;
import javax.swing.JFrame;
public class test extends Thread{
public static void main(String[] args){
test t = new test();
t.start();
}
@Override
public void run() {
JFrame f = new JFrame("Test");
Canvas c = new Canvas();
Graphics g;
c.setSize(400, 400);
f.add(c);
f.pack();
f.setVisible(true);
c.setVisible(true);
try {
sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
g = c.getGraphics();
g.drawRect(10, 10, 40, 68);
}
}
您有点主意,但是有一些创建游戏的标准设计模式,供初学者查看此代码 。
基本上,您需要一种称为“游戏循环”的东西,该循环每秒更新并渲染到显示器一定数量的时间(帧速率或fps)。 渲染时,它将以特定间隔清除并在新位置重新绘制图像,如果fps为60,则您每秒将进行60次渲染(清除和重新绘制)。 我们还可以引入更高级的概念,例如缓冲策略(如上例所示),以减少撕裂和闪烁。
综上所述,您已经存在了,您只需要不断地执行g = c.getGraphics()
,...
while (true) {
g = c.getGraphics();
// set color
// draw a rectangle
g.dispose();
}
请注意我是如何添加处置的,这将释放所有未使用的内存。 为了澄清,这绝不是好的代码,但是它将为您提供一个起点:)
闪烁是由于只有一个屏幕,要停止此闪烁,您需要一种缓冲策略 。 基本上有两个缓冲区就像有两个屏幕,而在一个“屏幕”上渲染时,您可以清除并在第二个屏幕上绘制下一步,并在两个缓冲区之间进行切换。 这样可以减少闪烁。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.