关于地图滚屏问题,急
为什么我这个地图往左右能滚屏的,但是往下就不行了,屏幕也会花掉,谢谢
以下是我的代码:
这是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() 吧...
还有你说屏幕花,是只有下花还是都花啊?
我觉得花是因为你没有刷新