| 
			
				|  | JLI Spieleprogrammierung 
 
 |  
 
	
		| Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |  
		| Autor | Nachricht |  
		| CorDharel Junior JLI'ler
 
  
 
 Anmeldedatum: 15.10.2002
 Beiträge: 73
 Wohnort: Winterthur,  Zürich, CH
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 16.07.2005, 13:36    Titel: Einfach mal ein BltFast |   |  
				| 
 |  
				| Hallo zusammen! 
 Da das mit dem Bild kopieren noch nicht klappen wollte  hab ich was einfacheres probiert:
 
 Eine Oberfläche erstellen, mit blau füllen und in primäre Oberfläche kopieren. Genauso wie es in Kapitel 19 im Buch gezeigt wird. Aber nicht mal das geht
  Meine BltFast Funktion ist kaputt   
 Das ist der Code:
 
 
  	  | CPP: |  	  | DDBLTFX BlitFX; 
 //lpDDSurface erstellen
 ZeroMemory(&SurfDesc, sizeof(SurfDesc));
 SurfDesc.dwSize = sizeof(SurfDesc);
 SurfDesc.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH;
 SurfDesc.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY;
 SurfDesc.dwWidth = 100;
 SurfDesc.dwHeight = 100;
 
 if(FAILED( lpDD7->CreateSurface(&SurfDesc,&lpDDSurface,NULL) ))
 {
 Error("Fehler beim erstellen der Oberfläche");
 return;
 }
 
 
 ZeroMemory(&BlitFX,0);
 BlitFX.dwSize = sizeof(BlitFX);
 
 //hintergrundfarbe auf blau setzen
 BlitFX.dwFillColor = CalcColor(0,0,255);
 
 //die oberfläche blau füllen
 lpDDSurface->Blt(NULL,NULL,NULL,DDBLT_COLORFILL,&BlitFX);
 
 //in primäre oberfläche kopieren
 lpDDSPrimary->BltFast(100,100,lpDDSurface,NULL,DDBLTFAST_WAIT);
 | 
 
 Und wenn ich in der zweitletzten Zeile statt lpDDSurface lpDDSPrimary angebe wird das ganze Fenster blau.
 
 Also muss es doch am BltFast liegen, nicht?
   
 Ich bin am verzweifeln
  _________________
 Greetz CorDharel
 |  |  
		| Nach oben |  |  
		|  |  
		| HomeLess_PunkDrummer JLI Master Trainee
 
  
 Alter: 37
 Anmeldedatum: 28.11.2004
 Beiträge: 583
 Wohnort: Alter Joghurtbecher an der A4
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 16.07.2005, 16:18    Titel: |   |  
				| 
 |  
				| Also die Oberfläche die du mit COLORFILL blittest wird selbstverständlich mit der angegebenen Farbe gefüllt... Ist doch logisch, und wenn du die Primary, also den Frontbuffer füllst ist alles voll. 
 Versuch doch in der letzten Zeile einfach mal ohne WAIT hinten.
 Oder du blittest in den Backbuffer (also Secondary) und flippst dann.
 
 
 Gruß
 _________________
 "Was die Götter angeht, so ist es mir unmöglich, zu wissen, ob sie existieren oder nicht, noch, was ihre Gestalt sei. Die Kräfte, die mich hindern, es zu wissen, sind zahlreich, und auch ist die Frage verworren und das menschliche Leben kurz."
 |  |  
		| Nach oben |  |  
		|  |  
		| Jonathan_Klein Living Legend
 
  
 Alter: 38
 Anmeldedatum: 17.02.2003
 Beiträge: 3433
 Wohnort: Siegerland
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 16.07.2005, 17:33    Titel: |   |  
				| 
 |  
				| an dem wait liegts es galube ich net, hab ich auch imemr so gemacht. Vielleicht ist was mit der Gameloop net in Ordnung du blittest ja auch in den Frontbuffer net in den Backbuffer, zeig einfach mal noch die komplete Schleife, evtl. leigt da irgendwo n Fehler. _________________
 https://jonathank.de/games/
 |  |  
		| Nach oben |  |  
		|  |  
		| DirectXer Dark JLI'ler
 
  
 
 Anmeldedatum: 05.02.2005
 Beiträge: 1201
 Wohnort: Köln
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 17.07.2005, 15:35    Titel: |   |  
				| 
 |  
				| hmm, gerade wieder da, code angeguckt und   
 Grund:
  	  | CorDharel hat Folgendes geschrieben: |  	  |  	  | CPP: |  	  | ZeroMemory(&BlitFX,0); | 
 | 
   
 Gruß DirectXer
 |  |  
		| Nach oben |  |  
		|  |  
		| CorDharel Junior JLI'ler
 
  
 
 Anmeldedatum: 15.10.2002
 Beiträge: 73
 Wohnort: Winterthur,  Zürich, CH
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 20.07.2005, 13:53    Titel: |   |  
				| 
 |  
				| Öhm... Ich hab keine Ahnung was du meinst DirectXer, die Zeile 
  	  | CPP: |  	  | ZeroMemory(&BlitFX,0); | 
 
 steht so im Buch auf Seite 322. Was hat dich denn zum
  gebracht? 
 Ich poste jetzt mal die ganze Datei. Sie kompiliert fehlerfrei und bringt einfach ein weisses Fenster, ich will aber dass links oben 100*100 Pixel blau sind. Wichtig ist einfach die Funktion Render().
 
 
  	  | CPP: |  	  | #include <ddraw.h> 
 #pragma comment(lib, "ddraw.lib")
 #pragma comment(lib, "dxguid.lib")
 
 #define COLOR_DEPTH 32
 #define FRAME_RATE 30
 
 //anwendungsfenster erzeugen
 HWND CreateMainWindow(HINSTANCE  hInstance);
 // Farbe berechnen
 int CalcColor(int r, int g, int b);
 void DeterminePixelFormat(LPDIRECTDRAWSURFACE7 lpDDSurface);
 
 LPDIRECTDRAWSURFACE7 CreateSurfaceFromBitmap(LPSTR File, int dWidth, int dHeight);
 
 
 //globale variable für das fensterhandle
 HWND hWnd = 0;
 //directdraw interface
 LPDIRECTDRAW7 lpDD7 = NULL;
 //oberflächen
 LPDIRECTDRAWSURFACE7 lpDDSPrimary;
 LPDIRECTDRAWSURFACE7 lpDDSurface;
 //clFipper
 LPDIRECTDRAWCLIPPER lpDDClipper = NULL;
 //struktur auf beschreibung von oberfläche
 DDSURFACEDESC2 ddsd;
 
 //sekundäre oberfläche
 DDSURFACEDESC2 SurfDesc;
 
 //farben
 int ShiftRed = 0;
 int ShiftGreen = 0;
 int ShiftBlue = 0;
 int PosRed = 0;
 int PosGreen = 0;
 int PosBlue = 0;
 
 //positionen
 int x = 0;
 int y = 0;
 
 
 //callback funktion
 LRESULT CALLBACK MessageHandler( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
 //die objekte freigeben
 void CleanUpDirectDraw(void);
 //error funktion
 int Error( char *msg );
 //ddrawbeispiel
 void Render(void);
 
 
 
 //main funktion
 int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
 {
 //fenster erzeugen und in handle speichern
 hWnd = CreateMainWindow(hInstance);
 
 if( 0 == hWnd )
 {
 MessageBox(0, "Fenster konnte nicht erzeugt werden",
 "Fehler",MB_OK);
 return 0;
 }
 
 //directdrawobjekt erzeugen
 if(FAILED(DirectDrawCreateEx(NULL,(LPVOID*)&lpDD7,IID_IDirectDraw7,NULL)))
 {
 Error("ddobjekt konnte nicht angelegt werden");
 return -1;
 }
 
 //kooperationsebene festlegen
 if(FAILED(lpDD7->SetCooperativeLevel(hWnd,DDSCL_NORMAL)))
 {
 Error("kooperationsebene konnte nicht festgelegt werden");
 return -1;
 }
 
 //struktur initialisieren
 ZeroMemory(&ddsd,sizeof(ddsd));
 ddsd.dwSize = sizeof(ddsd);
 ddsd.dwFlags = DDSD_CAPS;
 
 //primäre oberfläche anlegen
 ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE |DDSCAPS_VIDEOMEMORY;
 if( FAILED (lpDD7->CreateSurface(&ddsd,&lpDDSPrimary,NULL)))
 {
 Error("Primäre oberfläche konnte nicht erzeugt werden");
 return -1;
 }
 
 //clipper anlegen
 if(FAILED(lpDD7->CreateClipper(NULL,&lpDDClipper,NULL)))
 {
 Error("Clipper konnte nicht erzeugt werden");
 return -1;
 }
 
 //clipper mit fenster verbinden
 if(FAILED(lpDDClipper->SetHWnd(0,hWnd)))
 {
 Error("Clipper konnte nicht mit fenster verbunden werden");
 return -1;
 }
 
 //clipper mit oberfläche verbinden
 if(FAILED(lpDDSPrimary->SetClipper(lpDDClipper)))
 {
 Error("Clipper konnte nicht mit oberfläche verbunden werden");
 return -1;
 }
 
 MSG msg;
 
 //Spielschleife
 LONGLONG Frequenz;
 LONGLONG Abstand;
 LONGLONG NaechstesFrame;
 LONGLONG AktuelleZeit;
 
 //wenn der counter vorhanden ist, frequenz speichern
 if( !QueryPerformanceFrequency( (LARGE_INTEGER*)&Frequenz) )
 {
 Error("Performance Counter nicht vorhanden");
 }
 
 //abstand zwischen zwei frames berechnen
 Abstand = Frequenz / FRAME_RATE;
 
 //aktuelle zeit speichern
 QueryPerformanceCounter((LARGE_INTEGER*)&AktuelleZeit) ;
 
 //berechnen wann das nächste frame berechnet werden soll
 NaechstesFrame = AktuelleZeit + Abstand;
 
 while( TRUE )
 {
 if( PeekMessage(&msg,NULL,0,0,PM_REMOVE) )
 {
 //wenn WM_QUIT gesendet wird
 if( msg.message == WM_QUIT )
 {
 break;
 }
 
 TranslateMessage(&msg);
 DispatchMessage(&msg);
 }
 else
 {
 //aktuelle zeit speichern
 QueryPerformanceCounter((LARGE_INTEGER*)&AktuelleZeit) ;
 
 //wenn es zeit für das nächste frame ist
 if( AktuelleZeit > NaechstesFrame )
 {
 Render();
 //verarbeite eingaben mit directinput
 //generiere musik mit directxaudio
 //bewege die gegner
 //bewege den spieler
 //generiere die grafik mit directdraw
 
 //berechnen wann das nächste frame berechnet werden soll
 NaechstesFrame = AktuelleZeit + Abstand;
 }
 }
 }
 
 return 0;
 }
 
 
 LPDIRECTDRAWSURFACE7 CreateSurfaceFromBitmap(LPSTR File, int dWidth, int dHeight)
 {
 //device context für das bild und die oberfläche
 HDC hBmDC, hSurfDC;
 
 //handle der zu ladenden bitmap
 HBITMAP hBM;
 
 //oberflächenbeschreibung
 DDSURFACEDESC2 SurfDesc;
 
 //zeiger auf die oberfläche
 LPDIRECTDRAWSURFACE7 lpDDSurfaceTemp;
 
 //bild laden
 hBM = (HBITMAP)LoadImage(0,File, IMAGE_BITMAP,dWidth,dHeight,LR_LOADFROMFILE);
 
 //ist ein fehler aufgetreten?
 if(NULL == hBM)
 {
 Error("Fehler 1");
 return NULL;
 }
 
 //oberflächenbeschreibung initialisierne
 ZeroMemory(&SurfDesc,sizeof(SurfDesc));
 SurfDesc.dwSize = sizeof(SurfDesc);
 
 //Caps höhe und breite berücksichtigen
 SurfDesc.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH;
 
 SurfDesc.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
 
 SurfDesc.dwWidth = dWidth;
 
 SurfDesc.dwHeight = dHeight;
 
 //oberfläche anlegen
 if(FAILED(lpDD7->CreateSurface(&SurfDesc,&lpDDSurfaceTemp,NULL)))
 {
 Error("Fehler 2");
 return NULL;
 }
 
 //device context von fläche holen
 lpDDSurfaceTemp->GetDC(&hSurfDC);
 
 //kompatiblen DC für bild anlegen
 hBmDC = CreateCompatibleDC(hSurfDC);
 
 //bild für DC holen
 SelectObject(hBmDC,hBM);
 
 //bild in oberfläche kopieren
 BitBlt(hSurfDC,0,0,dWidth,dHeight,hBmDC,0,0,SRCCOPY);
 
 //Device Context freigeben
 lpDDSurfaceTemp->ReleaseDC(hSurfDC);
 
 //DC und bild löschen
 DeleteDC(hBmDC);
 DeleteObject(hBM);
 
 //zeiger zurückgeben
 return lpDDSurfaceTemp;
 }
 
 
 void Render(void)
 {
 DDBLTFX BlitFX;
 
 //lpDDSurface erstellen
 ZeroMemory(&SurfDesc, sizeof(SurfDesc));
 SurfDesc.dwSize = sizeof(SurfDesc);
 SurfDesc.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH;
 SurfDesc.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_NONLOCALVIDMEM;
 SurfDesc.dwWidth = 100;
 SurfDesc.dwHeight = 100;
 
 if(FAILED( lpDD7->CreateSurface(&SurfDesc,&lpDDSurface,NULL) ))
 {
 Error("Fehler beim erstellen der Oberfläche");
 return;
 }
 
 ZeroMemory(&BlitFX,sizeof(BlitFX));
 BlitFX.dwSize = sizeof(BlitFX);
 
 //hintergrundfarbe auf blau setzen
 DeterminePixelFormat(lpDDSurface);
 BlitFX.dwFillColor = CalcColor(0,0,255);
 
 //die oberfläche blau füllen
 lpDDSurface->Blt(NULL,NULL,NULL,DDBLT_COLORFILL,&BlitFX);
 
 //in primäre oberfläche kopieren
 lpDDSPrimary->BltFast(0,0,lpDDSurface,NULL,DDBLTFAST_WAIT);
 
 }
 
 //callback funktion
 LRESULT CALLBACK MessageHandler( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
 {
 switch(msg)
 {
 case WM_DESTROY:
 CleanUpDirectDraw();
 PostQuitMessage(0);
 return 0;
 break;
 case WM_CREATE:
 return 0;
 break;
 case WM_LBUTTONDBLCLK:
 //mausposition in lParam
 return 0;
 break;
 case WM_CLOSE:
 PostQuitMessage(0);
 return 0;
 break;
 }
 
 //wenn andere nachricht > standardfunktion aufrufen
 return DefWindowProc(hWnd,msg,wParam,lParam);
 }
 
 //create main window
 HWND CreateMainWindow(HINSTANCE  hInstance)
 {
 WNDCLASSEX wndClass;   //WNDCLASSEX Struktur
 
 //struktur initialisieren
 wndClass.cbSize = sizeof(WNDCLASSEX);   //grösse angeben
 wndClass.style = CS_DBLCLKS | CS_OWNDC | CS_HREDRAW | CS_VREDRAW;
 
 //callback funktion angeben
 wndClass.lpfnWndProc = MessageHandler;
 
 wndClass.cbClsExtra = 0;
 wndClass.cbWndExtra = 0;
 wndClass.hInstance = hInstance;
 
 //weisser pinsel für hintergrund
 wndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
 
 //standard mauscursor verwenden
 wndClass.hCursor = LoadCursor(NULL,IDC_ARROW);
 
 //das fenster soll kein menü haben
 wndClass.lpszMenuName = NULL;
 
 //name der fensterklasse für createwindowex
 wndClass.lpszClassName = "WindowClass";
 
 //icons für fenster anlegen
 wndClass.hIcon = LoadIcon(NULL, IDI_WINLOGO);
 
 wndClass.hIconSm = LoadIcon ( NULL, IDI_WINLOGO);
 
 //fensterklasse registrieren für createwindowex
 RegisterClassEx(&wndClass);
 
 return CreateWindowEx(
 NULL,
 "WindowClass",
 "Ein einfaches Fenster",
 WS_OVERLAPPEDWINDOW | WS_VISIBLE,
 0, 0,
 800, 600,
 NULL, NULL,
 hInstance,
 NULL);
 }
 
 //die objekte freigeben
 void CleanUpDirectDraw(void)
 {
 //prüfen ob zeiger gültig sind
 if( NULL != lpDDSPrimary )
 {
 lpDDSPrimary->Release();
 lpDDSPrimary = NULL;
 }
 if( NULL != lpDDClipper )
 {
 lpDDClipper->Release();
 lpDDClipper = NULL;
 }
 if( NULL != lpDD7 )
 {
 lpDD7->Release();
 lpDD7 = NULL;
 }
 }
 
 
 int Error( char *msg )
 {
 //nachricht ausgeben
 OutputDebugString(msg);
 OutputDebugString("\n");
 
 //messagebox ausgeben
 MessageBox(hWnd,msg,"Fehler",MB_OK);
 
 return -1;
 }
 
 // Farbe berechnen
 void DeterminePixelFormat(LPDIRECTDRAWSURFACE7 lpDDSurface)
 {
 //pixelformat bestimmen
 DDPIXELFORMAT ddpf;
 
 ddpf.dwSize = sizeof(ddpf);
 lpDDSurface->GetPixelFormat(&ddpf);
 
 //position der maske für rot bestimmen
 while( 0 == (ddpf.dwRBitMask & 1) )
 {
 ddpf.dwRBitMask >>= 1;
 PosRed++;
 }
 
 if( ddpf.dwRBitMask == 31)
 ShiftRed = 3;
 else
 ShiftRed = 2;
 
 //position der maske für grün bestimmen
 while(0 == (ddpf.dwGBitMask & 1 ))
 {
 ddpf.dwGBitMask >>= 1;
 PosGreen++;
 }
 
 if( ddpf.dwGBitMask == 31)
 ShiftGreen = 3;
 else
 ShiftGreen = 2;
 
 //make für blau beginnt immer bei 0
 
 PosBlue = 0;
 
 if( ddpf.dwBBitMask == 31)
 ShiftRed = 3;
 else
 ShiftRed = 2;
 
 }
 
 int CalcColor(int r, int g, int b)
 {
 switch(COLOR_DEPTH)
 {
 case 32:
 case 24:
 return ((r<<16) + (g<<8) + b);
 break;
 
 case 16:
 return ((( (r) >> ShiftRed)   << PosRed)   +
 (( (g) >> ShiftGreen) << PosGreen) +
 (( (b) >> ShiftBlue)  << PosBlue));
 
 default:
 return 0;
 }
 }
 
 
 
 | 
 
 Vielleicht könnt ihr damit mehr anfangen
  _________________
 Greetz CorDharel
 
 Zuletzt bearbeitet von CorDharel am 20.07.2005, 23:58, insgesamt einmal bearbeitet
 |  |  
		| Nach oben |  |  
		|  |  
		| Cyianor Super JLI'ler
 
  
 
 Anmeldedatum: 23.12.2002
 Beiträge: 452
 
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 20.07.2005, 17:01    Titel: |   |  
				| 
 |  
				| DirectXer meint das sich hier 
  	  | CPP: |  	  | ZeroMemory(&BlitFX,0); | 
 
 vermutlich der Fehler befindet. Das müsste nämlich
 
  	  | CPP: |  	  | ZeroMemory(&BlitFX,sizeof(BlitFX)); | 
 
 heißen. Weil wenn du als zweiten Parameter 0 verwendest dann werden 0 Bytes von BlitFX auf Null gesetzt. Mit ZeroMemory will man aber normalerweise errichen das die Variable genullt wird. Also muss man auch soviele Bytes nullen wie die Variable groß ist.
 
 Hoffe es ist jetzt verständlich.
 |  |  
		| Nach oben |  |  
		|  |  
		| CorDharel Junior JLI'ler
 
  
 
 Anmeldedatum: 15.10.2002
 Beiträge: 73
 Wohnort: Winterthur,  Zürich, CH
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 20.07.2005, 17:26    Titel: |   |  
				| 
 |  
				| Ja ist verständlich  Christian hat das einfach so im Buch gemacht. 
 Hmm das ist aber nicht der Fehler
  _________________
 Greetz CorDharel
 |  |  
		| Nach oben |  |  
		|  |  
		| Cyianor Super JLI'ler
 
  
 
 Anmeldedatum: 23.12.2002
 Beiträge: 452
 
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 20.07.2005, 17:33    Titel: |   |  
				| 
 |  
				| Ahhh, jetzt fällt mir was auf. Eigentlich gehörst du ja geschimpft weil du soviel Code unsortiert gepostet hast, aber jetzt hats einen Vorteil. 
 Ist dir schonmal aufgefallen das du diese Funktion nicht implementiert hast?
 
 
  	  | CPP: |  	  | void DeterminePixelFormat(LPDIRECTDRAWSURFACE7 lpDDSurface); | 
 
 Deshalb sind ShiftRed, ShiftGreen und ShiftBlue immer 0 und können somit bei CalcColor auch nicht das richtige Ergebnis liefern
   
 [EDIT]
 Und du solltest diese Funktion natürlich auch aufrufen bevor du CalcColor verwendest
  |  |  
		| Nach oben |  |  
		|  |  
		| CorDharel Junior JLI'ler
 
  
 
 Anmeldedatum: 15.10.2002
 Beiträge: 73
 Wohnort: Winterthur,  Zürich, CH
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 20.07.2005, 23:19    Titel: |   |  
				| 
 |  
				| He das könnte es sein! Ich werds gleich ausprobieren. 
 Das hat mit eh immer verwirrt mit dieser Funktion + CalcColor. Ich wollte dann das nachlesen, hab aber immer gedacht das kommt erst nach Kapitel 19 und habs nie gefunden. Heute hab ichs gesehen in Kapitel 17
   
 Ich werd es gleich mal ausprobieren.
 
 [Edit] Ok habs gemacht, aber die blaue Oberfläche wird immer noch nicht fastgeblittet
   
 Ich habe den korrigierten Source oben reingepostet. BTW ist es ja nicht so schlimm, da es ja erst ein kleines Programm ist. Es ist ja nur diese eine Datei. Wer mir eine grosse Freude bereiten will darf gerne mal das Programm in MSVisual Studio laden und ausprobieren und schauen was nicht läuft
   
 Eine gute Sache hat dies alles aber: Ich habe mittlerweile schon vieles über Surfaces, Farben und Blitten gelernt. Jetzt muss es nur noch funktionieren
   
 Vielleicht ein paar Fragen:
 
 - Stimmt es die Funktion Render() in der Spielschleife aufzurufen?
 
 - Stimmt es DeterminePixelFormat genau vor CalcColor aufzuzeichnen?
 
 BTW: Hat vielleicht jemand noch die CD vom ersten Buch? Da wäre der Source sicher drauf. Ich hab die CD leider nicht mehr sonst hätt ich da schon längstens schauen können
   
 Zum Glück hab ich GTA San Andreas, das spiel ich wenn ich mich ärgere und bringe Leute um bei denen ich glaube dass sie schuld sind dass mein BltFast nicht geht
      _________________
 Greetz CorDharel
 |  |  
		| Nach oben |  |  
		|  |  
		| CorDharel Junior JLI'ler
 
  
 
 Anmeldedatum: 15.10.2002
 Beiträge: 73
 Wohnort: Winterthur,  Zürich, CH
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 21.07.2005, 00:33    Titel: |   |  
				| 
 |  
				| YEEEEEEEEEEEAAAAAAAAAAAAAAAHHHHHHHHHHHHHHHHHHHHH!!!!!!!!!!!!!!!!!!!!!!¨ 
 
 Ich hab so ein Tutorial im Inet gemacht, und das erste mal hab ich ein Bild
 in meinem Programm anzeigen können
    Wooohooo Party!!!!     
 
       
 Naja es ist zwar nur mit Blit statt fastblit, aber ich freue mich trotzdem
   
 Ausserdem ist es direkt in die primäre Oberfläche kopiert worden und nicht zuerst in ne sekundäre und dann kopiert. Aber das kommt schon noch
   
 BTW es ist jetzt 2:32 Uhr
   
 [edit] ach ja, übrigens hab ich ein wenig gecheatet und nicht die selber programmierte CreateSurfaceFromBitmap Funktion benutzt sondern die von "ddutil.h", die früher noch im DX SDK zu finden war. Naja hauptsache es funzt
   
 Hier ist das Tutorial das ich gemacht hab
 _________________
 Greetz CorDharel
 |  |  
		| Nach oben |  |  
		|  |  
		| CorDharel Junior JLI'ler
 
  
 
 Anmeldedatum: 15.10.2002
 Beiträge: 73
 Wohnort: Winterthur,  Zürich, CH
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 21.07.2005, 00:44    Titel: |   |  
				| 
 |  
				| WOOOOOOOOOOOOOOOOOOOOOOOWWWWW!!!!! 
 ICH HABE ES GESCHAFFT!!!!! *trompetenmusik*
 
 ICH HABE EIN BLTFAST HINGEKRIEGT!!!
 
 Sorry für den neuen Post, aber das ist jetzt nötig. Das bringt mein Selbstwertgefühl wieder ein wenig nach oben
   
 Und wisst ihr was der Fehler war?
 
 Surf ich doch ganz fridliech zur MSDN, schau bei BltFast vorbei und finde folgenden Satz:
 
 
  	  | Zitat: |  	  | BltFast cannot be used on surfaces that have an attached clipper. | 
 
 D.h. Ich musste im Code vorhin nur den Clipper auskommentieren und schon kriege ich das wundervollste 100*100 Pixel grosse blaue Fenster das mein Computer jemals angezeigt hatte
   
 Ha! Wieder was neues gelernt
  Auf jeden Fall danke ich allen die mir geholfen haben   
 BTW es ist jetzt 2:43 Uhr
  _________________
 Greetz CorDharel
 |  |  
		| Nach oben |  |  
		|  |  
		| DirectXer Dark JLI'ler
 
  
 
 Anmeldedatum: 05.02.2005
 Beiträge: 1201
 Wohnort: Köln
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 21.07.2005, 07:44    Titel: |   |  
				| 
 |  
				| herzlichen Glückwunsch   
 Zu den Bsp. auf der JLI1 CD; die sind hier im JLI auch frei zum runterladen. Ich kenn leider den genauen Link nicht mehr, aber es gibt ja die such-funkrtion
   
 Gruß DirectXer
 |  |  
		| Nach oben |  |  
		|  |  
		| Jonathan_Klein Living Legend
 
  
 Alter: 38
 Anmeldedatum: 17.02.2003
 Beiträge: 3433
 Wohnort: Siegerland
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 21.07.2005, 10:29    Titel: |   |  
				| 
 |  
				|  	  | CorDharel hat Folgendes geschrieben: |  	  | Zum Glück hab ich GTA San Andreas, das spiel ich wenn ich mich ärgere und bringe Leute um bei denen ich glaube dass sie schuld sind dass mein BltFast nicht geht
      | 
 Das ist ja schon fast sadistisch arme unschuldige Passanten wegen den eigenen Fehlern umzubringen. Aber wenn du welche mit roten Pulli und weißen Handschuhen sehen solltest, bring die ruhig um, hab ich bei GTA2 auch immer gemacht, bis es keine mehr von der Sorte gab...
 _________________
 https://jonathank.de/games/
 |  |  
		| Nach oben |  |  
		|  |  
		| Patrick Dark JLI Master
 
  
 
 Anmeldedatum: 25.10.2004
 Beiträge: 1895
 Wohnort: Düren
 Medaillen: Keine
 
 
 |  |  
		| Nach oben |  |  
		|  |  
		| Kronos Senior JLI'ler
 
  
 
 Anmeldedatum: 19.03.2004
 Beiträge: 290
 
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 21.07.2005, 11:25    Titel: |   |  
				| 
 |  
				| Der war mal gut Patrick  . _________________
 
  	  | David hat Folgendes geschrieben: |  	  | Solang meine Beiträge konstruktiver sind als deiner bin ich zufrieden... | 
 Kein Kommentar notwendig. :rolleyes:
 |  |  
		| 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
 |