2009-05-04 63 views
1

对于初学者:我使用Flash CS3和ActionScript 2.0实施青蛙闪光灯

工作我想重拍青蛙游戏,我有点坚持把汽车在屏幕上。

对于那些不认识青蛙的人:http://www.actionscript.org/showMovie.php?id=1157,但我没有实现日志。

最大的问题是我有3辆车,所有这些都是图库中的动画片段,我不会把它们放在舞台上。多个实例必须同时出现。这些车需要双向驱动,所有3辆车必须出现在所有车道(我有4条车道) 当然,1车道只有1个方向。

我可以用hitTest()来查看我的青蛙是否撞到了其中一辆车,但我需要让它逼真,这意味着我无法在每条车道上硬编码汽车数量。

我也似乎无法找到如何绕其中心一个影片剪辑...

回答

2

嗯,有几件事情我可以建议。

对于汽车,请将每辆汽车作为图书馆中的一个单独对象(不要放在舞台上)。当你需要在屏幕上显示一个使用attachMovie()来创建你想要的汽车的一个实例。

为了使它们面向不同的方向(我相信你只需要左右),你可以在库中创建每辆汽车的2个副本,每个副本面向每个方向。或者,我认为如果您将xScale值设置为-100%,我认为它会水平翻转,因此您可以为两者使用相同的库实例。但是,如果您为每个方向分别使用不同的库实例,则可能更容易处理,而不是在一个方向上进行旋转。

+0

感谢。排队人员已经表示,只有背景可以在舞台上,这意味着所有的汽车都在图书馆。 – KdgDev 2009-05-04 14:36:22

1

回答有关旋转的问题,影片剪辑围绕其注册点旋转,而不是围绕其视觉中心旋转。因此,当您创建剪辑时,请确保符号编辑屏幕上的十字线出现在中心。十字准线是注册点,它基本上定义了剪辑上x:0,y:0的位置。

这听起来像是你的问题真的是关于如何使用hitTest来查看青蛙是否碰到过任何一辆汽车,而不管哪一辆,舞台上有多少人等。所以我要做的是创建一个类对于带有一个静态成员的汽车,它可以是指向青蛙的指针,然后让班级检查它是否击中青蛙。

于是开始了:

public class Car extends MovieClip{  
    public static var frog:MovieClip; 
    private var interval; 
    public function Car(){ 
     super(); 
     interval = setInterval(checkHit,500); 
    } 
    private function checkHit(){ 
      if(this.hitTest(frog)){ 
      trace("the frog hit the car"); 
      clearInterval(interval); 
      //do what you need to do when the frog gets hit 
     } 
    } 
} 

对于每个单独的车,可以延长汽车类:

class Truck extends Car{ 
    public function Truck(){ 
     super(); 
    } 
} 

class Volkswagen extends Car{ 
    public function Volkswagen(){ 
     super(); 
    } 
} 

class Bus extends Car{ 
    public function Bus(){ 
     super(); 
    } 
} 

创建单独的类之后,使用链接上你的库符号每辆车。 (右键单击符号,选择“链接”,然后在“类”字段中键入您的类名称)。

最后,青蛙成员设置为你的青蛙在舞台上

var frog:MovieClip = attachMovie("frog_mc", frogMC, _root.getNextHighestDepth()) 
Car.frog = frog; //set the static var "frog" to your frog instance 

现在你的车都应该检查自己的,无论他们打的青蛙。

的另一种选择是代码中的每个不同的汽车的movieclip的第一帧上checkHit()函数,而不是使用类为每个:

this.onEnterFrame = function(){ 
    if(this.hitTest(_root.frog)){ 
     trace("the frog hit the car"); 
     //do what you need to do when the frog gets hit 
     delete this.onEnterFrame; 
    } 
}