1

所以我正在将我在 html canvas 中开始的游戏移植到 flash as3 中。

在这个游戏中有一辆坦克。这种坦克有一个车身和一个炮塔。它可以 360 度旋转,向前和向后移动,并且可以 360 度旋转它的炮塔。坦克基地和炮塔是独立的动画图像。

我已经设置了它,以便有一个坦克影片剪辑和一个炮塔影片剪辑。我已经在坦克动画剪辑中添加了代码,这样它就可以在构造函数部分中为自己创建一个炮塔,就像这样。

 turret= new turretMovieClip();   
 addChild(turret)

所以 tank 影片剪辑类现在有了这个 turret 变量,它保存了 turret 影片剪辑的一个实例。同样在坦克动画剪辑的构造函数中,有代码给自己一个阴影。

var dropShadow:DropShadowFilter = new DropShadowFilter();
dropShadow.distance = 5;
dropShadow.angle = 45;
dropShadow.color = 0x000000;
etc....
this.filters = new Array(dropShadow);

但这是奇怪的部分。我希望上面的代码只会在坦克周围放置阴影,因为这是坦克动画剪辑的代码。但它在坦克和炮塔周围留下了阴影。当我添加炮塔时,坦克动画剪辑发生了变化!我不希望这种情况发生。我希望坦克有自己的影子,炮塔也有自己的影子。

这是我制作的一张图片来说明问题:http: //i.stack.imgur.com/EJuf3.jpg

图 #1 来自我的旧游戏。阴影正确地投射在坦克和地面上。图 #2 显示了上面的代码做了什么。它为坦克和炮塔提供了一个阴影,但它只投射在地面上。有人知道我在做什么错吗?我想我可以通过制作一个主坦克类来解决这个问题,然后创建一个坦克影片剪辑,然后是一个炮塔影片剪辑。这就是我应该这样做的吗?

4

1 回答 1

2

最简单的方法是从 Tank 类的Sprite 开始,该类由基础/炮塔的两个独立子节点组成。这样你就可以为这些应用两个不同的阴影。

   + Tank [Sprite]
   |
   \--+ Base [MovieClip] = Graphics + DropShadow
   |
   \--+ Turret [MovieClip] = Graphics + DropShadow
于 2010-08-25T01:05:38.790 回答