基于Tile的地图滚动



这个脚本绘制地图和其他东西:

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);
    }

,但它没有工作。所有不在这个方法中的东西都不重要。帮帮我!:)

似乎您正在更改本地变量curLcurU。在检查droid.touched时,每次调用都重新计算rowBase,限制移动到1 -增量。

您应该通过更改rowBase变量来更改tile的全局位置。

最新更新