Java x和y偏移/位移位

Java x和y偏移/位移位,java,Java,我真的对这种方法感到困惑,主要是因为我不明白为什么他会在某些部分进行移位 我不知道为什么要使用地图宽度遮罩,或者这里的任何东西都很混乱,有人能帮我分析一下吗 public static final int MAP_WIDTH = 64; public static final int MAP_WIDTH_MASK = MAP_WIDTH - 1; public int[] tiles = new int[MAP_WIDTH * MAP_WIDTH]; public int[] colours

我真的对这种方法感到困惑,主要是因为我不明白为什么他会在某些部分进行移位

我不知道为什么要使用地图宽度遮罩,或者这里的任何东西都很混乱,有人能帮我分析一下吗

public static final int MAP_WIDTH = 64;
public static final int MAP_WIDTH_MASK = MAP_WIDTH - 1;

public int[] tiles = new int[MAP_WIDTH * MAP_WIDTH];
public int[] colours = new int[MAP_WIDTH * MAP_WIDTH * 4];

public int xOffSet = 0;
public int yOffSet = 0;

public int width;
public int height;

public void render(int[] pixels, int offset, int row) {
    for(int yTile = yOffSet >> 3; yTile <= (yOffSet +height) >> 3; yTile++) {
        int yMin = yTile * 8 - yOffSet;
        int yMax = yMin + 8;
        if(yMin <0) yMin = 0;
        if(yMax > height) yMax = height;

        for(int xTile = xOffSet >> 3; xTile <= (xOffSet + width) >> 3; xTile++) {
            int xMin = xTile * 8 - xOffSet;
            int xMax = xMin + 8;
            if(xMin <0) xMin = 0;
            if(xMax > width) xMax = width;

            int tileIndex = (xTile & (MAP_WIDTH_MASK)) + (yTile & (MAP_WIDTH_MASK)) * MAP_WIDTH;

            for(int y= yMin; y<yMax; y++) {
                int sheetPixel = ((y + yOffSet) & 7) * sheet.width + ((xMin + xOffSet) & 7 );
                int tilePixel = offset + xMin + y * row;
                for(int x = xMin; x < xMax; x++) {
                    int colour = tileIndex * 4 + sheet.pixels[sheetPixel++];
                    pixels[tilePixel++] = colours[colour];
                }
            }
        }
    }
}
publicstaticfinalint-MAP\u-WIDTH=64;
公共静态最终整型映射宽度掩码=映射宽度-1;
public int[]tiles=新int[MAP_WIDTH*MAP_WIDTH];
公共整数[]颜色=新整数[地图宽度*地图宽度*4];
公共int xOffSet=0;
公共整数偏移=0;
公共整数宽度;
公众内部高度;
公共无效渲染(int[]像素,int偏移,int行){
对于(int-yTile=yOffSet>>3;yTile>3;yTile++){
int-yMin=yTile*8-yOffSet;
int-yMax=yMin+8;
如果(yMin高度)yMax=高度;
对于(int-xTile=xOffSet>>3;xTile>3;xTile++){
int xMin=xTile*8-xOffSet;
int xMax=xMin+8;
如果(xMin宽度)xMax=宽度;
int tileIndex=(xTile和(MAP\u WIDTH\u MASK))+(yTile和(MAP\u WIDTH\u MASK))*MAP\u WIDTH;

对于(int y=yMin;y对于
xOffset>>3
之类的东西,他似乎只是想除以8(并且不知道如何生成可读代码)。至于为什么他要屏蔽除最后3位之外的所有位,我不能说,如果不了解更多有关代码的信息。

这可能会有帮助:

  • y>>3
    相当于
    y/8
    向下舍入;它移动所有内容以擦除最后三位

  • y*8
    等同于
    y你能解释一下这个代码的作用吗?