基于瓦片地图滚动 [英] Tile based map scrolling

查看:114
本文介绍了基于瓦片地图滚动的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

该脚本绘制地图和其他的东西:

This script draws the map and other stuff:

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

渲染(帆布油画)methos被称为每一帧。我如何可以滚动地图图块?我想这样的:

The render(Canvas canvas) methos is called on every frame. How can i scroll the map tiles? I tried this:

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

但它并没有奏效。一切不是在此方法并不重要。帮我! :)

but it didn't worked. Everything that is not in this method is not important. Help me! :)

推荐答案

看来你正在改变LCAL瓦尔卷曲 curU 。帕斯托雷每次打电话限制的移动到 1 -Increment在检查时,使用<$ C $从 rowBase 重新计算C> droid.touched 。

Seems that you are changing lcal vars curL and curU. Thore are recalculates from rowBase on each call restricting the movement to the 1-increment you use when checking droid.touched.

您应该通过更改 rowBase 变量改变瓷砖的全球地位。

You should change the global position of the tiles by changing the rowBase variables.

这篇关于基于瓦片地图滚动的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆