这个脚本绘制地图和其他东西:
public void render(Canvas canvas) {
canvas.drawColor(Color.TRANSPARENT);
Drawable myImage;
int tileWidth = 50;
int tileHeight = 50;
int mapWidth = 3;
int mapHeight = 3;
int rowBaseX = 0;
int rowBaseY = 0;
int[][] board = new int[][] {
{0,0,0},
{0,0,0},
{0,0,2}
};
for (int row = 0; row < mapHeight; row++)
{
for (int col = 0; col < mapWidth; col++)
{
Resources res = this.getContext().getResources();
switch(board[row][col])
{
case 0:
myImage = res.getDrawable(R.drawable.tile1);
break;
case 1:
myImage = res.getDrawable(R.drawable.tile2);
break;
default:
myImage = res.getDrawable(R.drawable.tile3);
break;
}
int curL;
int curU;
int curR;
int curD;
curL = rowBaseX + (col * tileWidth);
curU = rowBaseY + (row * tileHeight);
curR = curL + tileWidth;
curD = curU + tileHeight;
if (droid.x - decentreX < curR & droid.x + decentreX > curL) {
if (droid.y - decentreY < curD & droid.y + decentreY > curU) {
myImage.setBounds(curL,curU,curR,curD);
myImage.draw(canvas);
}
}
}
}
droid.draw(canvas);
butt.draw(canvas);
butt1.draw(canvas);
butt2.draw(canvas);
butt3.draw(canvas);
buttz.draw(canvas);
buttz1.draw(canvas);
buttz2.draw(canvas);
buttz3.draw(canvas);
buttx.draw(canvas);
}
渲染(Canvas Canvas)方法在每一帧被调用。我怎么滚动地图?我试过了:
public void render(Canvas canvas) {
canvas.drawColor(Color.TRANSPARENT);
Drawable myImage;
int tileWidth = 50;
int tileHeight = 50;
int mapWidth = 3;
int mapHeight = 3;
int rowBaseX = 0;
int rowBaseY = 0;
int[][] board = new int[][] {
{0,0,0},
{0,0,0},
{0,0,2}
};
for (int row = 0; row < mapHeight; row++)
{
for (int col = 0; col < mapWidth; col++)
{
Resources res = this.getContext().getResources();
switch(board[row][col])
{
case 0:
myImage = res.getDrawable(R.drawable.tile1);
break;
case 1:
myImage = res.getDrawable(R.drawable.tile2);
break;
default:
myImage = res.getDrawable(R.drawable.tile3);
break;
}
int curL;
int curU;
int curR;
int curD;
curL = rowBaseX + (col * tileWidth);
curU = rowBaseY + (row * tileHeight);
if (droid.touched & !droid.touched1 & !droid.touched3) {
curL -= 1;
}else if (droid.touched1 & !droid.touched & !droid.touched2){
curU += 1;
}else if (droid.touched2 & !droid.touched1 & !droid.touched3){
curL += 1;
}else if (droid.touched3 & !droid.touched2 & !droid.touched){
curU -= 1;
}else if (droid.touched & droid.touched1){
curL -= 1;
curU += 1;
}else if (droid.touched1 & droid.touched2){
curL += 1;
curU += 1;
}else if (droid.touched2 & droid.touched3){
curL += 1;
curU -= 1;
}else if (droid.touched3 & droid.touched){
curL -= 1;
curU -= 1;
}
curR = curL + tileWidth;
curD = curU + tileHeight;
if (droid.x - decentreX < curR & droid.x + decentreX > curL) {
if (droid.y - decentreY < curD & droid.y + decentreY > curU) {
myImage.setBounds(curL,curU,curR,curD);
myImage.draw(canvas);
}
}
}
}
droid.draw(canvas);
butt.draw(canvas);
butt1.draw(canvas);
butt2.draw(canvas);
butt3.draw(canvas);
buttz.draw(canvas);
buttz1.draw(canvas);
buttz2.draw(canvas);
buttz3.draw(canvas);
buttx.draw(canvas);
}
,但它没有工作。所有不在这个方法中的东西都不重要。帮帮我!:)
似乎您正在更改本地变量curL
和curU
。在检查droid.touched
时,每次调用都重新计算rowBase
,限制移动到1
-增量。
您应该通过更改rowBase
变量来更改tile的全局位置。