第四天 重新整理一下开始
来源:互联网 发布:网络宣传 编辑:程序博客网 时间:2024/05/08 19:25
今天周末,把前两天学到的东西整理一下,规划一下类的分类和程序结构,分别有三个文件,
一、FD.java 使用MIDLet来控制程序的整体进程和安装环境配置定义;
二、BackCanvas使用GameCanvas来对屏幕绘制做出控制,该类增添了一些游戏常用的功能。还有TiledLayer和Sprite类作为Layer,配合LayerManager使用,对绘制的内容做出控制
三、Scence.java对场景做出描述,定义和控制。
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
import javax.microedition.lcdui.Display;
public class FD extends MIDlet {
Display display;
BackCanvas backCanvas;
public FD() {
// TODO Auto-generated constructor stub
display = Display.getDisplay(this);
backCanvas = new BackCanvas();
}
protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
// TODO Auto-generated method stub
}
protected void pauseApp() {
// TODO Auto-generated method stub
}
protected void startApp() throws MIDletStateChangeException {
// TODO Auto-generated method stub
display.setCurrent(backCanvas);
}
}
MIDLet的作用我们可以看手册,主要用于对程序的四个关键状态进行控制,调整。可以看做是整个程序的控制顶点。其他的关于执行环境的定义,安装等等,可以不知道,但不妨了解一下。你会在各款手机上看到“支持MIDP”的字样。系统与程序的交互过程,可以看一些MIDP的介绍。
import javax.microedition.lcdui.game.GameCanvas;
import javax.microedition.lcdui.game.LayerManager;
import javax.microedition.lcdui.game.TiledLayer;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.Graphics;
public class BackCanvas extends GameCanvas {
private Scence scence;
private LayerManager layerManager;
private TiledLayer backLayer;
public BackCanvas(){
super(false);
scence = new Scence();
scence.screenX =0;
scence.screenY =0;
layerManager = new LayerManager();
Image temp= scence.init();
backLayer = new TiledLayer(1,1,temp,temp.getWidth(),temp.getHeight());
backLayer.setCell(0, 0, 1);
layerManager.append(backLayer);
}
public void paint(Graphics g){
scence.painting =true;
try{
layerManager.setViewWindow(scence.screenX, scence.screenY, scence.screenWidth, scence.screenHeight);
layerManager.paint(g, 0, 20);
if (scence.DEBUG) System.out.println("paint() Executed!");
}catch (Exception e){
System.out.println("绘制过程出现故障");
}finally{
scence.painting =false;
}
//this.flushGraphics();
}
protected void keyPressed(int keyCode){
int oldx=scence.screenX;
int oldy=scence.screenY;
try{
if (scence.painting) return;
switch (keyCode) {
case -1:if (scence.screenY>scence.unitHeight) scence.screenY=scence.screenY-scence.unitHeight; break;
case -2:if (scence.screenY<scence.backHeight-scence.screenHeight-scence.unitHeight) scence.screenY=scence.screenY+scence.unitHeight;break;
case -3:if (scence.screenX>scence.unitWidth) scence.screenX=scence.screenX-scence.unitWidth; break;
case -4:if (scence.screenX<scence.backWidth-scence.screenWidth-scence.unitWidth) scence.screenX=scence.screenX+scence.unitWidth;break;
}
}catch (Exception e){
System.out.println("捕获不明错误");
scence.screenX=oldx;
scence.screenY=oldy;
}
this.repaint();
if (scence.DEBUG) System.out.println("keyPressed() Executed!");
}
}
绘制了一张底图,用方向键可以移动。键盘响应的方法有很多。我在实现paint方法的时候有两个问题,一个,如果没有绘制过程的try..catch过程,调试器在快速连续点击时,可能会报错,但加上后,却没有捕获任何意外。第二,flashGraphics会交换前后显示缓存,如果在该位置调用,会把空白的缓存调到前面来。 明天要仔细看一下双缓存的相关内容。顺便解释一下,双缓存在屏幕快速替换,局部替换等方面都有用处。Layer的两个子类,这里只用了一个,另一个明天会继续测试。
TiledLayer的图例下标是从1开始的;但地图矩阵的下标是从(0,0)开始的。
回头多试几种键盘响应办法,另外,键盘挂接,键盘设置也该看看还有什么办法。
GameCanvas的Super()确定了键盘响应的方式。
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
public class Scence {
public boolean DEBUG=false;
public int StageLevel=0;
public final int screenWidth=200;
public final int screenHeight=300;
public final int unitWidth=20;
public final int unitHeight=30;
public int screenX=0;
public int screenY=0;
public int backWidth;
public int backHeight;
public boolean painting=false;
public Image init(){
Image temp;
try{
temp= Image.createImage("/Level"+StageLevel+".png");
}catch (Exception e){
System.out.println("读取地图错误。--"+"/Levle"+StageLevel+".png");
return null;
}
backWidth = temp.getWidth();
backHeight= temp.getHeight();
return temp;
}
}
这里把一个简单的场景控制文件也发送出来。类设计当然可以更详细。刚开始,着重功能的学习。类分化,逐步根据共更能需要,重新设计累。另外,如何获得手机屏幕的大小呢?
- 第四天 重新整理一下开始
- 开始重新系统学习一下javascript
- 重新开始写BLOG,纪念一下
- 开始重新复习一下C语言
- 模式开始-第四天
- 重新整理了一下Blog上的文章分类
- 今天开始重新整理我的RUP学习笔记
- 重新开始
- 重新开始
- 重新开始
- 重新开始
- 重新开始
- 重新开始
- 重新开始!
- 重新开始!
- 重新开始
- 重新开始
- 重新开始
- Struts.xml
- 寒假粗略的任务计划
- 读书笔记(1)—数据结构和数据算法综合资料
- 云存储“有效”应用实例和云存储“有效”应用平台——2009-1-15 CTO俱乐部第一次聚会“云计算”后记
- 远程连接sql server 2000服务器的解决方案
- 第四天 重新整理一下开始
- 对组件和模式的一点理解和疑问
- Nehe学习笔记二
- 转 Java经典好资源
- 使用ivy构建jar包的依赖关系
- 分析IIS日志(根据访问IP数量进行排序)
- CMMI之惑
- java程序员面试必备的32个要点
- 浅谈跟美女上床和次贷危机