浏览 1939 次
锁定老帖子 主题:双缓冲屏外作图的问题
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-01-16
offScreen = this.createImage(1024/2, 768/2); drawOffScreen = offScreen.getGraphics(); 以上这两句代码不能在我的MyCanvas()构造函数里初始化!!! 我写的代码要求是:在一个底色为黑色屏幕里有一个白色的小球在移动,碰到四周反弹,如此不停的循环。构思是这样的:先写一个JFrame框架,在JFrame框架里add()一个Canvas画布。在这个画布里完成我上面的程序要求。代码如下: import javax.swing.JFrame; import java.awt.Canvas; import java.awt.Graphics; import java.awt.Color; import java.awt.Image; public class DaulBuffer extends JFrame { public static void main (String[] args) { new DaulBuffer(); } public DaulBuffer() { //初始化窗口的位置 this.setLocation(1024/4, 768/4); //点击窗口右上角的叉叉结束程序 this.setDefaultCloseOperation(EXIT_ON_CLOSE); //加入画布 this.add(new MyCanvas()); //根据画布的大小自动设置窗口的大小 this.pack(); //显示窗口 this.setVisible(true); } //画布 class MyCanvas extends Canvas implements Runnable { public MyCanvas() { //设置画布的大小 this.setSize(1024/2, 768/2); //要画的白色圆球在画布里的初始位置 x = 0; y = 0; //圆球移动的增量 xMove = 3; yMove = 3; /** * 这就是我遇到问题的地方! * 如果我在这里初始化会报错,错误如下: * Exception in thread "main" java.lang.NullPointerException * at DaulBuffer$TopCanvas.<init>(DaulBuffer.java:48) * at DaulBuffer.<init>(DaulBuffer.java:30) * at DaulBuffer.main(DaulBuffer.java:22) * * * 错误第二行的“48”指的就是:drawOffScreen = offScreen.getGraphics(); * 在我的计算机上运行是 48 * * 错误的意思是为空,我就搞不明白为什么为空了,我明明产生了实体啊? * */ //offScreen = this.createImage(1024/2, 768/2); //drawOffScreen = offScreen.getGraphics(); Thread t = new Thread(this); t.start(); } public void run() { while(true) { repaint(); try { Thread.sleep(41); } catch(InterruptedException e){} x += xMove; y += yMove; //下面的四个 if 语句是对圆球碰壁的判断 if(x >= (1024/2 - 30) { x = 1024/2 - 30; xMove = -xMove; } if(x < 0) { x = 0; xMove = -xMove; } if(y >= (768/2 - 30)) { y = 768/2 - 30; yMove = -yMove; } if(y < 0) { y = 0; yMove = -yMove; } } } public void update(Graphics g) { //出问题的两句要放在这里初始化才行???? offScreen = this.createImage(1024/2, 768/2); drawOffScreen = offScreen.getGraphics(); //先画一个黑色的背景 drawOffScreen.setColor(Color.BLACK); drawOffScreen.fillRect(0, 0, 1024/2, 768/2); //再画一个白色的圆球 drawOffScreen.setColor(Color.WHITE); drawOffScreen.fillOval(x, y, 30, 30); paint(g); } public void paint(Graphics g) { //把缓冲区的图象画到用户能看到的屏幕上 g.drawImage(offScreen, 0, 0, this); } int x; int y; int xMove; int yMove; Image offScreen;//次级画面 Graphics drawOffScreen; } } offScreen = this.createImage(1024/2, 768/2); drawOffScreen = offScreen.getGraphics(); 这两句也可以放在paint()中,就是不能放在MyCanvas()中,郁闷了,请知道的朋友告诉我原因何在??? 不胜感激!!! 谢谢先。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |