关于Midp1.0画地图的问题,请帮我看看这个手机上画地图的方法错在哪里呢??
请问1.0用setclip铺地图应该怎么铺啊?
这个是我自己写的但是铺出来的不对的,我知道应该是我setclip跟drawImage里的参数没写对,但不知道应该怎么填,,请问应该怎么填啊,请帮帮忙吧!谢谢
public class Map extends Canvas
{
int width = getWidth(); //屏幕的宽
int height = getHeight();//屏幕的高
int mapRow = 30;//地图总行数
int mapCol = 30;//地图总列数
int w = 16;//每个格子宽
int h = 16;//每个格子高
int sw = getWidth()/w;//屏幕总行数
int sh = getHeight()/h;//屏幕总列数
int map_x = 0;//地图的x初始坐标
int map_y = 0;//地图的y初始坐标
Image gamemap = null;
int gamemap_map0[][] =
{
{ 4, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 2, 3, 2, 3, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 4 },
{ 9, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 7, 8, 7, 8, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 9 },
{ 14, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 12, 13, 12, 13, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 14 },
{ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 22, 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, 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, 4, 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, 18, 18, 9, 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, 18, 18, 14, 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, 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, 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 },
{ 4, 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, 4 },
{ 9, 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, 9 },
{ 14, 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, 14 }
};
public Map()
{
try
{
gamemap = Image.createImage("/gamemap.png");
}
catch (IOException e)
{
e.printStackTrace();
}
}
protected void paint(Graphics g)
{
for(int i = 0; i < mapRow; i++)
{
for(int j = 0; j < mapCol;j++)
{
g.setClip(i*16,j*16,16,16);
g.drawImage(gamemap,i*16-(16*gamemap_map0[j]-1),j*16-(16*gamemap_map0[j]-1),20);
g.setClip(0,0,getWidth(),getHeight());
}
}
}
}
[解决办法]
public Map()
{
try
{
gamemap = Image.createImage("/scr3/map0.png");
}
catch (IOException e)
{
e.printStackTrace();
}
MapNum=gamemap.getWidth()/w;
}
protected void paint(Graphics g)
{
for(int i = 0; i < mapRow; i++)
{
for(int j = 0; j < mapCol;j++)
{
int cx=-(gamemap_map0[i][j]-1)%MapNum*w;
int cy=-(gamemap_map0[i][j]-1)/MapNum*h;
int x=j*w;
int y=i*h;
g.setClip(x, y, w, h);
g.drawImage(gamemap, x+cx, y+cy, 0);
}
}
}
搞定了,MapNum=gamemap.getWidth()/w;是图片的宽度/单元格的宽,得到一行占的格子数