所以不用换算屏幕坐标,
你只要知道,你准备在屏幕的那个位置显示人物,而这个位置是固定的,然后更具人物在地图中的坐标,产生一个矩形框(大小也是固定的所以产生很容易)
,这个矩形框就是你要显示的地图内容,人物就在固定位置绘制就好了。

import java.lang.*;
import javax.microedition.lcdui.*;
import java.util.Random;
import javax.microedition.rms.*;
import java.io.*;
//import com.nokia.mid.ui.*;
//class MainPit extends FullCanvas implements Runnable
class MainPit extends Canvas implements Runnable
{
MainMid myMid;
private final byte KEY_UP = -1;
private final byte KEY_DOWN = -2;
private final byte KEY_LEFT = -3;
private final byte KEY_RIGHT = -4;
private final byte KEY_FIRE = -5;
private final byte KEY_GAM_LEFT = -6;
private final byte KEY_GAM_RIGHT = -7;
private final byte KEY_NUM0 = 48;
private final byte KEY_NUM1 = 49;
private final byte KEY_NUM2 = 50;
private final byte KEY_NUM3 = 51;
private final byte KEY_NUM4 = 52;
private final byte KEY_NUM5 = 53;
private final byte KEY_NUM6 = 54;
private final byte KEY_NUM7 = 55;
private final byte KEY_NUM8 = 56;
private final byte KEY_NUM9 = 57;
private final byte KEY_POUND = 42;
private final byte KEY_STAR = 35;
private byte KEY_CURRENT = 0;
private byte KEY_LAST = 0;
private boolean IS_UP = true;
private boolean fire = true;
//屏幕宽高
private int nWidth = getWidth();
private int nHeight = getHeight();
//单元格大小
private int cellSizeWidth = 64;
private int cellSizeHeight = 32;
private int targetSX;
private int targetSY;
private int targetMX = 0;
private int targetMY = 0;
private int personMX = 0;
private int personMY = 0;
private int mapWidth = 10;
private int mapHeight = 10;
private int currentDir = 0;
private int tally = 0;
private int mapDepth[][] =
{
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,1,2,3,4,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,1,2,3,4,5,1,1,1,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0}
};
Graphics gb;
Image bufImg;
Image mapImg;
Image menImg[][] = new Image[4][2];
public MainPit(MainMid mid)
{
myMid = mid;
try{
bufImg = Image.createImage(nWidth,nHeight);
mapImg = Image.createImage("/map.png");
for(int i = 0; i < 4; i++)
{
for(int j = 0; j < 2; j++)
{
menImg[j] = Image.createImage("/m"+i+""+j+".png");
}
}
gb = bufImg.getGraphics();
}catch(Exception e){}
}
public void paint(Graphics g)
{
gb = g;
}
public void run()
{
while(true)
{
dealKey();
drawMap();
drawPerson();
repaint();
serviceRepaints();
try{
System.gc();
Thread.yield();
Thread.sleep(100);
}catch(Exception e){}
}
}
public void keyReleased(int keyCode)
{
IS_UP = true;
KEY_CURRENT = 0;
}
public void keyPressed(int keyCode)
{
switch(keyCode)
{
case KEY_UP:
case KEY_DOWN:
case KEY_LEFT:
case KEY_RIGHT:
KEY_CURRENT = (byte)keyCode;
KEY_LAST = KEY_CURRENT;
IS_UP = false;
break;
case KEY_GAM_RIGHT:
myMid.exit();
break;
}
}
private void dealKey()
{
if(KEY_CURRENT != KEY_LAST)
{
KEY_CURRENT = KEY_LAST;
}
switch(KEY_CURRENT)
{
case KEY_UP:
if(targetMY > 0)
{
targetMY--;
currentDir = 0;
}
tally++;
break;
case KEY_DOWN:
if(targetMY < mapHeight - 1)
{
targetMY++;
currentDir = 1;
}
tally++;
break;
case KEY_LEFT:
if(targetMX > 0)
{
targetMX--;
currentDir = 2;
}
tally++;
break;
case KEY_RIGHT:
if(targetMX < mapWidth - 1)
{
targetMX++;