Прокрутка карт на основе плитки - PullRequest
0 голосов
/ 03 января 2012

Этот скрипт рисует карту и другие вещи:

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

но это не сработало. Все, чего нет в этом методе, не важно. Помоги мне! :)

1 Ответ

1 голос
/ 03 января 2012

Похоже, вы меняете lcal vars curL и curU. При каждом вызове производится пересчет с rowBase, ограничивающий движение до 1 -инкремента, который вы используете при проверке droid.touched.

Вы должны изменить глобальное положение тайлов, изменив переменные rowBase.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...