在看本文及后继笔记时,我们假设你有一些Java的基础:
比如你能安装JDK并配置Java程序运行的环境。了解Java编程的基础(变量、数据类型、条件及循环等基础知识),了解一些类及面向对象编程的基础,知道Java swing JFrame 等GUI类下的一些属性及方法,熟悉eclipse或NetBeans JavaIDE中的一种,还有一颗热爱游戏的心就可以了,如果基础不扎实,建议在OSC里搜索一些Java基础教程先学习一下,然后在回来看看,和笔者一起来学习Java 游戏编程吧。
我们要做的是一些很小的游戏,并不是那种大型的3D或是华丽丽的游戏,如果用Java来创建小游戏并不能引起你的兴趣,不建议你继续阅读了。
Java中的游戏窗口:
这里我们通过继承JFrame类实现。
public class GameTest01 extends JFrame {}
有了窗口,我们来初始化他:
/** * 游戏窗口的初始化。 */ void init() { setBounds(100, 100, 400, 300);//设置窗口的大小及位置。 setTitle("GameTest 窗口!");//设置窗口标题 setVisible(true);//显示窗口 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//窗口退出! }
加入main 入口:
public static void main(String[] args) { new GameTest01().init(); }
运行后效果如下:
JFrame 继承了一个 paint() 的方法
public void paint(Graphics g)
绘制容器。该方法将 paint 转发给任意一个此容器子组件的轻量级组件。如果重新实现此方法,那么应该调用 super.paint(g) 方法,从而可以正确地呈现轻量级组件。如果通过 g 中的当前剪切设置完全剪切某个子组件,则不会将 paint() 转发给这个子组件。
重写此方法即可在窗口中绘图,paint()方法中的Graphics参数 是Java中2D绘图的基类(抽象类),她能干什么?她就是我们的画笔。Graphics类,有很多方法和抽像的方法,我们来试试,方法很多,细节亲们可以看看API文档。
public void paint(Graphics g) { g.setColor(Color.BLACK); g.fillRect(0, 0, this.getWidth(), this.getHeight());//设置背景色。 g.setColor(Color.red);//设置画笔的颜色。 g.fillRect(150, 150, 100, 100);//画方形 g.setColor(Color.PINK); g.fillOval(10, 30, 100, 100); }
在GameTest01中,我们尝试重写paint()方法画几个图形试试。运行:
好了!大功告成!至此我们有了自己的游戏窗口,我们有了自己的画笔,下一节尝试让图形动起来,我们试试动画如何?
补充本例源码:
import java.awt.Color; import java.awt.Graphics; import javax.swing.JFrame; /** * JAVA中的游戏窗口 * * 让图形动起来。 * * @author J_sky */ public class GameTest02 extends JFrame { int x, y, width, height; /** * 空构造器 */ GameTest02() { } /** * 游戏窗口的初始化。 */ void init() { setBounds(100, 100, 400, 300);//设置窗口的大小及位置。 setTitle("GameTest 窗口!");//设置窗口标题 setVisible(true);//显示窗口 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//窗口退出! draw(); } @Override public void paint(Graphics g) { g.setColor(Color.BLACK); g.fillRect(0, 0, this.getWidth(), this.getHeight());//设置背景色。 g.setColor(Color.red);//设置画笔的颜色。 g.fillRect(x, y, width, height);//画方形 } /** * 动画绘制方法。 */ public void draw() { x = 50; y = 50; width = 100; height = 100; while (true) { if (y < this.getHeight()) { y = y + 1; } else { y = 0; } try { Thread.sleep(30); } catch (InterruptedException ex) { System.out.println(ex); } repaint(); } } public static void main(String[] args) { new GameTest02().init(); } }