Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Движение одного мувиклипа к другому (http://www.flasher.ru/forum/showthread.php?t=198350)

Anabel 24.04.2013 20:40

Движение одного мувиклипа к другому
 
Добрый вечер! Месяц назад увлёкся флэшем и созданием флэш-игр. Сейчас делаю свою первую крупную игру, и столкнулся вот с такой проблемой: как заставить один мувиклип постоянно двигаться к другому мувиклипу, которым руководит пользователь? Я написал вот такой код:

Код AS1/AS2:

function newBalloon() {
        if (nextBalloon < numBalloons) {
 
                if (getTimer() > nextBalloonTime) {
 
                        if (Math.Random() < .3) {
 
                                attachMovie("balloon", "balloon"+nextBalloon, nextBalloon);
 
                                if (Math.Random() < .3) {
                                        _root["balloon"+nextBalloon]._x = -30;
                                        dx = int(Math.Random()*1)+1;
                                } else {
                                        _root["balloon"+nextBalloon]._x = 700;
                                        dx = -int(Math.Random()*1)-1;
                                }
 
                                _root["balloon"+nextBalloon]._y = int(Math.Random()*600)+20;
 
                                balloons.push({clip: "balloon"+nextBalloon, d: dx});
 
                                nextBalloon++;
                                nextBalloonTime = getTimer() + 2000;                       
 
                        }
                }
      }
}
 
function moveBalloons() {
        for(i=balloons.length-1;i>=0;i--) {
 
                dx = balloons[i].d;
                balloon = _root[balloons[i].clip];
 
                balloon._x += dx;
 
                if ((dx < 0) and (balloon._x < -20)) {
                        balloon.removeMovieClip();
                        balloons.splice(i,1);
 
                        } else if ((dx > 0) and (balloon._x > 570)) {
                        balloon.removeMovieClip();
                        balloons.splice(i,1);
                }
        }
 
        if ((nextBalloon >= numBalloons) and (balloons.length < 1)) {
                gotoAndStop("game over");
        }
}


Но потом решил сделать, что бы эти клипы двигались к другому клипу. Но в итоге я смог достичь только то, что клипы которые создаються справа движутся налево и наоборот. Но как сделать, что бы они двигались к другому клипу? Я пробовал решить проблемку с помощью такого кода:


Код AS1/AS2:

                                if (strawPos.x < balloon[i].x) {
                                        var dx = -balloonSpeed;
                                } else if (strawPos.x > balloon[i].x) {
                                        var dx = balloonSpeed;
                                }


Но клипы тогда вообще не двигаются.

Hauts 25.04.2013 10:44

Цитата:

Добрый вечер! Месяц назад увлёкся флэшем и созданием флэш-игр. Сейчас делаю свою первую крупную игру
— по-моему, это взаимоисключающие факторы. Ну да ладно. Вообще на ас3 пока не поздно переходите.

По задаче: код-то есть, да понять ничего нельзя. Опишите задачу по-человечески. Может там просто твинером можно обойтись.

Anabel 25.04.2013 17:42

Код AS1/AS2:

function newBalloon() {
        // Можно ли создать новый балон (запрос к переменным, которые здесь не указаны)
        if (nextBalloon < numBalloons) {
 
                // Прошло ли достаточно времени, что бы создать новый балон?
                if (getTimer() > nextBalloonTime) {
 
                        // Шанс создать балон (10% или 20%)
                        if (Math.Random() < .3) {
 
                                // Новый балон
                                attachMovie("balloon", "balloon"+nextBalloon, nextBalloon);
 
                                // С какой стороны и с какой скоростью будет двигаться балон
                                if (Math.Random() < .3) {
                                        _root["balloon"+nextBalloon]._x = -30;
                                        dx = int(Math.Random()*1)+1;
                                } else {
                                        _root["balloon"+nextBalloon]._x = 700;
                                        dx = -int(Math.Random()*1)-1;
                                }
 
                                // Высота, на которой возможно движение
                                _root["balloon"+nextBalloon]._y = int(Math.Random()*600)+20;
 
                                // Добавка нового балона
                                balloons.push({clip: "balloon"+nextBalloon, d: dx});
 
                                // Смена значения переменных
                                nextBalloon++;
                                nextBalloonTime = getTimer() + 2000;                       
 
                        }
                }
    }
}
 
function moveBalloons() {
        // Перемещаем все балоны
        for(i=balloons.length-1;i>=0;i--) {
 
                // Определяем скорость шара и получаем ссылку на клип,
                dx = balloons[i].d;
                balloon = _root[balloons[i].clip];
 
                // Движение балона
                balloon._x += dx;
 
                // При вылете за экран балон удаляется (левая сторона)
                if ((dx < 0) and (balloon._x < -20)) {
                        balloon.removeMovieClip();
                        balloons.splice(i,1);
 
                // При вылете за экран балон удаляется (правая сторона)
                } else if ((dx > 0) and (balloon._x > 570)) {
                        balloon.removeMovieClip();
                        balloons.splice(i,1);
                }
        }
 
        // Если шары закончились, игра завершается
        if ((nextBalloon >= numBalloons) and (balloons.length < 1)) {
                gotoAndStop("game over");
        }
}


Вот это
Код AS1/AS2:

if (strawPos.x < balloon[i].x) {
                                        var dx = -balloonSpeed;
                                } else if (strawPos.x > balloon[i].x) {
                                        var dx = balloonSpeed;
                                }

должно значить, что если балон правее или левее straw (клип, руководимый человеком) то балон движеться к нему. Вроде правильно делаю, но что-то не работает.
P.S. Крупная игра, это сильно сказано, она крупная по моим меркам, меркам человека, который впервые делает, а так в ней чуть больше чем 100 строчек кода. После того, как её сделаю, хочу переходить на третий и учить класы.

mooncar 25.04.2013 17:44

Anabel, для оформления кода в сообщении нужно использовать соответствующие теги.

Anabel 25.04.2013 20:52

Цитата:

Сообщение от mooncar (Сообщение 1131269)
Anabel, для оформления кода в сообщении нужно использовать соответствующие теги.

Исправлюсь


Часовой пояс GMT +4, время: 17:20.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.