Actionscript 3 AS3:如何实现动态径向alpha渐变来模糊舞台?
我有一个可以在舞台上走动的球员 我希望在玩家周围的舞台上有一个小的照明,这样敌人和环境越远就越难看到。通过在这里使用这些答案,我在一定程度上做到了这一点 此外,我希望能够动态地控制alpha,这样当玩家按下指定的键时,舞台上的更多部分就会发光。我也在一定程度上做到了这一点 这是迄今为止的SWF 箭头键用于移动,Z键用于增加照明 我的问题是 a) 坡度太大,太小 b) 按Z键可以显示整个舞台,而我只想增加照明半径 下面是我的代码Actionscript 3 AS3:如何实现动态径向alpha渐变来模糊舞台?,actionscript-3,flash,dynamic,gradient,alpha,Actionscript 3,Flash,Dynamic,Gradient,Alpha,我有一个可以在舞台上走动的球员 我希望在玩家周围的舞台上有一个小的照明,这样敌人和环境越远就越难看到。通过在这里使用这些答案,我在一定程度上做到了这一点 此外,我希望能够动态地控制alpha,这样当玩家按下指定的键时,舞台上的更多部分就会发光。我也在一定程度上做到了这一点 这是迄今为止的SWF 箭头键用于移动,Z键用于增加照明 我的问题是 a) 坡度太大,太小 b) 按Z键可以显示整个舞台,而我只想增加照明半径 下面是我的代码 var circle:Shape = new Shape;
var circle:Shape = new Shape;
public function player():void
{
this.addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
}
private function onAddedToStage(event:Event):void
{
var matrix:Matrix = new Matrix();
matrix.createGradientBox(1000, 1000)
circle.graphics.beginGradientFill(GradientType.RADIAL, [0x000000, 0x000000], [0, 1], [0, 255])
circle.graphics.drawCircle(0, 0, stage.stageWidth)
circle.graphics.endFill()
addChild(circle);
为了控制阿尔法,我只是简单地使用:
private function lux():void
{
circle.alpha = 0
}
private function onFrame(event:Event):void
{
if(circle.alpha < 1)
{
circle.alpha += 0.005
}
private function lux():void
{
圈α=0
}
私有函数onFrame(事件:事件):void
{
如果(圆圈α<1)
{
圆α+=0.005
}
为了解决b),我能否以某种方式动态控制beginGradientFill()函数中的alpha参数
我也一直在看,但不知道如何掩盖舞台而不是剪辑
救救我吧,三个神
谢谢。只是一个关于手动设置覆盖层的快速指南:
- 只移动灯光渐变。 或 -移动整个容器,但是,确保将阴影剪辑进一步拉伸到舞台大小,这样,如果玩家靠近舞台的任何边缘,阴影不会突然在屏幕的另一侧被切断
毕竟,传统的Flash矢量渲染中的大屏幕变化往往表现缓慢。我可以给你的唯一建议是考虑使用Stave3D引擎(StaldIn,GeNeM2D等),但是这将是对你的游戏的一个巨大的改变,而且超出了这个问题的范围。
编辑:为了更好地回答显示对象的层次结构,这里有一个图形(尽管是用难看的ASCII字符制作的) 您也可以在此处查看屏幕广播教程:
编辑2021:
很抱歉,伙计们,自从ScreenR录音被Clearing收购后,它似乎从互联网上消失了。在它上面尝试了短链接
/6MJN
,但没有骰子。考虑到Flash现在几乎到处都被完全消灭了,这个录音可能不再重要了。我喜欢你使用code t的想法o动态创建播放器周围的照明渐变-但是使用暗覆盖(阴影)+亮覆盖(在Flash或Photoshop中创建)不是更简单吗,然后根据你的Z键条件调整灯光覆盖的比例以适应口味?或者你需要完全控制渐变衰减的开始和结束位置吗?嗯,是的,我不太确定我该怎么做,但听起来确实更简单。我会试试。非常感谢你的详细回答。不过我有一些困难。对于第一步,这个容器就是我的播放器吗?如果不是的话,它的形状基本上和你在第二步中描述的一样吗?还有,作为容器的一个子,我该如何创建这些电影嘴唇?最后,我该如何给这个圆一个径向渐变alpha?添加了场景图和screencast教程(用Screenr制作),希望这能澄清所有问题。效果很好!非常感谢你花这么多精力帮助我。不客气!(我承认我在这个问题上花的时间可能比以前任何一个问题都多)
+ Root
|
|- Your HUD / UI elements (if applicable)
|
|--+ Container, set to "LAYER" (MovieClip, follows player position)
| |
| |-Erasing Light, set to "ERASE" (MovieClip)
| |-Shadow Rect, set to "LAYER" or "MULTIPLY" (MovieClip)
|
|- Your Player
|- Enemies, Items, Background Etc.