仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 881|回复: 12
打印 上一主题 下一主题

[学习教程] JAVA网页编程之J2ME中利用Canvas制造复杂的游戏菜单

[复制链接]
飘飘悠悠 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:15:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
windows系统样,他们做了什么事或者留了一些后门程序,谁都不知道,二,java开发是跨平台,任何系统上都可以运行,对于保密型系统和大型系统开发这是必要的菜单  我们晓得MIDP的图形用户界面分为两类,分离是初级图形用户界面和初级用户界面。一样平常来说初级图形用户界面类利用起来对照便利,可移植性强,可是程序员对他的把持才能也很低,由于它们的界面体现是由底层把持的,而不是我们把持的。比拟初级UI类,初级UI类则利用起来更难一些,可是把持才能更强,能够做出本人必要的界面。

  Canvas和Graphics是我们必需纯熟利用的两个类,分离代表了画布和画笔(现实上更丰厚,临时这么比方)。而我们则是画画的人,而引导我们怎样下笔的就是javadoc了,再加上勤劳勉力必定能够画出不错的界面。好比tabbed菜单,二级菜单等。这里我们报告一个复杂菜单的制造体例。

  在画菜单的时分,必要思索两面的成绩,第一是盘算绝对地位,让菜单可以尽量顺应更多的机型,只管少利用相对值。比方画上面的菜单的时分

  我们应当盘算菜单的每一个条目标高度,这些能够有Font的高度算出,固然你能够给条目留一些padding的间隔。还应当盘算条目标最宽值,究竟每一个条目标字数纷歧样。如许基础晓得了全部菜单占的空间。最初还必要盘算菜单在屏幕的地位。菜单的绘制以下所示:

publicvoidpaint(Graphicsg){
 //扫除屏幕
 intcolor=g.getColor();
 g.setColor(0xFFFFFF);
 g.fillRect(0,0,getWidth(),getHeight());
 g.setColor(color);
 //盘算全部菜单的高度,宽度和(x,y)
 intrectWidth=preferWidth;
 intrectHeight=preferHeight*LABELS.length;
 intx=(getWidth()-rectWidth)/2;
 inty=(getHeight()-rectHeight)/2;
 //画矩形
 g.drawRect(x,y,rectWidth,rectHeight);
 for(inti=1;i<LABELS.length;i++){
  g.drawLine(x,y+preferHeight*i,x+rectWidth,y+preferHeight*i);
 }
 //画菜单选项,并依据selected的值判别核心
 for(intj=0;j<LABELS.length;j++){
  if(selected==j){
   g.setColor(0x6699cc);
   g.fillRect(x+1,y+j*preferHeight+1,rectWidth-1,preferHeight-1);
   g.setColor(color);
  }
  g.drawString(LABELS[j],x+8,y+j*preferHeight+4,Graphics.LEFT|Graphics.TOP);
 }
}
  第二个主要的成绩是:核心的切换,在初级UI类中,这是不必要我们处置的。可是利用Canvas制造菜单必要本人来处置核心的挪动,这里我们界说一个int范例变量selected,来纪录核心地点的菜单条目地位,也就是选择的索引。当用户按键的时分,我们在keyPressed()办法中判别用户的挪动偏向,对selected举行相干的加减运算,然后repaint()全部屏幕便可。

publicvoidkeyPressed(intkeyCode){
 //依据用户输出更新selected的值,偏重新绘制屏幕
 intaction=this.getGameAction(keyCode);
 switch(action){
  caseCanvas.FIRE:
   printLabel(selected);
   break;
  caseCanvas.DOWN:
   selected=(selected+1)%4;
   break;
  caseCanvas.UP:{
   if(--selected<0){
    selected+=4;
   }
   break;
  }
  default:
   break;
 }
 repaint();
 serviceRepaints();
}
  如许我们就制造出了一个基础的菜单,你还能够发扬设想给被选中的菜单增添动画效果。MenuCanvas的代码以下所示:

packagecom.j2medev.chapter3;

importjavax.microedition.lcdui.*;

publicclassMenuCanvasextendsCanvas{

 //selected变量标志了核心地位
 privateintselected=0;
 privateintpreferWidth=-1;
 privateintpreferHeight=-1;
 publicstaticfinalint[]OPTIONS={0,1,2,3};
 publicstaticfinalString[]LABELS={"NewGame","Setttings","HighScores","Exit"};

 publicMenuCanvas(){
  selected=OPTIONS[0];
  //盘算菜单选项的长度和高度值
  Fontf=Font.getDefaultFont();
  for(inti=0;i<LABELS.length;i++){
   inttemp=f.stringWidth(LABELS[i]);
   if(temp>preferWidth){
    preferWidth=temp;
   }
  }
  preferWidth=preferWidth+2*8;
  preferHeight=f.getHeight()+2*4;
 }

 publicvoidpaint(Graphicsg){
  //扫除屏幕
  intcolor=g.getColor();
  g.setColor(0xFFFFFF);
  g.fillRect(0,0,getWidth(),getHeight());
  g.setColor(color);
  //盘算全部菜单的高度,宽度和(x,y)
  intrectWidth=preferWidth;
  intrectHeight=preferHeight*LABELS.length;
  intx=(getWidth()-rectWidth)/2;
  inty=(getHeight()-rectHeight)/2;
  //画矩形
  g.drawRect(x,y,rectWidth,rectHeight);
  for(inti=1;i<LABELS.length;i++){
   g.drawLine(x,y+preferHeight*i,x+rectWidth,y+preferHeight*i);
  }
  //画菜单选项,并依据selected的值判别核心
  for(intj=0;j<LABELS.length;j++){
   if(selected==j){
    g.setColor(0x6699cc);
    g.fillRect(x+1,y+j*preferHeight+1,rectWidth-1,preferHeight-1);
    g.setColor(color);
   }
   g.drawString(LABELS[j],x+8,y+j*preferHeight+4,Graphics.LEFT|Graphics.TOP);
  }
 }

 publicvoidkeyPressed(intkeyCode){
  //依据用户输出更新selected的值,偏重新绘制屏幕
  intaction=this.getGameAction(keyCode);
  switch(action){
   caseCanvas.FIRE:
    printLabel(selected);
    break;
   caseCanvas.DOWN:
    selected=(selected+1)%4;
    break;
   caseCanvas.UP:{
    if(--selected<0){
     selected+=4;
   }
   break;
  }
  default:
  break;
 }
 repaint();
 serviceRepaints();
}
//showNotify()在paint()之前被挪用
publicvoidshowNotify(){
 System.out.println("showNotify()iscalled");
}
privatevoidprintLabel(intselected){
 System.out.println(LABELS[selected]);
}
}
Java编译的是字节码,跟C++相反,启动不够快,效率不够高,难以精确控制内存,但是优点是编程比C++容易,代码比较安全但是容易留下性能隐患,跨平台靠字节码在各个平台复制(一处编译到处调试)
不帅 该用户已被删除
沙发
发表于 2015-1-20 18:34:35 来自手机 | 只看该作者
是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言
莫相离 该用户已被删除
板凳
发表于 2015-1-23 11:50:04 | 只看该作者
Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站
蒙在股里 该用户已被删除
地板
发表于 2015-1-26 20:29:10 | 只看该作者
Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台
金色的骷髅 该用户已被删除
5#
发表于 2015-1-28 05:54:30 | 只看该作者
在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
因胸联盟 该用户已被删除
6#
发表于 2015-1-30 16:06:50 | 只看该作者
是一种使网页(Web Page)产生生动活泼画面的语言
透明 该用户已被删除
7#
发表于 2015-2-4 07:16:17 | 只看该作者
有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)
若天明 该用户已被删除
8#
发表于 2015-2-8 04:22:20 | 只看该作者
Java是一种计算机编程语言,拥有跨平台、面向对java
柔情似水 该用户已被删除
9#
发表于 2015-2-18 00:29:17 | 只看该作者
吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧
活着的死人 该用户已被删除
10#
发表于 2015-3-5 23:52:16 | 只看该作者
一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从
小魔女 该用户已被删除
11#
发表于 2015-3-9 22:07:10 | 只看该作者
科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
冷月葬花魂 该用户已被删除
12#
发表于 2015-3-17 02:09:08 | 只看该作者
所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。
再现理想 该用户已被删除
13#
发表于 2015-3-23 13:36:01 | 只看该作者
另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 04:54

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表