我有一个可以在舞台上移动的玩家。
我希望对玩家周围的舞台有一点点照明,这样敌人和环境就越难以看到他们越远。通过在AS3: beginGradientFIll() doesn't make me a gradient!
使用这些答案,我已经在一定程度上实现了这一目标此外,我希望能够动态控制alpha,以便当玩家按下指定的键时,更多的舞台会变亮。我也能在一定程度上实现这一目标。
到目前为止,这是SWF。 http://www.fastswf.com/9cOxDwo
箭头键移动,Z键增加照明。
我遇到的问题是
a)渐变过于刺激
b)按Z显示整个舞台,而我只是想增加照明半径。这是我的代码的样子。
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);
控制alpha我只是简单地使用:
private function lux():void
{
circle.alpha = 0
}
private function onFrame(event:Event):void
{
if(circle.alpha < 1)
{
circle.alpha += 0.005
}
要解决b),我可以以某种方式动态控制beginGradientFill()函数中的alpha参数吗?
我也一直在关注this,但无法弄清楚如何屏蔽舞台而不是剪辑。
救救我AS3众神。
感谢。
答案 0 :(得分:1)
以手动方式设置叠加层的快速指南:
1)首先,你需要一个容器(MovieClip),其blendmode设置为&#34; LAYER&#34; (在Property Inspector面板中[如果你不知道它在哪里,我可以提供图像])。这一步很重要,以便让以下儿童MovieClips&#39; blendmode一起工作。 2)接下来,您可以创建一个子Movieclip,全舞台大小,带有所需alpha值的暗矩形(对于您的阴影,项目将完全不亮)。这可以是简单的矩形形状,#000000纯黑色,几乎没有任何透明度(比如说... 95%alpha)。一旦创建了Movieclip,将其blendmode设置为LAYER(或者MULTIPLY也可以)。 3)对于灯光,您可以创建另一个儿童Movieclip(放置在上面的#34;阴影&#34;叠加)。创建一个具有径向渐变的圆圈(比如白色,从纯不透明的100%alpha到完全透明的0%alpha)。无论游戏中的默认照明范围如何,都要使其成为您所需的尺寸。然后,将Movieclip的blendmode设置为ERASE。
如果一切正确完成(我希望我正确描述了所有步骤!),当您导航回容器保存整个设置的时间线时,您应该看到灯光的混合模式&#34;掩盖&#34 ;阴影层之外的部分(与闪存图层中的传统遮罩相比,只考虑渐变的alpha,这样做更顺畅)。
您仍然需要使用代码告诉Light Movieclip关注您的播放器/光源,可以通过两种方式进行处理: - 仅移动灯光渐变。 要么 - 移动整个容器,但是,请确保你将舞台大小的阴影片伸展得更远,这样如果你的播放器靠近舞台的任何边缘,阴影就不会突然在对面突然切断(s)屏幕。
在完成所有这些之后,传统Flash矢量渲染中的大屏幕变化往往会导致性能下降。我之后可以给你的唯一建议是考虑使用Stage3D动力引擎(Starling,Genome2D等),但这对你的游戏来说是一个很大的改变 - 超出了这个问题的范围。
编辑,为您提供有关DisplayObjects层次结构的更好答案,这里有一个图表(尽管用丑陋的ASCII字符制作)
+ 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.
您还可以在此处查看截屏教程:
https://www.screenr.com/6MJN