射击弹球小游戏项目小结。学到了很多
射击弹球小游戏项目总结。。学到了很多
经过几次做项目的训练,确实感觉到,做项目是提高java水平最有效的方法。当我拿到一个项目,首先我会想,这个项目会用到什么方法,哪些是会的,哪些是不会的。因此,项目的制作和总结是一个发现问题和解决问题的过程。java的学习也正是在问题不断的发现和解决中进行的。
这些都是题外话。下面我就谈谈这次射击弹球项目的所得。
首先,使我对多线程有了初步的了解。清楚Thread Runable TimerTask三种实现线程的方法。方法就不解释了,资料丰富都可以找到。
其次,学习了新的组件JProgressBar JSlider的使用方法。。。JProgressBar 常用的构造器JProgressBar(int orient, int min, int max) 创建使用指定方向、最小值和最大值的进度条。常用的方法getValue setValue得到设置进度条的值setBorderPainted以及setStringPrinted。我们在使用进度条时同时使用javax.swing包下的timer定时器(要注意定时器有很多种不同包下的不同) 来配合进度条值的改变。timer的构造器Timer(int delay, ActionListener listener) ,每隔delay毫秒运行一次listener,可以这样实现进度条值的改变。运行时不要忘了使用timer的start方法。。。。JSlider的方法有很多和JProgressBar类似,这里我说一下增加标记和更改标记值的方法,setMajorTickSpacing(int n) 设置主刻度间隔,setMinorTickSpacing(int n) 设置次刻度间隔,setLabelTable(Dictionary labels)更改刻度值。详细的内容大家可以去查资料。。
然后,对双缓冲(解决频繁repaint的闪屏问题)有了初步的了解,大概思路是新建一个线程不停地进行双缓冲update。具体情况大家可以参考http://stchou.iteye.com/blog/810701
最后,初步了解了robot,toolkit的某些方法。可以实现捕捉桌面全透明界面的效果。代码如下:
呵呵,经过这次项目,大概掌握的就差不多这些吧。。。。小球射击游戏的源码以附件形式上传
这些都是题外话。下面我就谈谈这次射击弹球项目的所得。
首先,使我对多线程有了初步的了解。清楚Thread Runable TimerTask三种实现线程的方法。方法就不解释了,资料丰富都可以找到。
其次,学习了新的组件JProgressBar JSlider的使用方法。。。JProgressBar 常用的构造器JProgressBar(int orient, int min, int max) 创建使用指定方向、最小值和最大值的进度条。常用的方法getValue setValue得到设置进度条的值setBorderPainted以及setStringPrinted。我们在使用进度条时同时使用javax.swing包下的timer定时器(要注意定时器有很多种不同包下的不同) 来配合进度条值的改变。timer的构造器Timer(int delay, ActionListener listener) ,每隔delay毫秒运行一次listener,可以这样实现进度条值的改变。运行时不要忘了使用timer的start方法。。。。JSlider的方法有很多和JProgressBar类似,这里我说一下增加标记和更改标记值的方法,setMajorTickSpacing(int n) 设置主刻度间隔,setMinorTickSpacing(int n) 设置次刻度间隔,setLabelTable(Dictionary labels)更改刻度值。详细的内容大家可以去查资料。。
然后,对双缓冲(解决频繁repaint的闪屏问题)有了初步的了解,大概思路是新建一个线程不停地进行双缓冲update。具体情况大家可以参考http://stchou.iteye.com/blog/810701
最后,初步了解了robot,toolkit的某些方法。可以实现捕捉桌面全透明界面的效果。代码如下:
import java.awt.AWTException; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Rectangle; import java.awt.Robot; import java.awt.Toolkit; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import java.awt.image.BufferedImage; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JWindow; import com.sun.awt.AWTUtilities; public class Test extends JFrame implements MouseListener { BufferedImage image; Robot robot; public static void main(String args[]) { Test test = new Test(); test.showUI(); } public void showUI() { Toolkit toolkit = Toolkit.getDefaultToolkit(); Rectangle rectangle = new Rectangle(toolkit.getScreenSize()); try { robot = new Robot(); image = robot.createScreenCapture(rectangle); } catch (AWTException e) { // TODO Auto-generated catch block e.printStackTrace(); } this.setExtendedState(JFrame.MAXIMIZED_BOTH); // AWTUtilities.setWindowOpacity(this, 0f); this.setVisible(true); this.addMouseListener(this); } public void paint(Graphics g) { super.paint(g); g.drawImage(image, 0, 0, null); } @Override public void mouseClicked(MouseEvent e) { // TODO Auto-generated method stub int x = e.getX(); int y = e.getY(); System.out.println(robot.getPixelColor(x, y)); } @Override public void mousePressed(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mouseReleased(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mouseEntered(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mouseExited(MouseEvent e) { // TODO Auto-generated method stub } }