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

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

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

Регистрация: Feb 2013
Сообщений: 21
По умолчанию Как случайно выбрать направление движения рисунка?

Шарик сначала двигается вправо, а доходя до границы поля изменяет движение и начинает двигаться влево. Код такой.
Код AS3:
public function moveX():void
		{
			x += speed;
			if (x >= stage.stageWidth - width || x < 0)
			{
				speed *= -1;
			}
		}
Как сделать чтоб начальное направление движения выбиралось случайно или вправо или влево?
Была такая мысль, но это не работает.
Код AS3:
		public function moveX():void
		{
			var arr:Array=new Array(x += speed, x -= speed)
			x += arr.length * Math.random();
			if (x >= stage.stageWidth - width || x < 0)
			{
				speed *= -1;
			}
		}

Старый 13.02.2013, 01:11
NoisyFlasher вне форума Посмотреть профиль Отправить личное сообщение для NoisyFlasher Найти все сообщения от NoisyFlasher
  № 2  
Ответить с цитированием
NoisyFlasher
 
Аватар для NoisyFlasher

Регистрация: Aug 2012
Сообщений: 70
Сразу после того, как объявите speed:
Код AS3:
var speed: Number = 1;
if (Math.random() > 0.5) {
   speed *= -1;
}

UPD: или даже вот так:

Код AS3:
var speed: Number = (Math.random() > 0.5) ? 1 : -1:

Старый 13.02.2013, 01:58
Tina вне форума Посмотреть профиль Отправить личное сообщение для Tina Найти все сообщения от Tina
  № 3  
Ответить с цитированием
Tina

Регистрация: Feb 2013
Сообщений: 21
Спасибо. А теперь еще вопрос. есть две функции, одна двигает шарик вправо-влево, а другая вверх-вниз. Нужно случайно выбрать начальное направление движения, тоесть выбрать случайно одну из двух функций. Как это сделать?
Код AS3:
	public function moveBalls():void
		{
			if (Math.random() > 0.5)
			{
				moveX();
			}
		}
если так то шарик всегда двигается только вправо-влево.
А если добавить функции в массив и выбирать из массива то он вообще не двигается.
Код AS3:
public function moveBalls():void
		{
			var arr:Array = new Array(moveX, moveY);
			var a:int = arr.length * Math.random();
		}

Старый 13.02.2013, 02:24
NoisyFlasher вне форума Посмотреть профиль Отправить личное сообщение для NoisyFlasher Найти все сообщения от NoisyFlasher
  № 4  
Ответить с цитированием
NoisyFlasher
 
Аватар для NoisyFlasher

Регистрация: Aug 2012
Сообщений: 70
Честно, не пойму - зачем вы их постоянно в массив пихаете?)

Если вот так:
Код AS3:
public function moveBalls():void {
   if (Math.random() > 0.5){
      moveX();
   } else {
      moveY();
   }
}
UPD: люди добрые, подскажите, как тут выравнивание нормально делать?)

Добавлено через 10 часов 7 минут
Кстати, в последнем примере, шарик не двигается не потому, что что-то не выбирается, а потому, что что-то не вызывается - т.е. вы высчитали a (которое, как я понимаю - индекс элемента массива), но функцию-то нигде не вызвали нужную.
Кроме того, если я правильно понял замысел, умножать нужно не на
Код AS3:
arr.length
а на
Код AS3:
arr.length - 1
. Иначе в определенных случаях вы будете вылетать за пределы массива.

Старый 13.02.2013, 14:15
Tina вне форума Посмотреть профиль Отправить личное сообщение для Tina Найти все сообщения от Tina
  № 5  
Ответить с цитированием
Tina

Регистрация: Feb 2013
Сообщений: 21
Цитата:
Сообщение от NoisyFlasher Посмотреть сообщение
Честно, не пойму - зачем вы их постоянно в массив пихаете?)

Если вот так:
Код AS3:
public function moveBalls():void {
   if (Math.random() > 0.5){
      moveX();
   } else {
      moveY();
   }
}
А если так, то шарик вообще по диагонали двигается. Тоесть он одновременно смещается и по x и по y. Да и функцию я вызываю, я же сдесь не весь код привела.

Старый 13.02.2013, 22:24
NoisyFlasher вне форума Посмотреть профиль Отправить личное сообщение для NoisyFlasher Найти все сообщения от NoisyFlasher
  № 6  
Ответить с цитированием
NoisyFlasher
 
Аватар для NoisyFlasher

Регистрация: Aug 2012
Сообщений: 70
Ну, по диагонали он может двигаться, если вы вызываете по очереди то одну, то другую функцию. Например, если moveBalls() у вас вызывается по EnterFrame, то шарик и будет двигаться по диагонали - сначала случайно выпадает одно направление, потом другое.

Старый 13.02.2013, 23:20
Tina вне форума Посмотреть профиль Отправить личное сообщение для Tina Найти все сообщения от Tina
  № 7  
Ответить с цитированием
Tina

Регистрация: Feb 2013
Сообщений: 21
Именно так. Вызываю по EnterFrame. Вот мне нужно и чтоб по энтерфрейм вызвать и чтоб направление случайное было. Вот я и не пойму как же это сделать?

Старый 13.02.2013, 23:30
NoisyFlasher вне форума Посмотреть профиль Отправить личное сообщение для NoisyFlasher Найти все сообщения от NoisyFlasher
  № 8  
Ответить с цитированием
NoisyFlasher
 
Аватар для NoisyFlasher

Регистрация: Aug 2012
Сообщений: 70
То есть не просто случайное, но что бы оно определилось только один раз - либо вверх/вниз, либо влево/вправо?..

Старый 13.02.2013, 23:31
AlexCooper вне форума Посмотреть профиль Отправить личное сообщение для AlexCooper Найти все сообщения от AlexCooper
  № 9  
Ответить с цитированием
AlexCooper
 
Аватар для AlexCooper

Регистрация: Sep 2008
Адрес: Черкассы
Сообщений: 1,167
Записей в блоге: 1
Отправить сообщение для AlexCooper с помощью ICQ Отправить сообщение для AlexCooper с помощью Skype™
Код AS3:
var speed:uint = 1;
var vX:uint = 0;
var vY:uint = 0;
 
if (Math.random()<.5) vX = (Math.random()<.5) ? 1 : -1;
else vY = (Math.random()<.5) ? 1 : -1;
 
/* in move handler */
/**/ moveObject.x += speed*vX;
/**/ moveObject.y += speed*vY;
/* in move handler */
__________________
return this...

Старый 13.02.2013, 23:39
NoisyFlasher вне форума Посмотреть профиль Отправить личное сообщение для NoisyFlasher Найти все сообщения от NoisyFlasher
  № 10  
Ответить с цитированием
NoisyFlasher
 
Аватар для NoisyFlasher

Регистрация: Aug 2012
Сообщений: 70
Или вот так:

Код AS3:
var _move: Function;
_move = (Math.random() > 0.5) ? moveX : moveY;
addEventListener(Event.ENTER_FRAME, _move);

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

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

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


 


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


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