Сборка игры из учебника YouTube: они используют круглые плитки на холсте, я хотел бы использовать квадраты, как мне этого добиться? - PullRequest
0 голосов
/ 13 мая 2018

Я следовал этому уроку о том, как построить змею на андроид студии: https://www.youtube.com/watch?v=bPlG7ra83lo

Он использует круги, которые создают коробку 28 * 42, которая выглядит следующим образом:

Example of circular grid

Я надеялся заменить эти круги квадратами, но когда я попробую различные методы, такие как этот:

canvas.drawRect(x*tileSizeX,tileSizeY*x,tileSizeY*y, x, mPaint);

Я получаю вывод, подобный этому:

My attempt

Ниже приведен код, используемый в классе SnakeView:

public class SnakeView extends View {

    private Paint mPaint = new Paint();
    private TileType snakeViewMap[][];
    public SnakeView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    public void setSnakeViewMap (TileType[][] map){
        this.snakeViewMap = map;
    }

    @Override
    protected void onDraw (Canvas canvas){
        super.onDraw(canvas);

        if (snakeViewMap != null) {
            float tileSizeX = canvas.getWidth()/snakeViewMap.length;
            float tileSizeY = canvas.getHeight() / snakeViewMap[0].length;

            float circleSize = Math.min(tileSizeX, tileSizeY) /2;

            for (int x=0; x < snakeViewMap.length; x++) {
                for (int y = 0; y <snakeViewMap[x].length; y++) {
                    switch (snakeViewMap[x][y]) {

                    case Nothing:
                        mPaint.setColor(Color.BLACK);
                        break;
                    case Wall:
                        mPaint.setColor(Color.GREEN);
                        break;
                    case SnakeHead:
                        mPaint.setColor(Color.RED);
                        break;
                    case SnakeTail:
                        mPaint.setColor(Color.GREEN);
                        break;
                    case Apple:
                        mPaint.setColor(Color.RED);
                        break;
                    }
                    canvas.drawRect(x*tileSizeX,tileSizeY*x,tileSizeY*y, x, mPaint);
                    //canvas.drawCircle(x * tileSizeX + tileSizeX/2f + circleSize/2, y * tileSizeY + tileSizeY/2f + circleSize/2, circleSize, mPaint);
                }
            }
        }
    }
}

1 Ответ

0 голосов
/ 13 мая 2018

в соответствии с https://developer.android.com/reference/android/graphics/Canvas

это параметры для круга
void drawCircle (float cx, плавать cy, радиус поплавка, Краска краска)

, где

cx  float: The x-coordinate of the center of the cirle to be drawn
cy  float: The y-coordinate of the center of the cirle to be drawn
radius  float: The radius of the cirle to be drawn
paint   Paint: The paint used to draw the circle
This value must never be null.

и

drawRect (поплавок слева, поплавок сверху, поплавок справа, поплавок снизу, краска Paint)

так что вам также нужно будет немного изменить

вместо

 canvas.drawRect(
      x*tileSizeX, //LEFT
      tileSizeY*x, //TOP
      tileSizeY*y, //RIGHT
      x,           //BOTTOM 
      mPaint); 

вам нужно сместить ваши значения так, чтобы они были в порядке

слева, сверху, справа снизу

left:  x*tileSizeX
top :  y*tileSizeY
right :  x*tileSizeX +(circleSize*2) //we want the diameter instead of radius
bottom:  y*tileSizeY +(circleSize*2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...