Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.03.2009, 13:03   #1
Вадим Буренков
Участник клуба
 
Аватар для Вадим Буренков
 
Регистрация: 06.03.2009
Сообщений: 1,346
Вопрос Использование MediaPlayer в своем классе.

У меня в игре есть класс TEnemy:
Код:
TEnemy = class 
   Enemy: Tbitmap; 
   //Boom: Tbitmap; 
   Xpos,Ypos:integer;
   Xspeed, Yspeed:integer;
   EnemyBorn : boolean;
   MPlayer:TMediaPlayer //??????
   Procedure LoadMem(path:string);
   Procedure FreeMem;
   Procedure CreateEnemy;
   procedure DestroyEnemy;
   procedure DrawEnemy;
end;
Можно ли запихнуть в класс компонент MediaPlayer.
Чтобы я мог создать массив из TEnemy
Код:
Enem: array [1..10] of TEnemy;
и при смерти врага проигрывать определенный звук
Код:
Enem[4].Mplayer.play;
(Это все пример)
Ведь врагов много, для каждого собственный плеер не создашь.Или как еще можно проигрывать много звуков одновременно?
Вадим Буренков вне форума Ответить с цитированием
Старый 27.03.2009, 14:41   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

У MediaPlayer есть свойство Shareable.
Цитата:
Description

If Shareable is false, no other components or applications can access the device. If Shareable is true, more than one component or application can access the device. Shareable defaults to false.
Be sure to set Shareable before opening a device.
Some devices are not shareable. If Shareable is set to true for a device that isn't shareable, the Open method fails and the error code is returned to the Error property.
Вы что - хэлпом пользоваться совсем не умеете?
mihali4 вне форума Ответить с цитированием
Старый 27.03.2009, 14:51   #3
Манжосов Денис :)
Участник клуба
 
Регистрация: 29.01.2008
Сообщений: 1,039
По умолчанию

можно вызывать процедуру (созданную отдельно вами)

Код:
procedure UnitDestroy;
begin
  PlaySound('Имя файла.wav', 0, SND_ASYNC);
end;
Это позволит проигрывать звук. Предварительно подключить модуль MMSYSTEM.
P.S. Процедура будет работать только для Wav и Midi файлов.
Манжосов Денис :) вне форума Ответить с цитированием
Старый 27.03.2009, 18:24   #4
Вадим Буренков
Участник клуба
 
Аватар для Вадим Буренков
 
Регистрация: 06.03.2009
Сообщений: 1,346
По умолчанию

Цитата:
Вы что - хэлпом пользоваться совсем не умеете?
Он на английском языке.

А можно с помощью PlaySound проигрывать нескольео звуков одновременно?Если поставить в очередь то проигрываться будет посдедний.
Код:
PlaySound('sound\Game\Start.wav', 0, SND_ASYNC);  
PlaySound('sound\Music\AQUA.wav', 0, SND_ASYNC); //проигрывается только этот

Последний раз редактировалось Вадим Буренков; 27.03.2009 в 20:29.
Вадим Буренков вне форума Ответить с цитированием
Старый 29.03.2009, 10:56   #5
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Вадим Буренков, советую вам воспользоваться библиотекой FMOD, только не последнюю (в ней от поддержки Дельфи отказались), а 3-ю версию скачайте.
Правда, там хэлп тоже на английском Но есть примеры на Дельфи, его то вы знаете?
оф. сайт http://www.fmod.org/
скачать версию 3.75 http://www.fmod.org/index.php/releas...dapi375win.zip

По теме: Можно конечно, также как и объект любого другого класса. В конструкторе вашего класса создаете плеер, там же или в другом отдельном методе загружаете ему имя файла и открываете, в деструкторе вашего класса удаляете плеер.
Код:
TEnemy = class 
   Enemy: Tbitmap; 
   //Boom: Tbitmap; 
   Xpos,Ypos:integer;
   Xspeed, Yspeed:integer;
   EnemyBorn : boolean;
   MPlayer: TMediaPlayer; //все правильно, так и надо
   Procedure LoadMem(path:string);
   Procedure FreeMem;
   Procedure CreateEnemy;
   procedure DestroyEnemy;
   procedure DrawEnemy;
  constructor Create(fn: TFileName); override;
  destructor Destroy;
end;

constructor TEnemy.Create(fn: TFileName);
begin
  inherited Create;
  MPlayer:=TMediaPlayer.Create(nil);
  MPlayer.FileName:=fn;
  MPlayer.Open;
end;

destructor TEnemy.Destroy;
begin
  MPlayer.Free;
  inherited Destroy;
end;
Цитата:
Ведь врагов много, для каждого собственный плеер не создашь.
Именно это вы и сделаете, "впихнув" плеер в ваш класс, создадите для каждого объекта (врага) свой объект - плеер. В любом случае кол-во объектов - плееров будет то же. Просто все будет более упорядочено, и скрыто от глаз, что есть верный подход.

Другое дело если у всех врагов звук умирания один и тот же, тогда это лишняя трата ресурсов создавать для каждого свой плеер, достаточно будет одного общего. А чтобы звук воспроизводился вовремя, можно всегда перед методом Play вызывать метод отмотки в начало, непомню его имя.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог

Последний раз редактировалось mutabor; 29.03.2009 в 11:41.
mutabor вне форума Ответить с цитированием
Старый 03.04.2009, 17:16   #6
Вадим Буренков
Участник клуба
 
Аватар для Вадим Буренков
 
Регистрация: 06.03.2009
Сообщений: 1,346
По умолчанию

Сделал так, но при выполнении MPlayer.open; компилятор пишет 'Control " has no parent window'

Последний раз редактировалось Вадим Буренков; 03.04.2009 в 17:26.
Вадим Буренков вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
использование php5ts.dll в своем приложении Dj_smart PHP 10 07.12.2008 15:17
Использование String^ в классе Selebro Общие вопросы C/C++ 2 01.12.2008 11:13
константность в классе softrix Общие вопросы C/C++ 1 17.06.2008 00:21
Использование DLL от третьей стороны в своем проекте Yuran Общие вопросы Delphi 10 02.06.2008 19:04