Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 24.04.2013, 20:40
Anabel вне форума Посмотреть профиль Отправить личное сообщение для Anabel Найти все сообщения от Anabel
  № 1  
Ответить с цитированием
Anabel

Регистрация: Apr 2013
Сообщений: 82
По умолчанию Движение одного мувиклипа к другому

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

Код 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;
				}

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


Последний раз редактировалось mooncar; 24.04.2013 в 22:25.
Старый 25.04.2013, 10:44
Hauts вне форума Посмотреть профиль Отправить личное сообщение для Hauts Посетить домашнюю страницу Hauts Найти все сообщения от Hauts
  № 2  
Ответить с цитированием
Hauts
 
Аватар для Hauts

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,113
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
Цитата:
Добрый вечер! Месяц назад увлёкся флэшем и созданием флэш-игр. Сейчас делаю свою первую крупную игру
— по-моему, это взаимоисключающие факторы. Ну да ладно. Вообще на ас3 пока не поздно переходите.

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

Старый 25.04.2013, 17:42
Anabel вне форума Посмотреть профиль Отправить личное сообщение для Anabel Найти все сообщения от Anabel
  № 3  
Ответить с цитированием
Anabel

Регистрация: Apr 2013
Сообщений: 82
Код 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 строчек кода. После того, как её сделаю, хочу переходить на третий и учить класы.

Старый 25.04.2013, 17:44
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 4  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Anabel, для оформления кода в сообщении нужно использовать соответствующие теги.
__________________
Идите первым!

Старый 25.04.2013, 20:52
Anabel вне форума Посмотреть профиль Отправить личное сообщение для Anabel Найти все сообщения от Anabel
  № 5  
Ответить с цитированием
Anabel

Регистрация: Apr 2013
Сообщений: 82
Цитата:
Сообщение от mooncar Посмотреть сообщение
Anabel, для оформления кода в сообщении нужно использовать соответствующие теги.
Исправлюсь

Создать новую тему Ответ Часовой пояс GMT +4, время: 02:43.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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