java - 检查像素坐标偏移的高效代码

标签 java performance math

我正在使用 Java 为游戏制作基于图 block 的渲染方法。

第一行(和第一列)的图 block 有可能被部分绘制在屏幕上,我想知道这些图 block 在屏幕上有多少像素。

我想到了这个(用于检查 splinter 瓷砖的最大 X 坐标):

int brokenX = xOffset; //xOffset can be any number
while (brokenX < 0){
    brokenX += tileSet.getTileSize(); //corrects if the number is negative
}
while (brokenX >= tileSet.getTileSize()){
    brokenX -= tileSet.getTileSize(); //corrects if the number is too big
}

这很好用。但这似乎是一种资源浪费(考虑到它会为每一帧完成两次)。

是否有一些有效的方式(位掩码等)来做到这一点?

最佳答案

我觉得你在找

brokenX = xOffset % getTileSize();

我认为上面的方法也适用于负值,但如果 xOffset 可以更大,那么你可以这样做

好的..很好。我认为只要在最后一行添加一个支票就可以解决这个问题。

hiddenTiles = xOffset /  getTileSize();
xOffset -= hiddenTiles * getTileSize();
if(xOffset < 0) {
    brokenX=  -(-xOffset % getTileSize());
}
else {
    brokenX = xOffset % getTileSize();
}

或者正如 Jason 所建议的: 就一行...

brokenX=  (xOffset + getTileSize())% getTileSize());

我真的认为,这也适用于负偏移。因此无需更改。

关于java - 检查像素坐标偏移的高效代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24348878/

相关文章:

java - 为什么要分解不包括 spring-boot-starter-logging 的日志文件?

java - GUI 加载后,如何在 Raspberry Pi 上启动时运行程序?

performance - excel vba worksheetfunction.sum

java - 庞大的数字列表中最常重复的数字

java - 将文字分配给 Float 时出现类型不匹配错误

java - 有没有办法在没有 BitmapFonts 的情况下在 libgdx 中绘制字符串?

java - 大十进制除法

c++ - 改进多线程的一般技巧(在 C++ 中)

我可以将 NULL 传递给 modf/modff 吗?

java - Oj 算法并发