日期:2014-05-20 浏览次数:20683 次
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(); } } }