【发布时间】:2017-06-10 18:55:01
【问题描述】:
我正在使用 Java 开发一个基于瓷砖的挖掘游戏,我想在玩家周围使用渐变照明,想想 Terraria。我目前只是将图像与一个矩形重叠,其中该矩形上的 alpha 是我希望拥有的亮度(0.01 = 黑色,1 = 明亮),这可以正常工作。这不是我如何设置我需要帮助的照明,而是如何编写一个紧凑而有效的算法,让我的数字越大,方块离玩家越近,数字越小,方块离玩家越远.该数字应在 (1 - 0.01) 范围内。每次玩家移动时,我都会调用以下方法:
public void calculateBlockBrightness(int playerInRow, int playerInCol) {
int affectedBlocks = 5;
float brightness;
// Loops through all blocks within (affectedBlocks) blocks of the player
for (int row = playerInRow - affectedBlocks; row <= playerInRow + affectedBlocks; row++) {
for (int col = playerInCol - affectedBlocks; col <= playerInCol + affectedBlocks; col++) {
// Not all blocks should be affected by this method
if (blockNotRelevantForBrightness(row, col))
continue;
// If the block is within (affectedBlocks - 1) blocks of the player
if (row >= playerInRow - (affectedBlocks - 1) && row <= playerInRow + (affectedBlocks - 1)
&& col >= playerInCol - (affectedBlocks - 1) && col <= playerInCol + (affectedBlocks - 1)) {
/*
* Algorithm
*/
blocks[row][col].setBrightnessPercentage(brightness);
// Reset the "outer layer" blocks to default brightness.
} else {
blocks[row][col].setBrightnessPercentage(blocks[row][col].getBrightnessDefault());
}
}
}
}
【问题讨论】:
-
一个方块可以离玩家多远?我还假设您希望玩家在瓷砖上时它最亮?
-
这还取决于您希望瓷砖褪色的速度/速度。您想要线性淡入淡出,还是想要不同类型的淡入淡出方案?
-
four_lines:我目前有 100x100 个图块,但我希望只有 5-10 个最近的块受到影响。是的,当玩家在瓷砖上时,它应该是最亮的。
-
pacifier21:我在编程方面还不是很全能,所以我希望改变是即时的。当玩家移动一行或一列时,受影响图块上的亮度变化应该是瞬时的。