当球接近地面时出现的阴影

时间:2014-03-05 07:20:57

标签: actionscript-3

我开发了一款简单的篮球比赛。球可以从地面,墙壁,轮辋和篮板上抛出并弹起。当球接近地面时,我想要出现一个球影。我已经完成了我的研究,并且什么都没有。到目前为止,我在以下方面取得了有限的成功,当然是在更新循环中运行:

shadow.alpha = _activeBall.y/600;
shadow.x = _activeBall.x;

600是地板,球可以下降的最大y值。上面的代码让我接近,但阴影始终存在,即使我在空中足够高,不应该看到阴影。我试过这样的事情:

if( _activeBall.y > 450 ) shadow.alpha = _activeBall.y/600;
shadow.x = _activeBall.x;

但突然间会突然出现阴影。如果球从地板移开时阴影的比例减小也是理想的。我对这个问题感到困惑,希望有人可以为此推荐一种方法。来吧数学专家!怎么了?

1 个答案:

答案 0 :(得分:1)

好的,所以你需要学习规范化/重新缩放的技巧。只要你知道自己想要什么,这并不难。

alpha&lt; _activeBall.y时,您希望alpha为0 450,然后从低于450/600的东西到最终600/600。由于我不知道你希望你的alpha0从哪里开始(0或0.25似乎合乎逻辑),我只需称它为if( _activeBall.y < 450 ) { shadow.alpha = 0; } // I ALWAYS use {} in any control flow statement. 。代数的好消息 - 它允许你使用变量。 : - )

所以,第一个容易的部分:

var normalized = (_activeBall.y - 450) / (600 - 450);

因此,将您想要的范围标准化 - 将其转换为0到1之间的数字。通过减去初始值并乘以总范围来做到这一点。

()

请注意_activeBall.y - (450/150),否则您需要计算shadow.alpha = normalized * (1 - alpha0) + alpha0;

现在您已经使用了标准化值,通过使用新比例执行相反的功能将其应用于您的比例 - 将其乘以总范围并添加初始值:

scaleX

顺便提一下,你可以用阴影的比例做同样的事情,这样当它的高度越高时它就越小。标准化值仍然相同,您可以使用该值设置scaleY和{{1}}。