Jump to content

icebear

Members
  • Content Count

    2105
  • Joined

  • Last visited

  • Days Won

    2

Everything posted by icebear

  1. Модератор сам активно продвигает оффтоп.
  2. Рассмотрите возможность привязки анимации на Л-пемеремнные, если панели уже делаться не будут. Это откроет долгосрочную перспективу использования моделей и намного меньшее наличие нытья.
  3. Да. И если сейчас моё правительство не ответит хотя-бы симметрично на такую фигню, я приложу все свои гражданские права прогнать их из бундестага. Теперь к теме: голландцы - слюнтяи. Роббен например, хоть и отличный игрок, косит часто, больше остальных. И хорошо, что Аргентина вышла в финал, немцам хотя-бы ноги не переломают :D
  4. Ну, когда уже всё решилось, можно свободно вздохнуть. Аргентина лучше, чисто психологически, даже учитывая немного лучшую статистику с голландцами.
  5. Ой, а шо это сразу на "ты"? Так пукан рвёт? Как белый дом с частными лавочками обходися всем известно (ага, т.н. санкции). Эх, нажруться тут многие, когда вам пинка дадут за т.н. "дружбу". Булка - зачот! Я плюс поставил.
  6. На фоне всех тех косяков, прилетевших немцам из США за последние 3/4 года красить дома в национальные цвета - верх наитолстейшего подхалимства. Так понятно?
  7. Отредактируйте тогда, заменив содержимое на "удалено по просьба автора, все вопросы к автору". Andrew88, Вы сами так не можете сделать?
  8. Походу автор не намерен терпеть плевки в лицо за свою работу в виде обвинения в копирастве, так что пусть теперь умные и умелые делают расписания и модели умно и умело.
  9. За это всё отдельное спасибо. Я очень надеюсь, что в беседе было указано на необходимость связываться с авторами перед размещением файлов. А то ведь прецедент, жалобы одних и больше работы рук. составу сайта.
  10. Ну тогда останется сюда сваливать суррогат, недоделки и перепосты с авсимкома. Респект потребителям, уважение и правило хорошего тона убили об стену.
  11. Насколько я знаю - да. Щас под рукой СДК нету. Попробуйте просто перенести цифры из полёта в конфиг панели.
  12. Положение и состояние окон/панелей сохраняется в файле полёта в тех же единицах, в которых они конфигурируются в panel.cfg, а посему перенесети их просто из файла полёта в cfg и всё.
  13. icebear

    Плагиат

    Бог с Вами, конкретно мне до Создателя Великого Кода для Симулятора ой как далеко. Тупо уважайте чужой труд, даже если его потрогать нельзя, а то останетесть без мастурбации мозга. Почему-то труд инженера высказыванием "да я мопед в 12 лет разбирал/собирал" тут никто не принижает, интересно прям.
  14. icebear

    Плагиат

    А почему Вы решили, что авторы моделей должны были что-то аргументировать? Я бы честно, сразу послал бы. Меня всегда умиляло, что люди звереют на простое "нет" и перестают понимать мир. Создайте вещь, на которую у Вас уйдёт существенное кол-во времени, потом поговорим.
  15. icebear

    Плагиат

    Настройки - это детский лепет (они ещё и не всем подойдут). Попробуйте создать сцену, или ещё проще, какой-нибудь эффект. Или тупо собрать пакет траффика какой-либо авиакомпании, со всеми текстурами, конфигами и т.п.
  16. icebear

    Плагиат

    Руками сотворили что-нибудь уже? Когда сотворите - поймёте, сразу расскажите про бессоные ночи, кол-во затраченых человекочасов и т.д.
  17. Это наследие или в новых модулях тоже используются G переменные?
  18. "Не, ну в таких условиях я не могу работать" Условие проигрывания отличается от того, что было пару сообщение назад. Вам нужна не простоя смена состояния, а конкретное, т.е. с одного конретного значение на другое. Попробуйте так: if((gen_mast != gen_mast_st) && (gen_mast == 0)){ m_Sound->PlayNow(); } gen_mast_st = gen_mast; Обратите внимание, присвоение идёт в каждой итерации цикла гауги, теперь оно вне скобок, это важный момент.
  19. Это как понять? И ещё, Вы пишите гаугу "по старинке" или с симконнектом? Просто с симконнектом руки у Вас сильно развязаны и возможностей море.
  20. Возможно что дело в версии DX, здесь у меня просто уже опыта не так много, как хотелось бы. Я так понимаю, у Вас SDK 11-й версии? Почитайте вот это http://www.codeguru.com/cpp/g-m/multimedia/article.php/c1603/Playing-Wave-Files-Directly-From-The-Resource-via-DirectSound.htm , правда там малость другой подход.
  21. Это надо в код гауги смотреть, так по фотографии я мало что могу определить. По поводу загрузки файла я свехру дал полностью рабочий код. Возьмите CSoundFile::LoadFromFile и сделайте как отдельную функцию. Не используйте ресурсы, хотя бы потому что потом у пользователей Вашей гауги будет возможность менять звуковые файлы (подходит для озвучки например). Да и от WAV файлов сам файл гауги распухнет. Ну это конечно всё если хранение звука в ресурсе не самоцель. Ещё, как насчёт нормального дебагера вместо MessageBox? В десятке это также работает, как и в девятке, Вы же свою сборку делаете в дебаг версии? Тогда Вам ясно будет видно, где что валится. И вообще где наши спецы по десятке? То их как песка в море, то все по окопам? Я не знаю, мож там какая особеность есть, которой нет в девятке.
  22. Ох, а что ж всё так сложно? Я так понимаю Вы пытаетесь при запуске подтянуть все файлы из какой-то конкретной sound директории? А зачем? Начните с малого, напишите инициализацию DX и чтение файлов из конктретной директории. Код уже есть. Я, к сожалению, с десяткой знаком поверхностно, но инициализация гауг там аналогична девятке, поэтому советую Вам обратить внимание на функции module_init и module_deinit, в них Вам и надо инициализировать/деинициализировать DX (для этого так же надо будет поковырять Linkage модуля, но это здесь уже обсуждалось тыщу раз). Далее, загружать все файлы сразу я бы не стал, я бы загрузку сделал on demand, т.е. если файл нужен - загрузили, оставили его в списке и делаем с ним всё что надо. Если какой-либо файл никогда не проиграется, то и в памяти ему делать нечего. Приведи пример из нашего тамагочи, надеюсь поможет: Инициализация интерфейса: HWND hwndSim; HINSTANCE hInstanceSim; BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserve){ hwndSim = FindWindow(L"FS98MAIN", NULL); hInstanceSim = (HINSTANCE)hModule; return TRUE; } void FSAPI module_init(void){ soundResMgr = new CSoundResMgr(); if(!soundResMgr->Init(hwndSim)) MessageBox(NULL, L"Unable to initialize sound system", L"Tu2X4-Error", MB_OK); } Заголовок "библиотеки": #ifndef SOUND_RES_MGR #define SOUND_RES_MGR #include <dsound.h> #include <mmsystem.h> #define MIN_SOUND_VOL -10000 #define MAX_SOUND_VOL -3000 #define EXT_VIEW_VOL_DISP 3000 class CSoundResMgr { public: bool Init(HWND hWnd); void DeInit(); const HWND GetModuleWnd(){return hAirplaneWnd;} LPDIRECTSOUND GetDirectSoundInf(){return lpDirectSound;} protected: HWND hAirplaneWnd; LPDIRECTSOUND lpDirectSound; }; class CSoundFile{ public: CSoundFile(CSoundResMgr* soundresmgr){dsbSound = NULL;soundResMgr = soundresmgr;} ~CSoundFile(){if (dsbSound != NULL) { dsbSound->Release(); dsbSound = NULL; }} bool LoadFromFile(char* filename); void PlaySoundNow(bool looped = false); void StopSound(); void SetVolume(LONG volume); bool IsPlaying(); bool IsNearEnd(); protected: CSoundResMgr* soundResMgr; LPDIRECTSOUNDBUFFER dsbSound; DWORD soundCreationOptions; DWORD nearEndBorder; }; #endif Код "библиотеки": #include "SoundResMgr.h" bool CSoundResMgr::Init(HWND hWnd){ hAirplaneWnd = hWnd; if(DirectSoundCreate (NULL, &lpDirectSound, NULL) != DS_OK) return false; if(lpDirectSound->SetCooperativeLevel (hAirplaneWnd, DSSCL_NORMAL) != DS_OK) return false; return true; } void CSoundResMgr::DeInit(){ if (lpDirectSound) { lpDirectSound->Release(); lpDirectSound = NULL; } } bool CSoundFile::LoadFromFile(char* filename){ HMMIO wavefile; wavefile = mmioOpenA (filename, 0, MMIO_READ | MMIO_ALLOCBUF); if (wavefile == NULL) return false; soundCreationOptions = DSBCAPS_CTRLVOLUME | DSBCAPS_GETCURRENTPOSITION2; MMCKINFO parent; memset (&parent, 0, sizeof(MMCKINFO)); parent.fccType = mmioFOURCC ('W', 'A', 'V', 'E'); mmioDescend (wavefile, &parent, 0, MMIO_FINDRIFF); MMCKINFO child; memset (&child, 0, sizeof(MMCKINFO)); child.fccType = mmioFOURCC ('f', 'm', 't', ' '); mmioDescend (wavefile, &child, &parent, 0); WAVEFORMATEX wavefmt; mmioRead (wavefile, (char*)&wavefmt, sizeof(wavefmt)); if(wavefmt.wFormatTag != WAVE_FORMAT_PCM) return false; mmioAscend (wavefile, &child, 0); child.ckid = mmioFOURCC ('d', 'a', 't', 'a'); mmioDescend (wavefile, &child, &parent, MMIO_FINDCHUNK); //soundDuration = (DWORD)(1000 * child.cksize / wavefmt.nAvgBytesPerSec); nearEndBorder = child.cksize - (DWORD)(wavefmt.nAvgBytesPerSec*1.5); DSBUFFERDESC bufdesc; memset (&bufdesc, 0, sizeof(DSBUFFERDESC)); bufdesc.dwSize = sizeof(DSBUFFERDESC); bufdesc.dwFlags = soundCreationOptions; bufdesc.dwBufferBytes = child.cksize; bufdesc.lpwfxFormat = &wavefmt; if((soundResMgr!= NULL) && (soundResMgr->GetDirectSoundInf()->CreateSoundBuffer (&bufdesc, &dsbSound, NULL))!= DS_OK) return false; void *write1 = 0, *write2 = 0; unsigned long length1,length2; dsbSound->Lock (0, child.cksize, &write1, &length1, &write2, &length2, 0); if(write1 > 0) mmioRead (wavefile, (char*)write1, length1); if (write2 > 0) mmioRead (wavefile, (char*)write2, length2); dsbSound->Unlock (write1, length1, write2, length2); mmioClose (wavefile, 0); return true; } void CSoundFile::PlaySoundNow(bool looped){ DWORD dwLooping = looped ? DSBPLAY_LOOPING : 0; if(dsbSound){ if(!IsPlaying()){ dsbSound->SetCurrentPosition(0); dsbSound->Play(0, 0, dwLooping); } } } void CSoundFile::StopSound(){ if(dsbSound) dsbSound->Stop(); } void CSoundFile::SetVolume(LONG volume){ if((dsbSound) && (soundCreationOptions & DSBCAPS_CTRLVOLUME)){ if(volume < MIN_SOUND_VOL) dsbSound->SetVolume(MIN_SOUND_VOL); else if(volume > MAX_SOUND_VOL) dsbSound->SetVolume(MAX_SOUND_VOL); else dsbSound->SetVolume(volume); } } bool CSoundFile::IsPlaying(){ DWORD dwStatus = 0; bool isplaying = false; if(dsbSound){ dsbSound->GetStatus(&dwStatus); isplaying |= ( ( dwStatus & DSBSTATUS_PLAYING ) != 0 ); } return isplaying; } bool CSoundFile::IsNearEnd(){ bool isnearend = false; DWORD curPos = 0; if(dsbSound){ dsbSound->GetCurrentPosition(&curPos, NULL); if(curPos >= nearEndBorder) return true; } return isnearend; } Смысл всего этого в том, что есть класс CSoundFile, который оборачивает один конкретный wav файл. И есть менеджер класс, отвечающий за инициализацию и использование DirectSound. Загрузка и использование файла идёт через CSoundFile::LoadFile Учтите, это всё для девятки (это важно для инициализации, под десятку возможно надо будет малость подправить). И ессно там только те функции, которые нужны были мне для тамагочи, DirectSound может намного больше. Например я сделал у нас адаптацию громкости звука в зависимости от положения наблюдателя (ВСУ например в кабине и ВК еле слышно, а при виде снаружи громкость обычная).
  23. Во-первых перейти на DirectSound, во вторых ввести дополнительное условие проигрывания звука. На данный момент у Вас что-то вроде такого IF[L-VARIABLE HAS SOME DEFINED VALUE] THEN [PLAY SOUND] Надо поменять на IF[L-VARIABLE HAS SOME DEFINED VALUE AND SOUND IS NOT PLAYING] THEN [PLAY SOUND] Переход на DX позволит проигрывать звуки независимо от главного цикла сима. Как вариант - вводить вторую переменную и синхронизировать её с первой только в случае изменения этой первой. Т.е. имеем (пишу псевдокодом, что бы понятнее) VAR L-VARIABLE; VAR STATE_CHANGE_FLAG; PANEL_SERVICE_PRE_INSTAL: L_VARIABLE = 0; STATE_CHANGE_FLAG = 0; PANEL_SERVICE_PRE_UPDATE: IF(L_VARIABLE != STATE_CHANGE_FLAG) THEN BEGIN [PLAY SOUND] STATE_CHANGE_FLAG = L_VARIABLE; END Этот процесс надо оформить в виде одной функции, которая будет вызывать из PANEL_SERVICE_PRE_UPDATE. PANEL_SERVICE_PRE_INSTALL вызывается один раз.
×
×
  • Create New...