当前位置: 代码迷 >> J2ME >> J2me游戏map滚动
  详细解决方案

J2me游戏map滚动

热度:835   发布时间:2016-04-17 21:24:49
J2me游戏地图滚动
package com.mhxy.util;import javax.microedition.lcdui.game.LayerManager;import javax.microedition.lcdui.game.TiledLayer;/**********************处理地图滚动************************************/public class MapContor implements Runnable{	private LayerManager lm;//图层管理器	private TiledLayer map;	private Zhujiao zhujiao;//游戏主角	private int h;//屏幕水平宽度	private int v;//屏幕垂直高度	private int start=35;//主角距离屏幕start时开始滚屏	private int x=0;//视窗坐标	private int y=0;//视窗坐标	private int map_speed=10;//地图滚动间隔时间数		public MapContor(LayerManager lm,TiledLayer map,Zhujiao zhujiao,int width,int height){		this.lm=lm;		this.map=map;		this.zhujiao=zhujiao;		this.h=width;		this.v=height;				//设置可视窗口大小与坐标		lm.setViewWindow(x,y, h, v);	}	public void run() {		/****************主角距离屏幕小于length时开始滚屏**************************/		while(true){			//触发左滚			if(zhujiao.getX()-this.x<this.start){				boolean flag=true;				while(flag){					if(this.x>0){//可以左滚						if(zhujiao.getX()-this.x<this.h/2){//主角没有滚到中心							lm.setViewWindow(x--, y, h, v);						}else{							flag=false;						}					}else{						flag=false;					}					this.Mysleep();				}			}			//触发上滚			if(zhujiao.getY()-this.y<this.start){				boolean flag=true;				while(flag){					if(this.y>0){//可以上滚						if(zhujiao.getY()-this.y<this.v/2){//主角没有滚到中心							lm.setViewWindow(x, y--, h, v);						}else{							flag=false;						}					}else{						flag=false;					}					this.Mysleep();				}			}			//触发右滚			if((this.x+this.h)-(zhujiao.getX()+zhujiao.getWidth())<this.start){				boolean flag=true;				while(flag){					if(this.x+this.h<map.getCellWidth()){//可以右滚						if(zhujiao.getX()-this.x>this.h/2){//主角没有滚到中心							lm.setViewWindow(x++, y, h, v);						}else{							flag=false;						}					}else{						flag=false;					}					this.Mysleep();				}			}			//触发下滚			if((this.y+this.v)-(zhujiao.getY()+zhujiao.getHeight())<this.start){				boolean flag=true;				while(flag){					if(this.y+this.v<map.getHeight()){//可以下滚						if(zhujiao.getY()-this.y>this.v/2){//主角没有滚到中心							lm.setViewWindow(x, y++, h, v);						}else{							flag=false;						}					}else{						flag=false;					}					this.Mysleep();				}			}						try {				Thread.currentThread().sleep(1000);			} catch (InterruptedException e) {				// TODO Auto-generated catch block				e.printStackTrace();			}					}			}//end run		public void Mysleep(){		/**休息**/		try {			Thread.currentThread().sleep(map_speed);		} catch (InterruptedException e) {			// TODO Auto-generated catch block			e.printStackTrace();		}	}}
本站暂不开放注册!
内测阶段只得通过邀请码进行注册!