java - x 和 y 偏移/位移位

标签 java

我对这种方法真的很困惑,主要是我很困惑为什么他在某些地方会移位。

我不知道为什么要使用 map 宽度 mask 或这里的任何东西都太令人困惑了,有人可以为我剖析这一切吗?

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

最佳答案

对于 xOffset >> 3 之类的事情,他似乎只是想除以 8(并且不知道如何编写可读代码)。至于为什么他要屏蔽除最后 3 位以外的所有位,我不能在不了解更多代码的情况下说出来。

关于java - x 和 y 偏移/位移位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13318661/

相关文章:

java - 在 Scala 中,如何子类化具有多个构造函数的 Java 类?

java - 如何修复tomcat9中的 “unsupported class file major version 60”?

java - 在日历中设置值 (java.util.Calendar)

java - 如何计算列中结果列表的数量?

java - 如何将基本的 GWT 组件与 GIN 绑定(bind)?

java - Java中character与int的转换

java - 对多列进行分组而不进行聚合

java - 一次遍历数组 2 个项目

java - 关闭 GUI,但主程序应继续运行并打开一个新的

java - 带有 SpinnerDateModel 奇怪行为的 JSpinner