В общем, эта штука разрабатывалась для ССО, но мне кажется, она будет полезна очень многим, а до выхода ССО ждать не хочется. По-моему, это не должно быть эксклюзивной фишкой ССО (их там и так навалом). Сразу оговорюсь, что полную работоспособность я не гарантирую. Но если кто-то сообщит о баге, это будет очень здорово. :) Инструкция: 1) Подключите пять файлов из архива к своему проекту. Если подключаете к GameMP, то ничего менять не надо, а если к EntitiesMP - поменяйте в СРР-файлах #include "stdafx.h" на #include "stdh.h". 2) Подключите к проекту vfw32.lib. Она должна быть где-то у вас на компьютере. Возможно, придётся подключить ещё gdi32.lib. 3) Посмотрите в PlayVideo.h - здесь всё просто. Названия функций говорят сами за себя. AviPlay нужно вызывать из кадрового метода (например, из RedrawGameView в CGame) с текущим DrawPort'ом самого старшего порядка (желательно). 4) Следует применять видео-файлы БЕЗ звуковой дорожки. Предпочтительный кодек - XVID, но должны работать и другие. Звук к видео вы можете воспроизводить чисто игровыми средствами.
Имеющиеся недочёты: - Пока что видео немного обгоняет звук. Видео, не обгоняющее звук, будет эксклюзивной фишкой ССО. :Р - Я тут использовал одну жутко-deprecated штуковину, которую Microsoft может похоронить любым свежим апдейтом 8-й винды. - Работоспособность на 64-битных системах не проверялась. - 44 уорнинга при компиляции. #pragma warning disable не помогает.
Where did all the dragons go? We searched in the hills and we searched down the canyons, we even scanned the depths of the caves with our armour, swords and lanterns. Oh, if only had we seen him lurch, from his glorious skull covered perch.
CRACK went his claws and SMACK swipped the tail, a ROAR of might, one big BITE.
На самом деле, фишка в том, чтобы рассчитывать не относительное время ожидания кадра (1 / фреймрейт), а абсолютное время его отображения (номер_кадра / фреймрейт) при каждом рендере.
Where did all the dragons go? We searched in the hills and we searched down the canyons, we even scanned the depths of the caves with our armour, swords and lanterns. Oh, if only had we seen him lurch, from his glorious skull covered perch.
CRACK went his claws and SMACK swipped the tail, a ROAR of might, one big BITE.
Видео будет воспроизводиться тогда, когда ты вызовешь AviPlay, и будет занимать весь экран (или всё окно, если игра работает в оконном режиме). В PlayVideo.cpp не нужно ничего писать, там уже всё готово. Писать вызов AviLoad/AviPlay/AviClose надо в том месте, откуда ты хочешь вызывать воспроизведение. Например, внутри RedrawGameView. И прежде, чем спрашивать, что такое RedrawGameView, выполни поиск по файлам.
Where did all the dragons go? We searched in the hills and we searched down the canyons, we even scanned the depths of the caves with our armour, swords and lanterns. Oh, if only had we seen him lurch, from his glorious skull covered perch.
CRACK went his claws and SMACK swipped the tail, a ROAR of might, one big BITE.
AviPlay вызывается с помощью энтитие? Просто я создал Avi.ecl в папке classes и не получается добавить http://i.imgur.com/hwLUkit.jpg "Package: TFNM Bin\Game.dll Class: CPlayVideo" В PlayVideo.h надо просто менять AviPlay, а остальные не трогать: "void AviClose();
BOOL AviIsPlaying();" , (RedrawGameView,CGame, лучше DrawPort так и оставлю!)?
В самих файлах ничего не надо менять. Ты должен создать свой класс, что не сделал и получил ошибку, что такого класса нет. Потому, что его действительно нет.
Добавлено (01.05.2015, 11:35) --------------------------------------------- И ещё, написано же, что AviPlay - это BOOL, и она ничего не воспроизводит, а проверяет, что воспроизводится...
Видеоплеер - даже не класс, а просто набор функций, которые можно вызывать из любого подходящего места.
Where did all the dragons go? We searched in the hills and we searched down the canyons, we even scanned the depths of the caves with our armour, swords and lanterns. Oh, if only had we seen him lurch, from his glorious skull covered perch.
CRACK went his claws and SMACK swipped the tail, a ROAR of might, one big BITE.
Вот, дописал в конец функции CGame::GameRedrawView:
Код
// ======================================================================================= // VIDEO PLAYER // ======================================================================================= if (gfx_strAviFile.Length() > 0) { if (gfx_strAviFile == "stop") { AviClose(); } else { CTString strFilePath(CTString("..\\") + gfx_strAviFile); AviLoad(strFilePath); }
gfx_strAviFile.Clear(); } if (AviPlay(pdpDrawPort)) return;
В данном случае, видео включается и останавливается с помощью консольной команды, которая подключена к переменной gfx_strAviFile. Если в консоли ввести /gfx_strAviFile = C:\MyVideoFile.avi, то будет воспроизведено это видео. Естественно, можно писать и относительные пути (если написать просто MyVideoFile.avi, то винда будет его искать сначала в папке Bin Сэма, а потом по всем путям из системной переменной PATH).
Where did all the dragons go? We searched in the hills and we searched down the canyons, we even scanned the depths of the caves with our armour, swords and lanterns. Oh, if only had we seen him lurch, from his glorious skull covered perch.
CRACK went his claws and SMACK swipped the tail, a ROAR of might, one big BITE.
Просто TCHAR в новых студиях - это wchar_t, а не char. Тебе нужно написать
Код
CTString strFile = CStringA(file);
Where did all the dragons go? We searched in the hills and we searched down the canyons, we even scanned the depths of the caves with our armour, swords and lanterns. Oh, if only had we seen him lurch, from his glorious skull covered perch.
CRACK went his claws and SMACK swipped the tail, a ROAR of might, one big BITE.