JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=70e1508687f21363dd3e5cdc4520e000Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Einfach mal ein BltFast
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik
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

BeitragVerfasst am: 16.07.2005, 13:36    Titel: Einfach mal ein BltFast Antworten mit Zitat

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 Evil or Very Mad Meine BltFast Funktion ist kaputt Sad

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? Confused

Ich bin am verzweifeln Crying or Very sad
_________________
Greetz CorDharel
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
HomeLess_PunkDrummer
JLI Master Trainee


Alter: 36
Anmeldedatum: 28.11.2004
Beiträge: 583
Wohnort: Alter Joghurtbecher an der A4
Medaillen: Keine

BeitragVerfasst am: 16.07.2005, 16:18    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 16.07.2005, 17:33    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 17.07.2005, 15:35    Titel: Antworten mit Zitat

hmm, gerade wieder da, code angeguckt und Shocked

Grund:
CorDharel hat Folgendes geschrieben:
CPP:
ZeroMemory(&BlitFX,0);
Wink

Gruß DirectXer
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
CorDharel
Junior JLI'ler



Anmeldedatum: 15.10.2002
Beiträge: 73
Wohnort: Winterthur, Zürich, CH
Medaillen: Keine

BeitragVerfasst am: 20.07.2005, 13:53    Titel: Antworten mit Zitat

Ö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 Shocked 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 Confused
_________________
Greetz CorDharel


Zuletzt bearbeitet von CorDharel am 20.07.2005, 23:58, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Cyianor
Super JLI'ler



Anmeldedatum: 23.12.2002
Beiträge: 452

Medaillen: Keine

BeitragVerfasst am: 20.07.2005, 17:01    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
CorDharel
Junior JLI'ler



Anmeldedatum: 15.10.2002
Beiträge: 73
Wohnort: Winterthur, Zürich, CH
Medaillen: Keine

BeitragVerfasst am: 20.07.2005, 17:26    Titel: Antworten mit Zitat

Ja ist verständlich Smile Christian hat das einfach so im Buch gemacht.

Hmm das ist aber nicht der Fehler Confused
_________________
Greetz CorDharel
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Cyianor
Super JLI'ler



Anmeldedatum: 23.12.2002
Beiträge: 452

Medaillen: Keine

BeitragVerfasst am: 20.07.2005, 17:33    Titel: Antworten mit Zitat

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 Wink

[EDIT]
Und du solltest diese Funktion natürlich auch aufrufen bevor du CalcColor verwendest Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
CorDharel
Junior JLI'ler



Anmeldedatum: 15.10.2002
Beiträge: 73
Wohnort: Winterthur, Zürich, CH
Medaillen: Keine

BeitragVerfasst am: 20.07.2005, 23:19    Titel: Antworten mit Zitat

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 Rolling Eyes

Ich werd es gleich mal ausprobieren.

[Edit] Ok habs gemacht, aber die blaue Oberfläche wird immer noch nicht fastgeblittet Crying or Very sad

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 Very Happy

Eine gute Sache hat dies alles aber: Ich habe mittlerweile schon vieles über Surfaces, Farben und Blitten gelernt. Jetzt muss es nur noch funktionieren Very Happy

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 Sad

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 Twisted Evil Razz Wink
_________________
Greetz CorDharel
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
CorDharel
Junior JLI'ler



Anmeldedatum: 15.10.2002
Beiträge: 73
Wohnort: Winterthur, Zürich, CH
Medaillen: Keine

BeitragVerfasst am: 21.07.2005, 00:33    Titel: Antworten mit Zitat

YEEEEEEEEEEEAAAAAAAAAAAAAAAHHHHHHHHHHHHHHHHHHHHH!!!!!!!!!!!!!!!!!!!!!!¨


Ich hab so ein Tutorial im Inet gemacht, und das erste mal hab ich ein Bild
in meinem Programm anzeigen können Very Happy Very Happy Wooohooo Party!!!! Very Happy Very Happy



Naja es ist zwar nur mit Blit statt fastblit, aber ich freue mich trotzdem Wink

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 Cool

BTW es ist jetzt 2:32 Uhr Wink

[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 Smile

Hier ist das Tutorial das ich gemacht hab
_________________
Greetz CorDharel
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
CorDharel
Junior JLI'ler



Anmeldedatum: 15.10.2002
Beiträge: 73
Wohnort: Winterthur, Zürich, CH
Medaillen: Keine

BeitragVerfasst am: 21.07.2005, 00:44    Titel: Antworten mit Zitat

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 Very Happy

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 Smile

Ha! Wieder was neues gelernt Very Happy Auf jeden Fall danke ich allen die mir geholfen haben Smile

BTW es ist jetzt 2:43 Uhr Wink
_________________
Greetz CorDharel
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 21.07.2005, 07:44    Titel: Antworten mit Zitat

herzlichen Glückwunsch Wink

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 Cool

Gruß DirectXer
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 21.07.2005, 10:29    Titel: Antworten mit Zitat

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 Twisted Evil Razz Wink

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 21.07.2005, 11:19    Titel: Antworten mit Zitat

Jonathan_Klein
Elvis has left the building!
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Kronos
Senior JLI'ler



Anmeldedatum: 19.03.2004
Beiträge: 290

Medaillen: Keine

BeitragVerfasst am: 21.07.2005, 11:25    Titel: Antworten mit Zitat

Der war mal gut Patrick Wink.
_________________
David hat Folgendes geschrieben:
Solang meine Beiträge konstruktiver sind als deiner bin ich zufrieden...

Kein Kommentar notwendig. :rolleyes:
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik Alle Zeiten sind GMT
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
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

Impressum