计算非常数但增加的黑暗?

时间:2015-06-19 18:05:23

标签: java

我有一个有高度差异的小游戏。当我的角色处于0级时,它非常明亮,当它下降到-1级时它会变得稍暗,在-2级时它会变得更暗。那不是问题。

在我的情况下,0是浅色,黑色是1,0.5在这种情况下不是轻而不是暗。

从亮到暗的“流动”是非常恒定的,因为你只需为每个等级加下0.1。

如何才能让它变得更暗更快?

例如:

0: 0
-1: 0.1
-2: 0.2
-3: 0.3
-4: 0.4
-5: 0.5
-6: 0.65
-7: 0.80
-8: 1

角色越深,它变得越黑越快。

我怀疑这种事情有数学函数,但我并不是真正的数学。有人可以帮助我吗?

5 个答案:

答案 0 :(得分:3)

我有另一种方法,请阅读:

1)假设有10个等级,你有10个亮度,即0.1到1

2)而是将10个亮度分为10个部分,将它们分成20个部分,使每个部分为0.05。

3)前5个阶段,黑暗增加0.05,所以当你到达第5阶段时,你是0.05 * 5 = 0.25.hence,每一步是0.05到5级。

4)剩余的1-0.25 = 0.75,将在接下来的5个步骤中被覆盖,因此黑暗将增加0.75 / 5 = 0.15。因此,从第5阶段到第10阶段,黑暗将增加0.15。

5)在我的样本中,我选择了10,你可以选择8,可能是1/8或者可能是1/16。 希望这有帮助!!

答案 1 :(得分:2)

您可以在类中引入一个表示要添加的内容的成员字段,而不是在每个步骤中添加0.1的常量值。然后,您可以在值达到.5

后更新该值
class GameState { 

   int value;
   int changeValue = 0.1;

   public void applyLevelChange() {
       value += changeValue;
       if(value >= .5) {
          changeValue = .15;
       } else if (value >= .8) {
          changeValue = .20;
       }   
   }
}

答案 2 :(得分:2)

尝试找到越来越慢的功能:
一个例子:

arctg(a)

让我们看看它的外观:
Graph atan(a)
但是对于x->,它会升至PI/2 +无限
所以它需要f(-8)=1的功能 这个功能没问题 Better graph -atan(a)/atan(8)
希望这有帮助

答案 3 :(得分:2)

你的前5行与表达式

对齐
darkness = -0.1 * level;

所以这是一个开始。

现在,对于超过5的每个级别,我们想要添加更多。还有多少?好吧,似乎在等级-8你想要的更多是0.2所以0.2 / 3

darkness = ( -0.1 * level ) + ( Math.max(0, level - 5) * -0.2/3 * level )

您需要确保所有值都是浮点数或双精度数,否则可能会出现整数截断。

答案 4 :(得分:1)

为了让你越深入黑暗,我就会使用light = c * Math.pow(-level, n)

这个功能

n是您选择的数字,用于确定您想要多快下降。在 n = 1时,随着下降,光线将以恒定速率下降,而下降越深,数字越大,下降越快。例如,当 n = 1.5时,光在第一步下降约5%,在最后一步上下降17%。 (小于1的数字会导致光线最初快速下降,而下降时则会更慢。)

数字c是您为n选择的函数; c = Math.pow(-LEVEL_MIN,-n)。在您的示例中,LEVEL_MIN是-8,但如果您想要更深入,则将其更改为-10或其他任何内容。