各位转载请注明出处,谢谢合作~作者:ioozhuangzi
各位好~写了N久的Java2D游戏架子IGFrame终于扔出来了。虽然写了很久,但现在回头看看,其实也没啥复杂的东西,只是自己绕的弯路太多了而已o(∩_∩)o...
书归正传,且说自己写架子,自己用,实在没啥意思,扔出了大家围观一下,提提意见和bug啥的对我还是好处多多呢。为了这个目的,在下就得讲讲这玩意该怎么用。
首先,你要会Java这门编程语言,而且还要了解一些关于awt和swing的东西,至少至少要了解Java的Graphics~因为我的封装并没有完全的屏蔽底层。
由于俺文笔能力有限,可能写出的东西您没有看懂,那真是抱歉了,你可以留言或者加IGFrame的Q群(210816248~验证:IGFrame),咱们再一起讨论。
下面开始~对了,你得先导入相关的jar包~别说这你也不会哦~都在lib文件夹里,全导入到你的项目里吧。还有,我用的开发工具是eclipse,其实用别的也无所谓了,用记事本也OK!吼吼~
先说两个类,GFrame和GModel。
GFrame:主框架控制类,本架子的主要功能配置与控制都由该类完成。
GModel:一个实现了IGModel接口的游戏周期模型类,该类提供了执行周期及事件处理的接口。
本架子的执行过程大致如下:
在GModel里根据上图描述定义了相关接口。
public void onLoad()//初始化加载
public void onUpdate()//更新帧
public void onRender(Graphics2D g2d)//渲染帧
//注意更新帧的方法会在渲染帧方法之前执行
public void onExit()//退出
//处理键盘事件,一般不直接用这个方法
public void onKeyProc(GKeyEvent evt)
//处理键盘事件,一般不直接用这个方法
public void onMouseProc(GMouseEvent evt)
//键盘按下
public void onKeyPressed(GKeyEvent evt)
//键盘释放
public void onKeyReleased(GKeyEvent evt)
//鼠标按下
public void onMousePressed(GMouseEvent evt)
//鼠标释放
public void onMouseReleased(GMouseEvent evt)
//鼠标移动
public void onMouseMoved(GMouseEvent evt)
//鼠标拖动
public void onMouseDragged(GMouseEvent evt)
//鼠标单击
public void onMouseClicked(GMouseEvent evt)
//鼠标移入窗口
public void onMouseEntered(GMouseEvent evt)
//鼠标移出窗口
public void onMouseExited(GMouseEvent evt)
第一步,我们来建立一个游戏周期模型类,继承GModel类,然后重写(Overwrite)上诉要用到的方法。注意,不一定要重写全部方法,按照自己的需求而定,因为GModel默认是空实现,也就是什么都不干~比如我的游戏只是用到了鼠标点击,那我就只需要重写onMousePressed方法即可。
代码:
package org.ioo.igframe.test;
import java.awt.Color;
import java.awt.Graphics2D;
import org.ioo.igframe.core.GFrame;
import org.ioo.igframe.core.GModel;
import org.ioo.igframe.event.GKeyEvent;
import org.ioo.igframe.event.GMouseEvent;
import org.ioo.igframe.event.IGEvent;
/**
* IGFrame HelloWorld
* @author: ioozhuangzi
* @version: 0.1a
* @Copyright: IGFrame
*/
public class HelloWorld extends GModel {
private static int width = 640;//定义窗口宽度常量
private static int height = 320;//定义窗口高度常量
int x, y;//定义了两个成员变量
//初始化加载
public void onLoad() {
//在这里初始化你的游戏
x = 10;
y = 20;
}
//更新帧
public void onUpdate() {
//在这里更新游戏里每一帧
}
//渲染帧
public void onRender(Graphics2D g2d) {
//在这里绘制(渲染)每一帧
//在这用到了Java的Graphics2D,
//咱先别管他是干啥的,就把它当成一支画笔吧
//下边这句设置了“画笔”要使用的颜色
g2d.setColor(Color.GREEN);
//这句会在坐标为(x, y)的位置绘制出Hello World!的字符串
g2d.drawString("Hello World!", x, y);
}
//键盘按下
public void onKeyPressed(GKeyEvent evt) {
//这里处理了键盘按下事件,下边的代码判断了我们按下了那个键,
//按下对应的键,会在控制台上打印信息
//GkeyEvent对象封装了键盘消息,
//使用其getKeyCode方法可以获取到键盘代码
if(evt.getKeyCode() == IGEvent.VK_UP) {//上
System.out.println("按下了上键");
}
else if(evt.getKeyCode() == IGEvent.VK_DOWN) {//下
System.out.println("按下了下键");
}
else if(evt.getKeyCode() == IGEvent.VK_LEFT) {//左
System.out.println("按下了左键");
}
else if(evt.getKeyCode() == IGEvent.VK_RIGHT) {//右
System.out.println("按下了右键");
}
}
//键盘抬起
public void onKeyReleased(GKeyEvent evt) {
//当你按下的键抬起时触发这个方法,判断键位的方法同键盘按下
}
//鼠标移动
public void onMouseMoved(GMouseEvent evt) {
//鼠标在窗口里移动会触发这个方法,
//通过下边的代码获取当前鼠标所在的坐标
// int mx = evt.getMouseX();//x坐标
// int my = evt.getMouseY();//y坐标
}
//鼠标按下
public void onMousePressed(GMouseEvent evt) {
//鼠标在窗口里按下会触发这个方法,
//通过下边的代码获取当前鼠标按下时所在的坐标
// GMouseEvent对象封装了鼠标的消息,
//使用getMouseX或getMouseY获取鼠标的所在坐标
//使用getButtonCode方法获取鼠标按键代码
int mx = evt.getMouseX();//x坐标
int my = evt.getMouseY();//y坐标
//以下判断是按下了鼠标左键还是右键
if(evt.getButtonCode() == IGEvent.MOUSE_LEFT_BUTTON) {//左键
//根据按下左键的位置更新了成员变量x、y
x = mx;
y = my;
}
else if(evt.getButtonCode() == IGEvent.MOUSE_RIGHT_BUTTON) {//右键
}
}
//鼠标抬起
public void onMouseReleased(GMouseEvent evt) {
//鼠标抬起是触发这个方法,用法跟按下差不多
// int mx = evt.getMouseX();//x坐标
// int my = evt.getMouseY();//y坐标
}
//退出
public void onExit() {
//退出程序,做一些收尾工作,
//比如释放资源,存档啥的(当然一般不建议在这写存档)~
}
}
创建完了模型之后,我们来写main方法,话说对于一个程序来说入口肯定是必要的,而我们的架子配置也写在这。main方法写在哪都无所谓,我把他写在了刚才的模型类里了。
该轮到GFrame出场了~GFrame里的方法基本都是用来配置架子的,比如窗口宽高、FPS等等。其它的方法使用会在以后用到时在讲。
public static void main(String[] args) {
GFrame gFrame = new GFrame("IGFrame HelloWorld",//窗口标题
new HelloWorld(),//刚才写的游戏周期模型对象
50, //fps(窗口刷新率)
width, height);//宽高
gFrame.setShowFPS(true);//设置显示fps
gFrame.showFrame();//显示窗口
}
有了main方法,二话不说先运行~哈哈,看到窗口了么?还有绿色的HelloWorld!
在窗口的任意位置点击鼠标试试,文字是不是在那出现了~
按下键盘的上下左右按键,控制台会打出信息。
OK~第一讲完工~其实有以上的东西,你已经可以写游戏了。
-------------------------------------------
IGFrame下载请到这里~