Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Вниз

Архитектура. Как правильно ее построить?   Найти похожие ветки 

 
Хаус   (2012-03-23 19:26) [0]

для работы со звуком, хотя это может распространяться и на другие системы.
и так, допустим звук сделан на основе BASS.
есть класс TBass, оболочка над BASS, синглетон. имеет метод Play(Stream: HSTREAM)

есть класс TSound содержит только идентификатор потока, в методах Play вызывает


begin
  Bass.Play(Stream);
end;


дальше вижу только 2 реализации работы с несколькими звуками одновременно:


// 1й вариант
var
  Sound_1: TSound;  
  Sound_2: TSound;
begin
 Sound_1:= TSound.Create;
  Sound_1.Load("piu_piu.ogg");
  Sound_1.Play;

  Sound_2:= TSound.Create;
  Sound_2.Load("scream.ogg");
  Sound_2.Play;
end;
 

минус  в куче переменных

х х х

SoundManager синглетон, содержит список TSound,


// 2й вариант
begin
  // Загружаем и даем имя
  SoundManager.Load("piu_piu.ogg", "sound_1");
  SoundManager.Play("sound_1");

  SoundManager.Load("scream.ogg", "sound_2");
  SoundManager.Play("sound_2");
end;


минус в постоянном поиске нужного звука по имени, это сбавит скорость? хотя сомневаюсь

х х х

чувствую, умные люди используют какой-нибудь паттерн для этого, как он называется?
что в архитектуре не правильного? использование синглетона в классе? класс TSound?


 
RWolf ©   (2012-03-23 20:08) [1]


> минус  в куче переменных

массив же.


 
Kerk ©   (2012-03-23 20:11) [2]

Почему для таких случаев (если реально часто нужно) не сделать class-функцию? Типа:

TSound.Play("scream.ogg");


 
Хаус   (2012-03-23 20:25) [3]


> RWolf ©   (23.03.12 20:08) [1]
>
>
> > минус  в куче переменных
>
> массив же.


ну и как различать по именам, это и есть 2-й случай



> Kerk ©   (23.03.12 20:11) [2]

> TSound.Play("scream.ogg");


а у меня что?


 
Kerk ©   (2012-03-23 20:43) [4]

Если ты не видишь разницы, то я не знаю как её ещё объяснить.


 
RWolf ©   (2012-03-23 20:45) [5]


> ну и как различать по именам, это и есть 2-й случай

ничего общего.
Sound[idxScream].Play и SoundManager.Play("sound_2") это как бы совсем разные вещи.


 
Хаус   (2012-03-23 22:39) [6]


> Kerk ©   (23.03.12 20:43) [4]
>
> Если ты не видишь разницы, то я не знаю как её ещё объяснить.
>


а где параметр уникальности звука?


> RWolf ©   (23.03.12 20:45) [5]
>
>
> > ну и как различать по именам, это и есть 2-й случай
>
> ничего общего.
> Sound[idxScream].Play и SoundManager.Play("sound_2") это
> как бы совсем разные вещи.


да ладно
SoundManager.Play(idxScream)


 
RWolf ©   (2012-03-24 04:23) [7]


> да ладно
> SoundManager.Play(idxScream)

ну и где тут теперь поиск звука по имени?


 
Хаус   (2012-03-24 12:58) [8]


> RWolf ©   (24.03.12 04:23) [7]


а если у нас 10 звуков, тогда что? запоминать их имена?


 
RWolf ©   (2012-03-24 13:08) [9]


>  [8]

обращение к элементам массива происходит по их индексам, а не по именам.


 
Хаус   (2012-03-24 14:12) [10]


>  RWolf ©   (24.03.12 13:08) [9]
>
>
> >  [8]
>
> обращение к элементам массива происходит по их индексам,
>  а не по именам.


ну дык это понятно.
как вы будете различать один звук от другого? через имя переменной?


 
RWolf ©   (2012-03-24 14:20) [11]


>  [10]

const
 idxPiuPiu = 0;
 idxScream = 1;


или
type
 TSoundEnum = (idxPiuPiu, idxScream, …);

что фактически то же самое.


 
Хаус   (2012-03-24 14:22) [12]


> RWolf ©   (24.03.12 14:20) [11]


дык это 1-й вариант, переполненное пространство имен


 
Inovet ©   (2012-03-24 14:41) [13]

> [12] Хаус   (24.03.12 14:22)

Ты сам понимаешь, что ты хочешь? Из рассуждений выше я этого не понял.


 
Хаус   (2012-03-24 15:41) [14]


> Inovet ©   (24.03.12 14:41) [13]
>
> > [12] Хаус   (24.03.12 14:22)
>
> Ты сам понимаешь, что ты хочешь?


я хочу удобную архитектуру для работы со звуками, разве не понятно?


 
RWolf ©   (2012-03-24 17:03) [15]


>  [12]

как наличие перечислимого типа может переполнить пространство имён, и как этот факт может чему-то помешать?


 
Хаус   (2012-03-24 19:08) [16]

А если 200 звуков, которые динамичны, то нужны одни, то другие.
Еще вариант, появляться новые.


 
Inovet ©   (2012-03-24 19:11) [17]

> [16] Хаус   (24.03.12 19:08)
> Еще вариант, появляться новые.

Появились. И теперь... что теперь?


 
Хаус   (2012-03-24 19:14) [18]


> Inovet ©   (24.03.12 19:11) [17]


появились через плагин.
а у нас нет имени для таких, что делать?


 
Inovet ©   (2012-03-24 19:19) [19]

> [18] Хаус   (24.03.12 19:14)
> появились через плагин.
> а у нас нет имени для таких, что делать?

Плагин пусть именует, если проблема в имени.


 
Хаус   (2012-03-24 19:22) [20]

Сам создает имена и заносит их в тип энум? как это?


 
Inovet ©   (2012-03-24 19:45) [21]

> [20] Хаус   (24.03.12 19:22)
> Сам создает имена и заносит их в тип энум? как это?

Так имена или ИД?

Совершенно не понятно, что тебе надо. Смысл угадывать?


 
QAZ   (2012-03-24 20:27) [22]

что тут за пурга происходит вообще?


 
Хаус   (2012-03-24 20:33) [23]


> Inovet ©   (24.03.12 19:45) [21]



имена индефикаторов

>
const
idxPiuPiu = 0;
idxScream = 1;
Inovet ©   (24.03.12 19:45) [21]


 
RWolf ©   (2012-03-24 20:39) [24]

как программа проиграет звук, если ей о нём ничего не известно?
плагин его загрузил, плагин пусть его и играет.


 
Inovet ©   (2012-03-24 20:40) [25]

> [23] Хаус   (24.03.12 20:33)
> имена индефикаторов

Плагин пусть именует у себя а в хост отдаёт ИД по соглашению. Например, получить первый свободный, вернуть количество.


 
Хаус   (2012-03-25 19:09) [26]


> RWolf ©   (24.03.12 20:39) [24]
>
> как программа проиграет звук, если ей о нём ничего не известно?
>


вот именно, не возможно создать программно именнованую переменную.
вы предлагаете создавать переменные с именами звуков, это 1-й предложенный мною вариант, портиться пространство имен.
тогда уж 2й вариант. блин, 100 раз приходиться объснять


 
Inovet ©   (2012-03-25 19:27) [27]

> [26] Хаус   (25.03.12 19:09)
> 100 раз приходиться объснять

Ещё раз. Не понятно что ты там строишь, чтобы ответить что-либо определённое.


 
Хаус   (2012-03-25 19:30) [28]

игра с 1000 звуков, нужно их как-то динамично проигрывать,
поэтому важна архитектура.


 
Inovet ©   (2012-03-25 19:33) [29]

> [28] Хаус   (25.03.12 19:30)
> игра с 1000 звуков, нужно их как-то динамично проигрывать

Куда они запуздырены? Кто их проигрывает? Надо ли видеть их названия? Может это просто схемы как в Виндоус? и т.п..


 
QAZ   (2012-03-25 21:11) [30]


> портиться пространство имен.

какое нафиг пространство имен?

> 100 раз приходиться объснять

аты ничего и не объяснял,просто бредил какимито патернами...


 
Хаус   (2012-03-25 22:14) [31]


> Куда они запуздырены?


в программу ко


> Кто их проигрывает?


либа BASS, а ты подумал про компоненты? которыми тут даже не пахнет


> Надо ли видеть их названия?


как ты отличишь тогда один звук от другого?


> Может это просто схемы как в Виндоус? и т.п..


я откуда знаю


> какое нафиг пространство имен?


Википедию читай


> аты ничего и не объяснял,просто бредил какимито патернами.
> ..


ты можешь выйти из ветки "какимито патернами." м-де
читай лучше


 
Inovet ©   (2012-03-25 22:18) [32]

> [31] Хаус   (25.03.12 22:14)

Ты снова не выдал тайну.


 
RWolf ©   (2012-03-25 23:27) [33]


> вы предлагаете создавать переменные с именами звуков

нет, не предлагаю.
Переменная всего одна — массив. Программа обращается к звукам как к элементам массива, индексы задаются константами.
Константы — это не переменные, перечисление — тоже; будет их в программе сто или сто тысяч — ничего не меняет.
Про «замусоривание» вообще непонятно. Тысячи констант из юнита Windows кому-нибудь мешают?



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.52 MB
Время: 0.079 c
15-1332156687
alexdn
2012-03-19 15:31
2013.03.22
Фотошоп?..


15-1342297802
Юрий
2012-07-15 00:30
2013.03.22
С днем рождения ! 15 июля 2012 воскресенье


2-1332860610
Дмитрий С
2012-03-27 19:03
2013.03.22
SavePictureDialog и сохранение.


2-1347886681
fredwriter
2012-09-17 16:58
2013.03.22
AlphaBlend: наложить bmp на jpg или наоборот


2-1340353773
Chuck Bass
2012-06-22 12:29
2013.03.22
автоматическое обновление программы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский