j2me中,Sprite TieldLayer地图贴图的制作方法
来源:互联网 发布:数据库存储过程面试题 编辑:程序博客网 时间:2024/04/30 13:33
public class PersonMoveMain extends MIDlet {
private Display display;
private PersonMapCanvas pmc=new PersonMapCanvas(true);
public PersonMoveMain(){
display=Display.getDisplay(this);
}
protected void startApp() throws MIDletStateChangeException {
display.setCurrent(pmc);
}
protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
}
protected void pauseApp() {
}
class PersonMapCanvas extends GameCanvas implements Runnable{
//声明绘制地图的图片对象
private Image map;
//声明一个精灵对象
private Sprite sperson;
private LayerManager lm;
//声明绘制草地和墙的layer
private TiledLayer tlRoad;
private TiledLayer tlWall;
//声明一组精灵图片对象
private Image pesondownImage;
//声明一个绘图工具对象
private Graphics g;
//声明精灵的初始坐标x,y
private int current_x=0;
private int current_y=0;
//设置屏幕刷新
private boolean Running=true;
// 设置背景层的行数和列数
private int rowNum = 12;
private int columnNum = 12;
//控制LayerManager的x、y坐标VW_X
private int VM_X=0;
private int VM_Y=0;
//定义地图分布情况
int[][] cells = new int[][]{
{1,1,2,2,2,2,2,2,2,1,2,2},
{1,1,1,1,1,1,1,1,1,1,2,1},
{1,1,1,2,2,2,2,2,1,2,1,1},
{1,1,1,2,2,2,1,2,1,2,1,1},
{1,1,1,2,2,1,2,1,1,2,1,1},
{1,1,1,2,1,2,1,2,1,2,1,1},
{1,1,1,2,1,2,2,1,1,2,1,1},
{1,1,1,2,1,2,2,1,1,2,1,1},
{1,1,1,2,1,2,1,2,1,2,1,1},
{1,1,1,2,2,1,2,2,1,2,1,1},
{1,1,1,2,1,2,2,2,1,2,1,1},
{1,1,1,1,2,2,2,2,1,2,1,1}
};
protected PersonMapCanvas(boolean suppressKeyEvents) {
super(true);
//获得绘图工具对象
g=this.getGraphics();
//获得layer管理类对象
lm=new LayerManager();
//创建一个地图image对象和精灵image对象
try {
map = Image.createImage("/map.png");
pesondownImage=Image.createImage("/person_down.png");
} catch (IOException e) {
e.printStackTrace();
}
//实例化地图对象,草地和墙以及精灵对象
tlRoad = new TiledLayer(rowNum,columnNum,map,map.getWidth()/2,map.getHeight());
tlWall = new TiledLayer(rowNum,columnNum,map,map.getWidth()/2,map.getHeight());
sperson=new Sprite(pesondownImage,pesondownImage.getWidth()/4,pesondownImage.getHeight());
sperson.setPosition(current_x, current_y);
//通过循环填充地图
for(int i=0;i<12;i++){
for(int j=0;j<12;j++){
if(cells[j][i]==1){
tlRoad.setCell(j, i, cells[i][j]);
}
else if(cells[j][i]==2){
tlWall.setCell(j, i, cells[i][j]);
}
}
}
lm.append(sperson);
lm.append(tlRoad);
lm.append(tlWall);
new Thread(this).start();
}
public void run() {
while(Running){
System.out.println("AAAAAAAAAAAAAA"+sperson.getX()+","+sperson.getX());
g.setColor(255, 255, 255);
g.fillRect(0, 0, this.getWidth(), this.getHeight());
lm.setViewWindow(VM_X,VM_Y,this.getWidth(),this.getHeight());
lm.paint(g, 0, 0);
this.flushGraphics();
switch (this.getKeyStates()) {
case DOWN_PRESSED:
System.out.println("下");
//判断向下走的范围不要超过地图
if(sperson.getY()>=0&&sperson.getY()<=map.getHeight()*12-sperson.getHeight()){
sperson.nextFrame();//下一帧
sperson.move(0, 1);
}
lm.paint(g, this.getWidth(), this.getHeight());
//判断当精灵走到屏幕的0.6倍后、向上滚动地图
if(sperson.getY()>this.getHeight()*0.6&&VM_Y<map.getHeight()*12-this.getHeight()){
System.out.println("DDDD"+VM_Y);
VM_Y++;
}
this.flushGraphics();
break;
case UP_PRESSED :
System.out.println("上");
sperson.nextFrame();//下一帧
sperson.move(0, -1);
lm.paint(g, this.getWidth(), this.getHeight());
this.flushGraphics();
break;
case LEFT_PRESSED :
System.out.println("左");
sperson.nextFrame();//下一帧
sperson.move(-1, 0);
lm.paint(g, this.getWidth(), this.getHeight());
this.flushGraphics();
break;
case RIGHT_PRESSED:
System.out.println("右");
sperson.nextFrame();//下一帧
sperson.move(1, 0);
lm.paint(g, this.getWidth(), this.getHeight());
if(sperson.getX()>this.getWidth()*0.6&&VM_X<map.getHeight()*12-this.getWidth()){
System.out.println("DDDD"+VM_X);
VM_X++;
}
this.flushGraphics();
break;
}
try {
Thread.currentThread().sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
运行效果:
- j2me中,Sprite TieldLayer地图贴图的制作方法
- j2me Sprite 和TieldLayer检测问题
- 更换Sprite贴图
- 利用global mapper 等高线地图的制作方法
- 织梦dedecms中html和xml格式的网站地图sitemap制作方法
- iPhone游戏开发的贴图地图
- 网站地图制作方法
- 离线地图制作方法
- cocos2dx中使用tiled地图实现sprite动态遮挡
- ngui中Sprite,SlicedSprite,Tiled Sprite,FilledSprite的区别
- ngui中Sprite,SlicedSprite,Tiled Sprite,FilledSprite的区别
- unity3d 更换sprite renderer中sprite的图片
- unity3d 更换sprite renderer中sprite的图片
- J2ME Sprite() 切割图片异常
- SCORM标准课件中SCO的制作方法
- Word2013中带圈圈字符的制作方法
- 摄像机导致的粒子效果混乱出错变成贴图sprite显示在镜头前
- J2ME游戏中地图,背景的绘制 --- 图片切割的应用
- Spring对AOP的支持2
- 游戏开发中的异常处理
- 庖丁解牛—winpcap源码彻底解密系列续集(11)
- KMP
- 公有继承、保护继承和私有继承
- j2me中,Sprite TieldLayer地图贴图的制作方法
- Java 理论与实践: 处理 InterruptedException
- 如何生成SAP系统ABAP标准课程涉及到的数据表无数据的问题
- gridview 模板里绑定多个参数
- Oracle Enterprise Manager Cloud Control 12c Release 1 Installation on Oracle Linux
- spring
- row_number()和其相关的三个函数
- 枚举Android系统的进程,任务和服务的信息
- Apartment STA MTA FREE 等