PDA

Просмотр полной версии : Движение одного мувиклипа к другому


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

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");
}
}



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


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
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");
}
}



Вот это 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
Anabel, для оформления кода в сообщении нужно использовать соответствующие теги.

Исправлюсь