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();
}
}
}
分享到:
相关推荐
这个小程序就是测试地图的滚动的,方便刚接触RPG游戏制作的人群
对于J2ME框架下的手机游戏程序的开发,其地图滚动的重绘有多种算法,由于手机性能的限制和开发周期等其他非技术条件,需要根据情况灵活选择所需的技术。但在及其苛刻条件下,如系统CPU资源不足,地图块尺寸较小等,...
简单的实现了地图的滚动,子弹与飞机碰撞,爆炸
学习J2ME的困难远远超出了想象,在设计初期,为了解决地图的滚动、玩家飞机如何不飞出上下边界两个问题竟然花费了数天的时间。很多相关的技术,如需要使用到的线程、Game包的新功能、高级、低级图形界面的使用、...
内容索引:JAVA源码,综合应用,J2me游戏,PNG,图形处理 这是个J2ME控制台程序,它能剔除PNG文件中的非关键数据段,减少文件大小从而达到压缩图片的目的。而图片的质量并不会受到损失。使用时候只需在控制台窗口执行...
内容索引:JAVA源码,综合应用,J2me游戏,PNG,图形处理 这是个J2ME控制台程序,它能剔除PNG文件中的非关键数据段,减少文件大小从而达到压缩图片的目的。而图片的质量并不会受到损失。使用时候只需在控制台窗口执行...
内容索引:JAVA源码,综合应用,J2me游戏,PNG,图形处理 这是个J2ME控制台程序,它能剔除PNG文件中的非关键数据段,减少文件大小从而达到压缩图片的目的。而图片的质量并不会受到损失。使用时候只需在控制台窗口执行...
内容索引:JAVA源码,综合应用,J2me游戏,PNG,图形处理 这是个J2ME控制台程序,它能剔除PNG文件中的非关键数据段,减少文件大小从而达到压缩图片的目的。而图片的质量并不会受到损失。使用时候只需在控制台窗口执行...
J2ME优化压缩PNG文件 4个目标文件 内容索引:JAVA源码,综合应用,J2me游戏,PNG,图形处理 这是个J2ME控制台程序,它能剔除PNG文件中的非关键数据段,减少文件大小从而达到压缩图片的目的。而图片的质量并不会受到损失...
J2ME优化压缩PNG文件 4个目标文件 内容索引:JAVA源码,综合应用,J2me游戏,PNG,图形处理 这是个J2ME控制台程序,它能剔除PNG文件中的非关键数据段,减少文件大小从而达到压缩图片的目的。而图片的质量并不会受到损失...
内容索引:JAVA源码,综合应用,J2me游戏,PNG,图形处理 这是个J2ME控制台程序,它能剔除PNG文件中的非关键数据段,减少文件大小从而达到压缩图片的目的。而图片的质量并不会受到损失。使用时候只需在控制台窗口执行...
内容索引:JAVA源码,综合应用,J2me游戏,PNG,图形处理 这是个J2ME控制台程序,它能剔除PNG文件中的非关键数据段,减少文件大小从而达到压缩图片的目的。而图片的质量并不会受到损失。使用时候只需在控制台窗口执行...