私は、プレイヤーの周りに徐々に照明を使いたい、テラリアを考えると、Javaのタイルベースの掘り出し物ゲームに取り組んでいます。私は現在、その四角形のアルファが私が持っている明るさ(0.01 =黒、1 =明るい)である矩形でイメージをオーバーラップさせています。これは問題なく動作します。それは私が助けが必要な照明をどのように設定するかではなく、コンパクトで効率的なアルゴリズムを書いて、ブロックがプレイヤーに近いほど大きな数字になり、ブロックがプレイヤーから離れているほど小さくなります。番号は1〜0.01の範囲内にある必要があります。 Iは、プレイヤが移動する次の方法毎回呼び出す:タイルベースのゲームでプレイヤーの周りを照らす
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());
}
}
}
}
ブロックはプレーヤーからどのくらい離れていますか?また、プレイヤーがタイルの上にいるときに、それが最も明るくなるようにしたいと思いますか? –
また、タイルがどれだけ速く/遅く消えるかによって異なります。リニアフェードが欲しいのですか、あるいは別のフェードスキームが必要ですか? – pacifier21
four_lines:私は現在100x100のタイルを持っていますが、5-10の最も近いブロックだけが影響を受けていればいいと思います。そして、はい、それはプレーヤーがタイルの上にいるときに最も明るいはずです。 – SunkenSwe