|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
但是一些大型开发或者是保密型比较高的项目都会用java,原因有2点,一:java是开源的,不怕别人留后门,偷我工具,.net就不一样了,保持微软的一向风格,源代码不公开呼应www.j2medev.com站长mingjava的召唤,我也和人人一同分享一下我的履历,但愿人人指教。同时www.j2medev.com接待列位妙手的原创文章。
头几天看到tony在csdn上公布本人的进修作品“是汉子就保持60s”,以为创意固然复杂可是却很耐玩,是进修手机游戏制造的进门典范,因而一时髦起,clone了一下,图片仍然利用的是tony的图片,地道进修之用。假如人人对这个游戏感乐趣能够与tony接洽或会见他的blog。
从开展趋向上说midp2.0是趋向,最廉价的midp2.0手机如ot735i,已1700元摆布;而西门子一年前的高端机cx65,如今也只要2500摆布;而且2500-3000这个价位的midp2.0手机有多种选择,西门子、se、N机都有。我团体挺喜好cx65,假如未来手机打造商本钱不休下降,信任1500元的midp将不是梦…固然还要看使用是不是丰厚了。
言回正传,我们将利用midp2.0来开辟我们的游戏,代号fly。开辟工具jbulider。等文章全写完了,会供应src下载。
目次:
1、游戏的框架
2、完美周边工具类(图像、GameObject、Font)
3、把持飞机的挪动
4、到场枪弹群,完成碰撞运算
5、完成爆炸效果、并到场道具导弹
6、不敷多多,你以为呢?
7、源码
1、游戏的框架
我们的游戏必要一个通用的游戏框架,也便利今后的开辟,但完成一个引擎是庞大的。作为初学者假如要你思索太多的成绩,生怕会让你偏离主线,这里只给出canvas的代码,不睬解能够参看本站的别的一篇系列文章《利用MIDP2.0开辟游戏》。
利用singlon完成,由于每一个gamecanvas都必要良多的内存空间。别的对我们来讲,只需改写gameInit(),gameMain(),一次性初始化的代码写在机关函数中。
publicclassMyGameCanvasextendsGameCanvas
implementsRunnable,CommandListener{
privatestaticMyGameCanvasinstance;
Graphicsg;
booleanrunning;
Threadt;
Commandstartcmd,exitcmd,restartcmd;
intkeystate;
booleankeyevent;
booleankey_up,key_down,key_left,key_right,key_fire;
privatebooleanallowinput;
publicintscreenwidth;
publicintscreenheight;
booleangameover;
//defineyourvariablehere
//defineyourvariableend
protectedMyGameCanvas(){
super(true);
g=getGraphics();
running=false;
t=null;
addCommand(startcmd=newCommand("start",Command.OK,1));
addCommand(exitcmd=newCommand("exit",Command.EXIT,1));
setCommandListener(this);
screenwidth=getWidth();
screenheight=getHeight();
//putyourinitoncecodehere
//putyourinitoncecodeend
}
synchronizedpublicstaticMyGameCanvasgetInstance(){
if(instance==null){
instance=newMyGameCanvas();
System.out.println("newMyGameCanvas");
}
returninstance;
}
publicvoidrun(){
System.out.println("MyGameCanvasrunstart");
longst=0,et=0,diff=0;
intrate=50;//16-17framepersecond
while(running){
st=System.currentTimeMillis();
gameinput();
gameMain();
et=System.currentTimeMillis();
diff=et-st;
if(diff<rate){
//System.out.println("Sleep"+(rate-diff));
try{
Thread.sleep(rate-diff);
}
catch(InterruptedExceptionex){}
}else{
//System.out.println("rush,andtheframeusingtime:á"+diff);
}
}
System.out.println("MyGameCanvasrunend");
}
publicvoidstart(){
if(!running){
running=true;
t=newThread(this);
t.start();
}
}
privatevoidgameMain(){
g.setColor(0,0,0);//clearscreen
g.fillRect(0,0,getWidth(),getHeight());
background.paint(g);//drawbackground
//g.setColor(255,255,255);
//g.drawString("hello",1,1,g.TOP|g.LEFT);
flushGraphics();
}
privatevoidgameInit(){
gameover=false;
gametime=0;
gametimeoffset=System.currentTimeMillis();
allowinput=true;
key_up=key_down=key_left=key_right=key_fire=false;
}
publicvoidstop(){
if(running){
running=false;
}
}
publicvoidcommandAction(Commandc,Displayabled){
Stringcmdstr=c.getLabel();
if(cmdstr.equals("start")){
gameInit();
start();
removeCommand(startcmd);
addCommand(restartcmd=newCommand("restart",Command.OK,1));
}elseif(cmdstr.equals("restart")){
stop();
while(t.isAlive());
gameInit();
start();
}elseif(cmdstr.equals("exit")){
stop();
Navigate.midlet.destroyApp(false);
Navigate.midlet.notifyDestroyed();
}
}
privatevoidgameinput(){
if(allowinput){
keystate=getKeyStates();
keyevent=false;
if((keystate&UP_PRESSED)!=0){//up
key_up=true;keyevent=true;
//dealyourunstopjobcodehere
//System.out.println("uppress");
//dealyourunstopjobcodeend
}elseif((keystate&UP_PRESSED)==0){//releasekey
if(key_up==true){
key_up=false;
//dealyouronepress-onejobcodehere
//System.out.println("uprelease");
//dealyouronepress-onejobcodeend
}
}
if((keystate&DOWN_PRESSED)!=0){//down
key_down=true;keyevent=true;
//dealyourunstopjobcodehere
//System.out.println("downpress");
//dealyourunstopjobcodeend
}elseif((keystate&DOWN_PRESSED)==0){//releasekey
if(key_down==true){
key_down=false;
//dealyouronepress-onejobcodehere
//System.out.println("downrelease");
//dealyouronepress-onejobcodeend
}
}
if((keystate&LEFT_PRESSED)!=0){//left
key_left=true;keyevent=true;
//dealyourunstopjobcodehere
//System.out.println("leftpress");
//dealyourunstopjobcodeend
}elseif((keystate&LEFT_PRESSED)==0){//releasekey
if(key_left==true){
key_left=false;
//dealyouronepress-onejobcodehere
//System.out.println("leftrelease");
//dealyouronepress-onejobcodeend
}
}
if((keystate&RIGHT_PRESSED)!=0){//right
key_right=true;keyevent=true;
//dealyourunstopjobcodehere
//System.out.println("rightpress");
//dealyourunstopjobcodeend
}elseif((keystate&RIGHT_PRESSED)==0){//releasekey
if(key_right==true){
key_right=false;
//dealyouronepress-onejobcodehere
//System.out.println("rightrelease");
//dealyouronepress-onejobcodeend
}
}
if((keystate&FIRE_PRESSED)!=0){//fire
key_fire=true;keyevent=true;
//dealyourunstopjobcodehere
//System.out.println("firepress");
//dealyourunstopjobcodeend
}elseif((keystate&FIRE_PRESSED)==0){//releasekey
if(key_fire==true){
key_fire=false;
//dealyouronepress-onejobcodehere
//System.out.println("firerelease");
//dealyouronepress-onejobcodeend
}
}
if(!keyevent){
//nokeyeventhere
//System.out.println("NOKEYpress");
//nokeyeventend
}
}
}
publicstaticvoidcleanJob(){
instance=null;
}
}
j2EE和asp比较,其实也没什么比的,原因和我上面说那些比较差不了多少,也是稳定性,安全性,J2EE比asp高,速度上比不过asp,asp也是延续着它的拖拽控件的方法,提高速度。 |
|