首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2ME开发 >

关于地图滚屏有关问题,

2012-03-08 
关于地图滚屏问题,急为什么我这个地图往左右能滚屏的,但是往下就不行了,屏幕也会花掉,谢谢以下是我的代码:

关于地图滚屏问题,急
为什么我这个地图往左右能滚屏的,但是往下就不行了,屏幕也会花掉,谢谢
以下是我的代码:
这是Map类:
public class Map 
{
int mapRow = 30;//地图总行数
int mapCol = 30;//地图总列数

int w = 16;//每个格子宽
int h = 16;//每个格子高

int map_x = 0;//地图的x初始坐标
int map_y = 0;//地图的y初始坐标

int MapNum;//一行占的格子数 

int cx;
int cy;

int x;
int y;

int x0 = 0;//屏幕左上角的世界坐标
int y0 = 0;

int gamemap_map0[][] = 
{
{ 4, 18, 18, 18, 18, 22, 2, 3, 2, 3, 24, 18, 18, 18, 4, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 4 },
{ 9, 18, 18, 18, 18, 22, 7, 8, 7, 8, 24, 18, 18, 18, 9, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 9 },
{ 14, 18, 18, 18, 18, 22, 12, 13, 12, 13, 24, 18, 18, 18, 14, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 14 },
{ 18, 18, 18, 18, 18, 22, 23, 23, 23, 23, 24, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18 },
{ 18, 18, 18, 18, 18, 22, 23, 23, 23, 23, 24, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18 },
{ 18, 18, 18, 18, 18, 22, 23, 23, 23, 23, 24, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18 },
{ 18, 18, 18, 18, 18, 18, 18, 19, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18 },
{ 18, 18, 18, 18, 18, 18, 18, 19, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18 },
{ 18, 18, 18, 18, 18, 18, 18, 19, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18 },
{ 18, 18, 18, 18, 18, 18, 18, 19, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18 },
{ 18, 18, 18, 18, 18, 18, 18, 19, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18 },
{ 18, 18, 18, 18, 18, 18, 18, 19, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18 },
{ 18, 18, 18, 18, 18, 18, 18, 19, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18 },
{ 18, 18, 18, 18, 18, 18, 18, 19, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18 },
{ 4, 18, 18, 18, 18, 18, 18, 19, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 4 },
{ 9, 18, 18, 18, 18, 18, 18, 19, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 9 },
{ 14, 18, 18, 18, 18, 18, 18, 19, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 14 },
{ 18, 18, 18, 18, 18, 18, 18, 19, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18 },
{ 18, 18, 18, 18, 18, 18, 18, 19, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18 },
{ 18, 18, 18, 18, 18, 18, 18, 19, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18 },
{ 18, 18, 18, 18, 18, 18, 18, 19, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18 },
{ 18, 18, 18, 18, 18, 18, 18, 19, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18 },
{ 18, 18, 18, 18, 18, 18, 18, 19, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18 },
{ 18, 18, 18, 18, 18, 18, 18, 19, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18 },
{ 18, 18, 18, 18, 18, 18, 18, 19, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18 },
{ 18, 18, 18, 18, 18, 18, 18, 19, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18 },
{ 18, 18, 18, 18, 18, 18, 18, 19, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18 },
{ 4, 18, 18, 18, 18, 18, 18, 19, 17, 18, 18, 18, 18, 18, 18, 4, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 4 },


{ 9, 18, 18, 18, 18, 18, 18, 19, 17, 18, 18, 18, 18, 18, 18, 9,18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 9 },
{ 14, 18, 18, 18, 18, 18, 18, 19, 17, 18, 18, 18, 18, 18, 18, 14, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 14 }
};

public Map() 
{
}

public void draw(Graphics g,Image gamemap,int width,int height)
{
for(int i = 0; i < mapRow;i++)
{
for(int j = 0; j < mapCol; j++)
{
x = j * w ;  
y = i * h ; 
MapNum = gamemap.getWidth() / w; //是图片的宽度/单元格的宽,得到一行占的格子数 
cx = -( gamemap_map0[i][j] - 1 ) % MapNum * w; //x方向偏移量 
cy = -( gamemap_map0[i][j] - 1 ) / MapNum * h; //y方向偏移量 
g.setClip(x - x0, y, w, h); 
g.drawImage(gamemap, x - x0 + cx, y - y0 + cy, 20); 
}
}
}
}

判断滚屏幕的方法在别的一个类中,我是这样写的:
void tick() //用与逻辑判断
{
//判断边界
if(myplayer.player_x < 0 || myplayer.player_y < 0 || myplayer.player_x + myplayer.player_w > getWidth() || myplayer.player_y + myplayer.player_h > getHeight())
{
myplayer.returnstep();
}
//滚动 右 左 下 上
if(myplayer.player_x > (getWidth() - myplayer.player_w)/2 && myplayer.player_x + myplayer.player_w < getWidth() && map.x0 < (map.mapRow * map.w - getWidth()))
{
map.x0 += myplayer.player_speed;
myplayer.player_x -= myplayer.player_speed;
sleep();
}
if(myplayer.player_x < (getWidth() - myplayer.player_w)/2 && myplayer.player_x + myplayer.player_w < getWidth() && map.x0 > 0)
{
map.x0 -= myplayer.player_speed;
myplayer.player_x += myplayer.player_speed;
sleep();
}
if(myplayer.player_y > (getHeight() - myplayer.player_h)/2 && myplayer.player_y + myplayer.player_h < getWidth() && map.y0 < (map.mapCol * map.h - getHeight()))
{
map.y0 += myplayer.player_speed;
myplayer.player_y -= myplayer.player_speed;
sleep();
}
}
//player_w是人物图片每一格的宽

[解决办法]
myplayer.player_y + myplayer.player_h < getWidth()

大哥 你这是不是错了啊
应该是getHeight() 吧...

还有你说屏幕花,是只有下花还是都花啊?
我觉得花是因为你没有刷新

热点排行