我有一个有高度差异的小游戏。当我的角色处于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
角色越深,它变得越黑越快。
我怀疑这种事情有数学函数,但我并不是真正的数学。有人可以帮助我吗?
答案 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或其他任何内容。