版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
前言
就是个普通的class而已,没什么功能。去年做过一段时间的游戏引擎,那也不过是在写类罢了。这次写的类一是熟悉一下Java,二是留个框架给后面做Java GUI设计打个基础——虽然GUI设计是个很无聊的事,干嘛不用QT做?
//gameEngine .java
package demllie.violet;
public class gameEngine {
//That gameEngine
//the static variable be used to one reference only
public static gameEngine m_p;
//gameEngine's data
private static int m_count;//count for reference
private double m_data;
private int m_num;
//variables which the method of gameEngine can returns
private enum M_FLAG{
RUN,
STOP,
ACTIVATE,
DEACTIVATE,
KILL,
RESTART,
END
};
//gameEngine method
public gameEngine() {//default constructor
m_data=0;
m_num=0;
m_p=this;
}
public gameEngine(double data,int num) { //completed constructor
this.m_data = data;
this.m_num=num;
m_p=this;
}
public double getData() {return this.m_data;}
public int getNum() {return this.m_num;}
public void changeData(double data) {this.m_data=data;}
public void changeNum(int num) {this.m_num=num;}
public void run() {
System.out.println("gameEngine runing ....... count:"+(++m_count));
}
public void changeTheEngine(gameEngine p) {
this.m_data=p.m_p.m_data;
this.m_num=p.m_p.m_num;
}
}
其中有两个静态变量需要注意一下。
static gameEngine m_p;
这个在gameEngine类内部声明的静态变量是为了在创建了新的对象的时候,能够时候通过旧的引用来使用新的引用!!!
这个变量的初始化我都放在构造函数里面,所以每次创建一个新对象时,这个变量就会指向它。
旧的对象的数据使用:my.data
新的对象的数据使用:my.m_p.data
static int m_count;
这个就是普通的引用计数,比如计数run()函数被使用了几次。注意这个静态变量的初始化不能放在类里面。我采用方法是不初始化,反正Java变量默认为零。
测试一下,
//test1.java
package dengine;
import demllie.violet.gameEngine;
public class test1 {
public static void main(String[] args) {
gameEngine my=new gameEngine(23,45);
my.run();
my.m_p.run();
my.m_p.m_p.run();
System.out.println("my.m_p:"+my.m_p+" ,my:"+my);
System.out.println("gameEngine info>>");
System.out.print("data:"+my.getData()+",num:"+my.getNum()+"\n");
gameEngine you=new gameEngine(12,1200);
System.out.println("you.m_p:"+you.m_p+" ,you:"+you);
my.changeTheEngine(you);
System.out.println("my.m_p:"+my.m_p+" ,my:"+my);
my.run();
System.out.println("gameEngine info>>");
System.out.print("data:"+my.getData()+",num:"+my.getNum()+"\n");
}
}
测试结果
gameEngine runing ....... count:1
gameEngine runing ....... count:2
gameEngine runing ....... count:3
my.m_p:demllie.violet.gameEngine@15db9742 ,my:demllie.violet.gameEngine@15db9742
gameEngine info>>
data:23.0,num:45
you.m_p:demllie.violet.gameEngine@6d06d69c ,you:demllie.violet.gameEngine@6d06d69c
my.m_p:demllie.violet.gameEngine@6d06d69c ,my:demllie.violet.gameEngine@15db9742
gameEngine runing ....... count:4
gameEngine info>>
data:12.0,num:1200
再测试一下,
//test2.java
package dengine;
import demllie.violet.gameEngine;;
public class test2 {
public static void main(String[] args){
gameEngine my=new gameEngine(1,2);
my.run();
System.out.println("gameEngine info>>");
System.out.print("data:"+my.getData()+",num:"+my.getNum()+"\n");
gameEngine she = new gameEngine(3,4);
she.run();
System.out.println("gameEngine info>>");
System.out.print("data:"+she.getData()+",num:"+she.getNum()+"\n");
System.out.print("data:"+she.m_p.getData()+",num:"+she.m_p.getNum()+"\n");
System.out.print("data:"+my.getData()+",num:"+my.getNum()+"\n");
System.out.print("data:"+my.m_p.getData()+",num:"+my.m_p.getNum()+"\n");
}
}
测试结果
gameEngine runing ....... count:1
gameEngine info>>
data:1.0,num:2
gameEngine runing ....... count:2
gameEngine info>>
data:3.0,num:4
data:3.0,num:4
data:1.0,num:2
data:3.0,num:4