| 
			
				|  | JLI Spieleprogrammierung 
 
 |  
 
	
		| Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |  
		| Autor | Nachricht |  
		| philipp_boeing JLI'ler
 
  
 Alter: 35
 Anmeldedatum: 26.07.2003
 Beiträge: 188
 
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 11.09.2003, 09:12    Titel: Intro |   |  
				| 
 |  
				| hi, 
 wie kann ich in mein Spiel ein Intro einbauen (ist in .avi) Am besten so das man es mit ESC abrechen kann.
 |  |  
		| Nach oben |  |  
		|  |  
		| Cyianor Super JLI'ler
 
  
 
 Anmeldedatum: 23.12.2002
 Beiträge: 452
 
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 11.09.2003, 11:54    Titel: |   |  
				| 
 |  
				| Verwende einfach DShow, des is leicht zu lernen. (Tut im Netz suchen.) |  |  
		| Nach oben |  |  
		|  |  
		| TheMillenium Dark JLI'ler
 
 
 
 Anmeldedatum: 21.07.2002
 Beiträge: 1427
 Wohnort: World
 Medaillen: Keine
 
 
 |  |  
		| Nach oben |  |  
		|  |  
		| philipp_boeing JLI'ler
 
  
 Alter: 35
 Anmeldedatum: 26.07.2003
 Beiträge: 188
 
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 11.09.2003, 12:17    Titel: |   |  
				| 
 |  
				| ist DShow denn in DX9 noch drin? Geht es auch mit D3D? |  |  
		| Nach oben |  |  
		|  |  
		| X-FILE Super JLI'ler
 
 
 
 Anmeldedatum: 12.07.2003
 Beiträge: 349
 
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 11.09.2003, 14:23    Titel: |   |  
				| 
 |  
				| Hallo, 
 so aus aktueller Erfahrung eine kleine Hilfe:
 
 Ja DShow is in DX9 drinenn und hat mit oder ohne D3D nix zu tun. Das was du vorhast ufert in einer großen Aktion aus! Nur so nebenbei.
 
 Die Schritte waeren folgende:
 1. DShow initialisieren. Fuer nen Film brauchst du das IMediaEvent, IVideoWindow, IGraphBuilder und das IMediaControl - Element. Wie zu benutzen kuck in der DX Hilfe nach. Is ned schwer.
 
 2. Du musst das Fenster mit auf Fullscreen aufblasen, indem du entweder eine Rectangle ueber den ganzen Screen zeichnest oder das Fenster direkt vergroeßerst. Hat beides vor und Nachteile.
 
 3. Datei laden.
 
 4. Graph-Elemente aufbauen (s.o.) und Rendern der Datei.
 
 Wenn du jetzt das ganze mit der Taste ESC oder einer anderen Beenden willst wirds schwerer. Hast du das Fenster direkt aufgeblasen, must du ein zweites "Fake"-Window erstellen, dass fuer dich die Nachrichten behandelt und weitergibt. Hast du die andere Variante gewaehlt, dann musst du zuerst die Surfaces loeschen, flippen und leer zeichnen. Dann kannst du den Player "weg"initialisieren (oder CoUninitializen
  ) 
 Hope it helps.... ist jedenfalls nicht ganz einfach.
 |  |  
		| Nach oben |  |  
		|  |  
		| philipp_boeing JLI'ler
 
  
 Alter: 35
 Anmeldedatum: 26.07.2003
 Beiträge: 188
 
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 11.09.2003, 14:26    Titel: |   |  
				| 
 |  
				| erstmal: Danke für die Antwort 
 Allerdings bin ich noch nicht ganz so erfahren um das zu machen, gibt es dafür auch ein Code-beispiel was ich einbauen könnte?
 
 MfG
 
 Philipp Böing
 |  |  
		| Nach oben |  |  
		|  |  
		| Hazel JLI MVP
 
  
  
 Alter: 40
 Anmeldedatum: 19.07.2002
 Beiträge: 1761
 
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 11.09.2003, 14:35    Titel: |   |  
				| 
 |  
				| Probier es doch erstmal? ;) Wenn du nur "ein Codebeispiel "einbaust", bist du hinterher genauso erfahren wie im Moment. _________________
 *click* Dabuu!?
 Twitter: http://twitter.com/Ollie_R
 
 |  |  
		| Nach oben |  |  
		|  |  
		| X-FILE Super JLI'ler
 
 
 
 Anmeldedatum: 12.07.2003
 Beiträge: 349
 
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 11.09.2003, 14:37    Titel: |   |  
				| 
 |  
				| Hmmm, japp schließe mich Hazel an, obwohl ichs auch gern bequemer gehabt haette    *versteck* 
 Ich hab hier mal nen Link fuer dich. Der taugt nix um das ins Spiel einzubauen, aber wie DShow funktioniert und nen Windowplayer zulaesst, taugts schon.
 
 http://www.gamedev.net/reference/articles/article1345.asp
 |  |  
		| Nach oben |  |  
		|  |  
		| philipp_boeing JLI'ler
 
  
 Alter: 35
 Anmeldedatum: 26.07.2003
 Beiträge: 188
 
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 11.09.2003, 15:21    Titel: |   |  
				| 
 |  
				| bin schon etwas weiter: 
 dieser code erzeugt ein Fenster neben dem Hauptfenster namens "Active Movie Window"
 
 
  	  | Code: |  	  | #include <windows.h> #include <dshow.h>
 #include <stdio.h>
 
 
 // Anwendungsfenster erzeugen
 HWND CreateMainWindow(HINSTANCE hInstance);
 
 //Callback Funktion zur Nachrichtenbehandlung
 LRESULT CALLBACK MessageHandler(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam);
 
 
 // Das Fensterhandle
 HWND hWnd = 0;
 
 
 
 IGraphBuilder *pGraph = NULL;
 IMediaControl *pControl = NULL;
 IMediaSeeking *lpSeeking = NULL;
 IMediaEventEx   *pEvent = NULL;
 LONGLONG Pos= 0;
 bool done=false;
 
 
 
 
 
 
 int WINAPI WinMain(HINSTANCE hInstance,      // Handle der Programminstanz
 HINSTANCE hPrevInstance,  // Handle der letzten Instanz
 LPSTR lpCmdLine,          // Kommandozeile
 int nCmdShow)             // Art wie das Fenster angezeigt werden soll
 {
 
 
 // Fenster erzeugen und Handle speichern
 hWnd = CreateMainWindow(hInstance);
 
 // Wenn der Rückgabewert 0 ist, ist ein Fehler aufgetreten
 if(0 == hWnd)
 {
 MessageBox(0,"Fenster konnte nicht erzeugt werden","Fehler",MB_OK);
 return 0;
 }
 
 // Struktur, in der Informationen zur Nachricht gespeichert werden
 MSG msg;
 
 // Diese Schleife läuft bis die Nachricht WM_QUIT empfangen wird
 while(true)
 {
 if(PeekMessage(&msg,0,0,0,PM_REMOVE))
 {
 TranslateMessage(&msg);
 DispatchMessage(&msg);
 
 if(WM_QUIT == msg.message)
 {
 break;
 }
 }
 else {
 
 
 
 
 
 
 if(done==false)
 {
 // Initialize the COM library.
 HRESULT hr = CoInitialize(NULL);
 if (FAILED(hr))
 {
 printf("ERROR - Could not initialize COM library");
 return 0;
 }
 
 // Create the filter graph manager and query for interfaces.
 hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER,
 IID_IGraphBuilder, (void **)&pGraph);
 if (FAILED(hr))
 {
 printf("ERROR - Could not create the Filter Graph Manager.");
 return 0;
 }
 
 
 hr = pGraph->QueryInterface(IID_IMediaControl, (void **)&pControl);
 hr = pGraph->QueryInterface(IID_IMediaEventEx, (void **)&pEvent);
 hr = pGraph->QueryInterface(IID_IMediaSeeking,
 (void **)&lpSeeking);
 
 pEvent->SetNotifyWindow((OAHWND)hWnd, WM_APP, 0);
 
 
 
 
 LPCWSTR Filename =L"E:\\Videos\\Video1.avi";
 IBaseFilter *pSource1;
 IPin *pPin;
 pGraph->AddSourceFilter(Filename,Filename,&pSource1);
 pSource1->FindPin(L"Output", &pPin);
 pGraph->Render(pPin);
 
 
 done = true;
 }
 
 
 
 
 long    evCode, param1, param2;
 HRESULT h;
 
 h = pEvent->GetEvent(&evCode, ¶m1, ¶m2, 0);
 
 pEvent->FreeEventParams(evCode, param1, param2);
 if(evCode)
 lpSeeking->SetPositions(&Pos, AM_SEEKING_AbsolutePositioning , NULL, AM_SEEKING_NoPositioning);
 
 
 
 // Run the graph.
 pControl->Run();
 
 
 }
 } // Big else
 
 
 pControl->Release();
 lpSeeking->Release();
 pEvent->Release();
 pGraph->Release();
 CoUninitialize();
 
 return 0;
 }
 
 
 
 
 
 
 
 
 HWND CreateMainWindow(HINSTANCE hInstance)
 {
 WNDCLASSEX wndClass;                                   // WNDCLASSEX Struktur
 
 // Struktur initialisieren
 wndClass.cbSize        = sizeof(WNDCLASSEX);           // Größe angeben (nie vergessen!)
 wndClass.style         = CS_DBLCLKS | CS_OWNDC |
 CS_HREDRAW | CS_VREDRAW;      // Standard Stile
 wndClass.lpfnWndProc   = MessageHandler;               // Die Callback Funktion angeben
 
 wndClass.cbClsExtra    = 0;                            // Zusätzliche Angaben, wird nicht benötigt
 wndClass.cbWndExtra    = 0;                            // Zusätzliche Angaben, wird nicht benötigt
 wndClass.hInstance     = hInstance;                    // Anwendungsinstanz
 
 wndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);  // Weisser Pinsel
 wndClass.hCursor       = LoadCursor(NULL, IDC_ARROW);  // Normaler Cursor
 wndClass.lpszMenuName  = NULL;                         // Das Fenster hat kein Menü
 wndClass.lpszClassName = "WindowClass";                // Der Name der Klasse
 wndClass.hIcon         = LoadIcon(NULL, IDI_WINLOGO);  // Windows Logo
 wndClass.hIconSm       = LoadIcon(NULL, IDI_WINLOGO);  // Windows Logo
 
 RegisterClassEx(&wndClass);
 
 return CreateWindowEx(NULL,                   // Keine erweiterten Stile nutzen
 "WindowClass",          // Klassenname
 "Hello Windows",        // Fenstertitel
 WS_OVERLAPPEDWINDOW |   // Fenster
 WS_VISIBLE,             // Eigenschaften
 0, 0, 400, 300,         // Anfangsposition und Größe
 NULL,                   // Handle des Elternfensters
 NULL,                   // Handle des Menüs
 hInstance,              // Anwendungsinstanz
 NULL);                  // wird nicht benötigt
 }
 
 
 // Diese Funktion wird von Windows aufgrufen, wenn eine Nachricht
 // für Ihr Programm vorliegt
 LRESULT CALLBACK MessageHandler(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
 {
 // testen, um welche Nachticht es sich handelt
 switch(msg)
 {
 // wenn das Fenster geschlossen wird, eine Nachricht senden,
 // die das Programm beendet
 case WM_DESTROY:
 PostQuitMessage(0);
 return 0;
 break;
 }
 
 // Wenn wir uns nicht um die Nachricht gekümmert haben
 // wird sie an die Standardnachrichtenverarbeitung von Windows
 // geschickt
 return (DefWindowProc(hwnd, msg, wParam, lParam));
 }
 | 
 
 wie schaffe ich es, dass das Video das mit diesem Code im "Active Movie Window" angezeigt wird im Hauptfenster angezeigt wird?
 
 MfG
 
 Philipp Böing
 |  |  
		| Nach oben |  |  
		|  |  
		| TheMillenium Dark JLI'ler
 
 
 
 Anmeldedatum: 21.07.2002
 Beiträge: 1427
 Wohnort: World
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 11.09.2003, 15:40    Titel: |   |  
				| 
 |  
				| Ich weiß es zwar nicht, aber das sieht ziemlich verdächtig nach meinem Code aus, denn ich hier gepostet habe... 
 Wie wär's, wenn du jetzt oben bei meinem Link vorbeischaust und dann weißt wie man's macht?
 _________________
 The source of all power is in its destiny...
 |  |  
		| Nach oben |  |  
		|  |  
		| philipp_boeing JLI'ler
 
  
 Alter: 35
 Anmeldedatum: 26.07.2003
 Beiträge: 188
 
 Medaillen: Keine
 
 
 |  |  
		| Nach oben |  |  
		|  |  
		| TheMillenium Dark JLI'ler
 
 
 
 Anmeldedatum: 21.07.2002
 Beiträge: 1427
 Wohnort: World
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 11.09.2003, 15:54    Titel: |   |  
				| 
 |  
				| In nem Sample kann man zwischen Fullscreen und Fenstermodus umschalten 
  	  | Zitat: |  	  | Source: (SDK root)\Samples\C++\DirectShow\Players\PlayWnd
 
 Executable: (SDK root)\Samples\C++\DirectShow\Bin\PlayWnd.exe
 
 | 
 
 Nachtrag:
 
 Das sieht da z.B. so aus:
 
  	  | Code: |  	  | HRESULT ToggleFullScreen(void) {
 HRESULT hr=S_OK;
 LONG lMode;
 static HWND hDrain=0;
 
 // Don't bother with full-screen for audio-only files
 if ((g_bAudioOnly) || (!pVW))
 return S_OK;
 
 // Read current state
 JIF(pVW->get_FullScreenMode(&lMode));
 
 if (lMode == OAFALSE)
 {
 // Save current message drain
 LIF(pVW->get_MessageDrain((OAHWND *) &hDrain));
 
 // Set message drain to application main window
 LIF(pVW->put_MessageDrain((OAHWND) ghApp));
 
 // Switch to full-screen mode
 lMode = OATRUE;
 JIF(pVW->put_FullScreenMode(lMode));
 g_bFullscreen = TRUE;
 }
 else
 {
 // Switch back to windowed mode
 lMode = OAFALSE;
 JIF(pVW->put_FullScreenMode(lMode));
 
 // Undo change of message drain
 LIF(pVW->put_MessageDrain((OAHWND) hDrain));
 
 // Reset video window
 LIF(pVW->SetWindowForeground(-1));
 
 // Reclaim keyboard focus for player application
 UpdateWindow(ghApp);
 SetForegroundWindow(ghApp);
 SetFocus(ghApp);
 g_bFullscreen = FALSE;
 }
 
 return hr;
 }
 | 
 _________________
 The source of all power is in its destiny...
 |  |  
		| Nach oben |  |  
		|  |  
		| X-FILE Super JLI'ler
 
 
 
 Anmeldedatum: 12.07.2003
 Beiträge: 349
 
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 11.09.2003, 17:12    Titel: |   |  
				| 
 |  
				| Schau dir Milleniums Code an. Das ist die Einzige Moeglichkeit. Du kannst keine Videodateien im Gamewindow ausgeben. Der Graph bildet ein eigenes Fenster, dass du mit put_FullScreen und get_FullScreen machst. |  |  
		| Nach oben |  |  
		|  |  
		| Hazel JLI MVP
 
  
  
 Alter: 40
 Anmeldedatum: 19.07.2002
 Beiträge: 1761
 
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 11.09.2003, 18:00    Titel: |   |  
				| 
 |  
				| @philipp: Der Code ist nur kopiert? Dann finde ich es eine Frechheit zu sagen "ich bin weitergekommen"(ICQ)! Man sollte schon sagen wo man Informationen her hat. _________________
 *click* Dabuu!?
 Twitter: http://twitter.com/Ollie_R
 
 |  |  
		| Nach oben |  |  
		|  |  
		| TheMillenium Dark JLI'ler
 
 
 
 Anmeldedatum: 21.07.2002
 Beiträge: 1427
 Wohnort: World
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 11.09.2003, 18:05    Titel: |   |  
				| 
 |  
				| Ja solche Leute liebe ich, nichts tun und immer Codes sehen können, damit sie ihre Projekte langsam per Copy&Paste verwirklichen können. Altbekanntes Problem hier.  _________________
 The source of all power is in its destiny...
 |  |  
		| Nach oben |  |  
		|  |  
		|  |  
  
	| 
 
 | Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten.
 Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
 Du kannst deine Beiträge in diesem Forum nicht löschen.
 Du kannst an Umfragen in diesem Forum nicht mitmachen.
 
 |  
 Powered by phpBB © 2001, 2005 phpBB Group
 Deutsche Übersetzung von phpBB.de
 |