minecraft65536
本帖最后由 minecraft65535 于 2019-1-27 13:55 编辑

我个人觉得音符颗粒的渐变色代码很好(就像下面那样↓)


代码(MC 1.7.10)
  1. net.minecraft.client.particle.EntityNoteFX
复制代码
  1. public EntityNoteFX(World p_i1217_1_, double p_i1217_2_, double p_i1217_4_, double p_i1217_6_, double p_i1217_8_, double p_i1217_10_, double p_i1217_12_, float p_i1217_14_)
  2. {
  3.         super(p_i1217_1_, p_i1217_2_, p_i1217_4_, p_i1217_6_, 0.0D, 0.0D, 0.0D);
  4.         this.motionX *= 0.009999999776482582D;
  5.         this.motionY *= 0.009999999776482582D;
  6.         this.motionZ *= 0.009999999776482582D;
  7.         this.motionY += 0.2D;
  8.         this.particleRed = MathHelper.sin(((float)p_i1217_8_ + 0.0F) * (float)Math.PI * 2.0F) * 0.65F + 0.35F;
  9.         this.particleGreen = MathHelper.sin(((float)p_i1217_8_ + 0.33333334F) * (float)Math.PI * 2.0F) * 0.65F + 0.35F;
  10.         this.particleBlue = MathHelper.sin(((float)p_i1217_8_ + 0.6666667F) * (float)Math.PI * 2.0F) * 0.65F + 0.35F;
  11.         this.particleScale *= 0.75F;
  12.         this.particleScale *= p_i1217_14_;
  13.         this.noteParticleScale = this.particleScale;
  14.         this.particleMaxAge = 6;
  15.         this.noClip = false;
  16. }
复制代码
注意8~10行那个渐变色代码
绿三个颜色的值全都是由音高(p_i1217_8_)决定的,转换成公式为:
红= sin(x)*2π*0.65+0.35
绿= sin(x+1/3)*2π*0.65+0.35
蓝= sin(x+2/3)*2π*0.65+0.35
更直观地看(函数波形):



你们觉得MC中哪部分的代码写的很好呢?欢迎讨论~

虎水小骥
哇!这个代码真的不错诶!学习了~

不过……我还没有刻意看过mc的代码……

Abraham511


~~~


minecraft65536
Abraham511 发表于 2019-1-27 13:52
羡慕会代码的大佬们~~~

你的那个彩色字可以考虑用这个算法

虎水小骥
minecraft65535 发表于 2019-1-27 14:00
你的那个彩色字可以考虑用这个算法

嗯嗯这个用法我有想到~但是我不会写脚本,只会一点java

BlackCB.
Abraham511 发表于 2019-1-27 13:52
羡慕会代码的大佬们~~~

求您不要再秀你的彩虹字了

FloatingBlocks
当然是算法了(逃)
MC的算法优化好到爆炸

GCVillager
GXHurry 发表于 2019-1-27 14:29
当然是算法了(逃)
MC的算法优化好到爆炸

也许我们的算法更“好”
凉了哈

。—。
在平面函数里,x=x+n的替换意味着向x轴正半轴方向平移n个单位,然后sin函数的周期不记得怎么算了……