Реализация frogger с flash

Для начала: я работаю с Flash CS3 и Actionscript 2.0.

Я пытаюсь переделать игру про лягушек и немного застрял с выводом машин на экран.

Для тех из вас, кто не знаком с frogger: http://www.actionscript.org/showMovie.php?id=1157, но я не использую журналы.

Большая проблема в том, что у меня есть 3 машины, все они мувиклипы в библиотеке, я не буду размещать ни одну из них на сцене. Несколько экземпляров должны появиться одновременно. Эти машины должны двигаться в обоих направлениях, и все 3 машины должны появиться во всех полосах (у меня 4 полосы). Конечно, 1 полоса имеет только 1 направление.

Я могу использовать hitTest(), чтобы увидеть, не задела ли моя лягушка одну из машин, но мне нужно сделать ее реалистичной, то есть я не могу жестко запрограммировать количество машин на каждой полосе.

Я также не могу найти, как повернуть мувиклип вокруг его центра...


person KdgDev    schedule 04.05.2009    source источник


Ответы (2)


Ну, есть пара вещей, которые я могу предложить.

Для автомобилей создайте каждый автомобиль как отдельный объект в библиотеке (не размещайте их на сцене). Когда вам нужно, чтобы он появился на экране, используйте attachMovie() для создания экземпляра автомобиля, который вы хотите.

Чтобы сделать их обращенными в разные стороны (я полагаю, вам просто нужно влево и вправо), вы можете либо создать 2 копии каждой машины в библиотеке, по одной в каждом направлении. Или, я думаю, если вы установите значение xScale на -100%, я думаю, это перевернет его по горизонтали, поэтому вы можете использовать один и тот же экземпляр библиотеки для обоих. Однако, вероятно, было бы проще иметь дело, если бы у вас были отдельные экземпляры библиотеки для каждого направления, вместо того, чтобы выполнять повороты по одному.

person Herms    schedule 04.05.2009
comment
Спасибо. В задании уже было сказано, что на сцене может быть только фон, то есть все машины в библиотеке. - person KdgDev; 04.05.2009

чтобы ответить на ваш вопрос о вращении, мувиклипы вращаются вокруг своей точки регистрации, а не вокруг своего визуального центра. Поэтому, когда вы создаете свои клипы, убедитесь, что перекрестие на экране редактирования символов отображается в центре. Перекрестие — это точка регистрации, которая в основном определяет, где 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();
    }
}

После создания отдельных классов используйте Linkage для символов вашей библиотеки для каждого автомобиля. (щелкните правой кнопкой мыши по символу, выберите «Связь» и введите имя своего класса в поле «Класс»).

Наконец, установите член лягушки на свою лягушку на сцене.

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;
    }
}
person nerdabilly    schedule 04.05.2009