1

对于初学者:我正在使用 Flash CS3 和 Actionscript 2.0

我正在尝试重新制作青蛙游戏,但我有点坚持将汽车放在屏幕上。

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

最大的问题是我有3辆车,都是图书馆里的电影剪辑,我不会把它们放在舞台上。多个实例必须同时出现。这些车需要双向行驶,所有 3 辆车都必须出现在所有车道上(我有 4 车道)当然,1 车道只有 1 个方向。

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

我似乎也找不到如何围绕其中心旋转影片剪辑...

4

2 回答 2

2

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

对于汽车,将每辆汽车创建为库中的单独对象(不要将它们放在舞台上)。当您需要在屏幕上显示一个时,请使用 attachMovie() 创建您想要的汽车实例。

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

于 2009-05-04T14:21:20.780 回答
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 
        }
    }
}

对于每辆单独的汽车,您可以扩展 Car 类:

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

现在你的车都应该检查自己是否撞到了青蛙。

另一种选择是在每个不同的汽车影片剪辑的第一帧上编写 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;
    }
}
于 2009-05-04T15:34:12.917 回答