JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

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

Bitmap anzeigen

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Sunrise
Mini JLI'ler



Anmeldedatum: 04.09.2005
Beiträge: 2

Medaillen: Keine

BeitragVerfasst am: 04.09.2005, 22:39    Titel: Bitmap anzeigen Antworten mit Zitat

Hi ich übe mich noch nicht sehr lange mit Dx hab mir daher ein Buch gekauft und verstehe es auch ganz gut . Hab nun auf grund des wissens und des inhalts ein kleines prog gemacht das sounds ausgeben kann und eigentlich bitmaps nur gerade die will es nicht anzeigen und ich weis nicht warum. es bringt keine fehler meldung und nix des fenster ist einfach weis!

CPP:
# include <stdio.h>
# include <windows.h>
# include <ddraw.h>
# include <dsound.h>
# include "ddutil.h"
# include "dsutil.h"
# include "resource.h"



const int display_netto_breite = 700; // display breite innen Raum
const int display_netto_hoehe = 550; // display hoehe innen Raum
 
int display_breite; // Breite des gesamten Haupfensters (incl. Rahmen)
int display_hoehe; // Hohe des gesamten Haupfensters (incl. Rahmen)

HINSTANCE shadow_instance;           // Instanz der Ultris Applikation
HWND shadow_window;                  // Das Hauptfenster von Ultris
HMENU shadow_menu;                   // Das Menu von Ultris



// V2 Beginn ### sound
const int sound_start   = 0; // Sound fuer  Spiel
const int anzahl_sounds = 1; // Anzahl Sounds

char *soundfiles[anzahl_sounds] =
   {
   "loop.wav"
   };


class sounds
   {
   private:
      CSoundManager smgr;
      CSound *snd[anzahl_sounds];
   public:
      int on;
      sounds();
      int init( HWND wnd);
      void play( int snr);
      ~sounds();
   };

sounds::sounds()
   {
   int i;

   for( i = 0; i < anzahl_sounds; i++)
      snd[i] = 0;
   on = 1;
   }


int sounds::init( HWND wnd)
   {
   HRESULT ret;
   int i;

   ret = smgr.Initialize( wnd, DSSCL_PRIORITY, 2, 22050, 16);
   if( ret < 0)
      return ret;

   for( i = 0; i < anzahl_sounds; i++)
      {
      ret = smgr.Create( snd+i, soundfiles[i]);
      if( ret < 0)
         return ret;
      }
   return S_OK;
   }

sounds::~sounds()
   {
   int i;

   for( i = 0; i < anzahl_sounds; i++)
      {
      if( snd[i])
         delete snd[i];
      }
   }

void sounds::play( int i)
   {
   if( !on)
      return;
   if( snd[i]->IsSoundPlaying())
      {
      snd[i]->Stop();
      snd[i]->Reset();
      }
   snd[i]->Play(0,0);
   }

// Sound classe ersteellen
sounds shadow_sounds;
// V2 Ende



// V3 Beginn
class display
   {
   private:
      CDisplay dsply;
      CSurface *hgrnd;

   public:
      display();
      void free_all();
      ~display() {free_all();}
      HRESULT init( HWND wnd);
        void hintergrund() { dsply.Blt( 0, 0, hgrnd);}
      void update() { dsply.UpdateBounds();}
      HRESULT cooperative(){ return dsply.GetDirectDraw()->TestCooperativeLevel();}
      HRESULT restore();
      HRESULT present();
   };

display::display()
   {
   hgrnd = 0;
   }

void display::free_all()
   {
    if( hgrnd)
      delete hgrnd;

   }

HRESULT display::init( HWND wnd)
   {
   HRESULT hr;


    hr = dsply.CreateWindowedDisplay( wnd, display_netto_breite, display_netto_hoehe );
   if( hr < 0)
      return hr;
   hr = dsply.CreateSurfaceFromBitmap( &hgrnd, "hgrnd.bmp", 700, 550);
   if( hr < 0)
      return hr;

    return S_OK;
   }


HRESULT display::restore()
   {
    HRESULT hr;

    LPDIRECTDRAWPALETTE pal = 0;

    hr = dsply.GetDirectDraw()->RestoreAllSurfaces();
   if( hr < 0)
      return hr;
   hr = hgrnd->DrawBitmap( "hgrnd.bmp", 700, 550);
   if( hr < 0)
      return hr;

    return S_OK;
   }

HRESULT display::present()
   {
   HRESULT hr;

   hr = dsply.Present();
   if( hr == DDERR_SURFACELOST )
      return restore();
   return hr;
   }

display shadow_display;

// V3 Ende








LRESULT CALLBACK shadow_windowhandler( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
   {
   switch(msg)
      {
   case WM_COMMAND:
      switch( LOWORD( wParam))
         {
      case IDM_EXIT:
            PostMessage( hWnd, WM_CLOSE, 0, 0);
         return 0;

// V2 Beginn
      case IDM_GAME_SOUND:
         shadow_sounds.on = !shadow_sounds.on;
         CheckMenuItem( shadow_menu, IDM_GAME_SOUND, shadow_sounds.on ? MF_CHECKED:MF_UNCHECKED);
         return 0;
// V2 Ende

         }
      break;
   case WM_GETMINMAXINFO:
      ((MINMAXINFO *)lParam)->ptMinTrackSize.x = ((MINMAXINFO *)lParam)->ptMaxTrackSize.x = display_breite;
      ((MINMAXINFO *)lParam)->ptMinTrackSize.y = ((MINMAXINFO *)lParam)->ptMaxTrackSize.y = display_hoehe;
      return 0;
   case WM_DESTROY:
      PostQuitMessage( 0);
      return 0;
// V3 Anfang
   case WM_MOVE:
      shadow_display.update();
      return 0;
   case WM_PAINT:
         
      shadow_display.hintergrund();

      shadow_display.present();
      break;
// V3 Ende
      }
    return DefWindowProc(hWnd, msg, wParam, lParam);
   }






int APIENTRY WinMain( HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR pCmdLine, int nCmdShow)
   {

    MSG msg;
    HACCEL acc;
    WNDCLASSEX wcx;

    wcx.cbSize        = sizeof( wcx);
    wcx.lpszClassName = TEXT( "Shadow");
    wcx.lpfnWndProc   = shadow_windowhandler;
    wcx.style         = CS_VREDRAW | CS_HREDRAW;
    wcx.hInstance     = hInst;
    wcx.hIcon         = LoadIcon( hInst, MAKEINTRESOURCE( IDI_MAIN));
    wcx.hIconSm       = LoadIcon( hInst, MAKEINTRESOURCE( IDI_MAIN));
    wcx.hCursor       = LoadCursor( NULL, IDC_ARROW);
    wcx.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
    wcx.lpszMenuName  = MAKEINTRESOURCE( IDR_MENU);
    wcx.cbClsExtra    = 0;
    wcx.cbWndExtra    = 0;

    if( !RegisterClassEx( &wcx))
        return 0;

   acc = LoadAccelerators( hInst, MAKEINTRESOURCE(IDR_ACCEL)); // Tastaturkürzel werden geladen ( Strg + A )


   display_hoehe = display_netto_hoehe + 2 * GetSystemMetrics( SM_CYSIZEFRAME)                                 + GetSystemMetrics( SM_CYMENU)
                                    + GetSystemMetrics( SM_CYCAPTION);
   // Hohe ist die fenstergrösse (innen) + 2 mal rahmen + menue grösse

   display_breite = display_netto_breite + 2 * GetSystemMetrics( SM_CXSIZEFRAME);
   // Breite ist fensterbreite (innen) + 2 mal rahmen



   if ( shadow_display.init( shadow_window ) < 0 )
      {
      MessageBox(shadow_window,"Fehler beim Initialisieren der Grafik","Shadow Fehlermeldung", MB_OK | MB_ICONERROR | MB_SETFOREGROUND);
      return 0;
      }


   // Fenster erzeugen
    shadow_window = CreateWindowEx( 0, TEXT( "Shadow"), TEXT( "Shadow"), WS_OVERLAPPEDWINDOW & ~WS_MAXIMIZEBOX,
                                                 CW_USEDEFAULT, CW_USEDEFAULT,
                                                    display_breite, display_hoehe, NULL, NULL, hInst, NULL);
   // Wenn fehler bei der erzeugung dan prog ende
   if( !shadow_window)
       return 0;

   shadow_menu = GetMenu( shadow_window);


// V2 Beginn
   if( shadow_sounds.init( shadow_window) < 0)
      {
       MessageBox( shadow_window, "Fehler beim Initialisieren der Sounds", "Shadow-Fehlermeldung", MB_OK | MB_ICONERROR | MB_SETFOREGROUND);
      return 0;
      }
   CheckMenuItem( shadow_menu, IDM_GAME_SOUND, shadow_sounds.on ? MF_CHECKED:MF_UNCHECKED);
// V2 Ende



   // In die Mitte der Displays setzen
   MoveWindow( shadow_window, (GetSystemMetrics(SM_CXSCREEN)-display_breite)/2,
                             (GetSystemMetrics(SM_CYSCREEN)-display_hoehe)/2,
                                                             display_breite, display_hoehe, TRUE);
   // Fenster anzeigen
    ShowWindow( shadow_window, nCmdShow);

   // Zugriff auf die Insttance und auf des gobale menue wurde gesichert
   shadow_instance = hInst;
   shadow_menu = GetMenu( shadow_window);


   // Endlos schleife
    while( TRUE)
      {
        if( PeekMessage( &msg, NULL, 0, 0, PM_NOREMOVE)) // Ist eine nachricht vorhanden
         {
            if( GetMessage( &msg, NULL, 0, 0 ) == 0) // Hole die nachricht
                return 0; // Message ist WM_QUIT

          // Tastenkombi auslesen ( Strg + C )
             if( TranslateAccelerator( shadow_window, acc, &msg) == 0)
            {
                TranslateMessage( &msg); // Tastenkombi ausführen
                DispatchMessage( &msg); // Dam Handel zuweisen
            }
         }
      else
         {
// V3 Beginn
         HRESULT hr;
         hr = shadow_display.cooperative();
         if( hr < 0)
            {
            switch( hr )
               {
            case DDERR_EXCLUSIVEMODEALREADYSET:
               Sleep(10);
               break;
            case DDERR_WRONGMODE:
                shadow_display.free_all();
               shadow_display.init( shadow_window);
               PostMessage( shadow_window, WM_PAINT, 0, 0);
               break;
               }
            }
         else
            {
            // Hier koennen wir uns um das Spiel kuemmern
            }
// V3 Ende
         }
   
      }
   }






Sorry Code ist vll bischen lang aber steht halt alles drin (=



Ich hoffe ihr könnt mir helfen bin schon am verzweifeln und hab schon ewig alles rumprobiert usw...[/code]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
JkerryZ
JLI Master Trainee



Anmeldedatum: 18.05.2004
Beiträge: 575
Wohnort: Wolfsburg
Medaillen: Keine

BeitragVerfasst am: 05.09.2005, 14:50    Titel: Antworten mit Zitat

Nur als erste Frage: Die Bitmaps sind aber im richtigen Verzeichnis und haben auch die Namen die im Code angegeben sind?
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: 05.09.2005, 15:44    Titel: Antworten mit Zitat

hm, interessanter Code, vielleicht les ich den auch irgendwann mal komplett durch Wink. Wenigstens das mitd en sounds hätte man wegmachen können, gelle? Spontan hätte ich noch ne Spriteklasse anzubeiten, aber das ist ja wahrscheinlich nicht das was du suchst.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Sunrise
Mini JLI'ler



Anmeldedatum: 04.09.2005
Beiträge: 2

Medaillen: Keine

BeitragVerfasst am: 06.09.2005, 06:10    Titel: Antworten mit Zitat

jed die bilder sind sowohl im code ordner als auch im release ordner.. sonst bringt er ja fehler das sie nicht init.... wurden.

jep sorry hätte icch vll machen können )=

also mir geht es nur darum ein fensgter zu erstellen und dan einen hintergrund für ein minni 2d rollenspiel zu machen. am besten so das man wenn mann noch obben läuft es mit scrollt... und halt ein player bild und bäume usw... (=

ich denk das des mit dem code wohln nicht gehen wird da ich denke das des mit den surface nicht scollbar ist oder ?

könntet mir auch ganz andere vorschläge bringen (=


thx
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
GreveN
JLI Master


Alter: 38
Anmeldedatum: 08.01.2004
Beiträge: 901
Wohnort: Sachsen - Dresden
Medaillen: Keine

BeitragVerfasst am: 06.09.2005, 06:50    Titel: Antworten mit Zitat

Ja, vergiss das RPG und schreib erstmal ein Snake oder Tetris für den Anfang.
Nimm dazu nicht direkt D3D, OGL, DD oder sonstwas, sondern geh die Sache langsam an.
Ein Konsolenfenster + SDL dürfte für deine Zwecke mehr als ausreichen.

btw.:
Zudem würde ich heutzutage selbst für 2D-Grafik eine 3D-API, vorziehen. 4 Vertices, eine Textur draufkleben und du hast dein Sprite. Außerdem super easy scrollbar usw.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Yahoo Messenger MSN Messenger
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL Alle Zeiten sind GMT
Seite 1 von 1

 
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