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

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

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

Регистрация: Feb 2013
Сообщений: 24
Question Оптимизация рандомного выбора

Здраствуйте, имеется вопрос, вот допустим у меня в игре есть враги, которых можно убивать, я хочу чтобы при смерти они издавали разные вопли (разные звуки), так вот реализовываю так:

Код AS3:
int_zvmol = random(1, 5);
switch (int_zvmol)
{
	case 1: 
		zv_mol1s.play();
		break;
	case 2: 
		zv_mol2s.play();
		break;
	case 3: 
		zv_mol3s.play();
		break;
	case 4: 
		zv_mol4s.play();
		break;
}
также делал вот так:

Код AS3:
int_zvmol = random(1, 5);
if (int_zvmol == 1)
{
	zv_mol1s.play();
}
if (int_zvmol == 2)
{
	zv_mol2s.play();
}
if (int_zvmol == 3)
{
	zv_mol3s.play();
}
if (int_zvmol == 4)
{
	zv_mol4s.play();
}
Но так и знаю, с точки зрения быстродействия и правильности - какой код лучше? Не будет ли сильно нагружать проверкой такой если в секунду могут умирать до 5-10 врагов (бомбу например скинуть или еще что-то подобное) ? В общем подскажите пожалуйста как правильно такое организовать, или может функцию рандома изменить, сейчас использую такую, нашел где-то, может как-то сократить можно именно под мою нужду.

Код AS3:
public function random(min:Number, max:Number):Number
{
	return Math.round(Math.random() * (max - min)) + min;
}
Спасибо.


Последний раз редактировалось scorp2007; 21.02.2013 в 21:41.
Старый 21.02.2013, 09:55
Hauts вне форума Посмотреть профиль Отправить личное сообщение для Hauts Посетить домашнюю страницу Hauts Найти все сообщения от Hauts
  № 2  
Ответить с цитированием
Hauts
 
Аватар для Hauts

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,113
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
Как вариант, можно все звуки смертей врагов записать в массив:

Код AS3:
var deathSounds:Array = [zv_mol1s, zv_mol2s, zv_mol3s, zv_mol4s];
А включать произвольный звук так:
Код AS3:
deathSounds[Math.floor(deathSounds.length * Math.random())].play();
Разница в том, что вы не получаете некоторый индекс и потом сравниваете его, чтобы найти нужный звук, а сразу же выбираете один из доступных и включаете его. При этом вам не нужно заботиться о том, сколько звуков вообще есть (хоть 5, хоть 105), соответственно, не нужно писать кучу if`ов.
__________________
hauts.ru

Старый 21.02.2013, 14:14
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 3  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
scorp2007, в оформлении кода должна присутствовать табуляция.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 21.02.2013, 21:42
scorp2007 вне форума Посмотреть профиль Отправить личное сообщение для scorp2007 Найти все сообщения от scorp2007
  № 4  
Ответить с цитированием
scorp2007

Регистрация: Feb 2013
Сообщений: 24
Цитата:
Сообщение от Hauts Посмотреть сообщение
Как вариант, можно все звуки смертей врагов записать в массив:

Код AS3:
var deathSounds:Array = [zv_mol1s, zv_mol2s, zv_mol3s, zv_mol4s];
А включать произвольный звук так:
Код AS3:
deathSounds[Math.floor(deathSounds.length * Math.random())].play();
Разница в том, что вы не получаете некоторый индекс и потом сравниваете его, чтобы найти нужный звук, а сразу же выбираете один из доступных и включаете его. При этом вам не нужно заботиться о том, сколько звуков вообще есть (хоть 5, хоть 105), соответственно, не нужно писать кучу if`ов.
Спасибо, этим кодом и воспользуюсь, компактнее намного

Старый 21.02.2013, 22:11
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 5  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Для 4-х вариантов switch будет работать не медленнее, чем получение одного значения массива через [].
Да и вообще - этот свитч вызывается только один раз в момент смерти, а сколько другого всякого разного при этом происходит, хорошо если switch занимает от этого всего 0.1%.
И надо оно, здесь оптимизировать?

Если бы свитч выдавал значения для какого-нибудь алгоритма, и вызывался раз 1000 за кадр - можно было бы подумать, посмотреть что быстрее работает. А так - руководствуйтесь соображениями удобства/расширяемости.
Код AS3:
deathSounds[Math.floor(deathSounds.length * Math.random())].play();
С точки зрения типизации - не очень.
Лучше так:
Код AS3:
Sound(deathSounds[Math.floor(deathSounds.length * Math.random())]).play();
Массив по природе - не типизированный, но хоть с написанием play не ошибётесь.
Или так:
Код AS3:
var deathSounds:Vector.<Sound> = new <Sound>[zv_mol1s, zv_mol2s, zv_mol3s, zv_mol4s];
...
deathSounds[Math.floor(deathSounds.length * Math.random())].play();

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

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
можно и без массива, если все звуки будут называться подобно

Код AS3:
int_zvmol = random(1, 5);
this['zv_mol'+int_zvmol+'s'].play()
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Старый 22.02.2013, 10:53
Hauts вне форума Посмотреть профиль Отправить личное сообщение для Hauts Посетить домашнюю страницу Hauts Найти все сообщения от Hauts
  № 7  
Ответить с цитированием
Hauts
 
Аватар для Hauts

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,113
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
expl, вы правы. Просто исходя из сложности вопроса решил не углубляться в типизацию, а ограничиться простой реализацией
__________________
hauts.ru

Старый 22.02.2013, 11:31
scorp2007 вне форума Посмотреть профиль Отправить личное сообщение для scorp2007 Найти все сообщения от scorp2007
  № 8  
Ответить с цитированием
scorp2007

Регистрация: Feb 2013
Сообщений: 24
Всем спасибо, не знал что будет столько вариантов, последний вообще супер

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

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

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


 


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


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