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