JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

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

Sprite wird nicht angezeigt. Brauche hilfe

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Plattform
Mini JLI'ler


Alter: 39
Anmeldedatum: 09.03.2009
Beiträge: 5

Medaillen: Keine

BeitragVerfasst am: 10.03.2009, 00:59    Titel: Sprite wird nicht angezeigt. Brauche hilfe Antworten mit Zitat

Hallo an alle Smile

Also ich hab mir vor langer Zeit das Buch "JLI - DirectX 9 und Visual C++" gekauft. Dann keine Zeit gehabt um es zu lesen und jetzt endlich Zeit gefunden um zu lernen und lesen ^^. Soweit denke ich doch alles verstanden zu haben.

Jetzt wollte ich mich an mein eigenes kleines Projekt wagen doch ich habe ein Problem. Mein Sprite (mein Hintergrund) wird mir nicht angezeigt wenn ich Draw() ausführe.

Hier mal der Code meiner Map.cpp

CPP:
class CMap
{
public:
   CMap( LPDIRECT3DDEVICE9 D3DDevice, CResourceManager *ResourceManager );
   void LoadMap( string filename );
   void Draw();

private:
   CResourceManager *m_ResourceManager;

   CSprite Background;
};


CPP:
CMap::CMap( LPDIRECT3DDEVICE9 D3DDevice, CResourceManager *ResourceManager )
{
   m_ResourceManager = ResourceManager;

   Background.Create( D3DDevice, 0 );
}


CPP:
void CMap::LoadMap( string filename )
{
   ifstream infile;
   infile.open( filename.c_str() );

   string tmp;
   infile>>tmp;   //"bgimage.png"
   m_ResourceManager->AddTexture( tmp.c_str() );
   Background.AddTexture( m_ResourceManager->GetTexture( tmp.c_str() ) );

   infile.close();
}


CPP:
void CMap::Draw()
{
   Background.Draw();
}


In meinem Main.cpp:

CPP:
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)             

   hWnd = CreateMainWindow(hInstance);

   if(0 == hWnd)
   {
      MessageBox(0,"Fenster konnte nicht erzeugt werden","Fehler",MB_OK);
      return -1;
   }

   if(!Direct3D.Init(hWnd))
   {
      return -1;
   }
   Direct3D.SetClearColor(D3DCOLOR_XRGB(0,0,0));

   ResourceManager.Init(Direct3D.GetDevice());

   CMap Map( Direct3D.GetDevice(), &ResourceManager );
   Map.LoadMap( "Maps\\Map1.txt" );

   MSG msg = { 0 };

   while(msg.message != WM_QUIT)
   {
      if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
      {
         TranslateMessage(&msg);
         DispatchMessage(&msg);
      }
      else
      {
         Direct3D.BeginScene();

         Map.Draw();
         Direct3D.DrawText("After Map.draw()", 10, 200, D3DCOLOR_XRGB( 255, 0, 0 ));

         Direct3D.EndScene();
      }
   }
   return 0;
}


und in der Map1.txt steht einfach nur "Tiles\\Background.png" was mein Hintergrundbild ist ohne die "".

Ich Fummel an dem Problem nun schon gute 2 1/2 Wochen und finde einfach nicht das Problem. Hab das ganze Forum hier durchstöbert um nach abhilfe zu suchen. Ich habe anstatt einen Pointer auch nur "normal" den ResourceManager übergeben und alles ohne pointer probiert.

Der Code wird Fehlerfrei Compiliert und ausgeführt nur das eben das Bild nicht angezeigt wird Sad Wenn ich das Bild genau so in der Reihenfolge erstelle und anzeigenlassen, das alles nur direkt in der Main Funktion mache, funktioniert es und das Bild wird angezeigt.

Auch laut Debugger läuft alles so wie es sollte, bzw so wie ich denke das es laufen sollte.

Hoffe mir kann jemand helfen.

MFG die Plattform

Edit: Sollte vielleicht noch erwähnen das ich den ResourceManager 1:1 übernommen habe und den "loadMap" teil aus einen youtube video *duck*
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
Jonathan_Klein
Living Legend


Alter: 36
Anmeldedatum: 17.02.2003
Beiträge: 3431
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 10.03.2009, 09:26    Titel: Antworten mit Zitat

Uff, war ein bisschen verwirrend, aber der Fehler ist eigentlich recht klar:
Pfade trennt man mit \ oder mit / aber niemals mit \\. Es is verständlich, dass du in der Textdatei \\ geschrieben hast, denn in C++ ist \ ein Steuerzeichen, um ein paar andere Zeichen zu erzeugen.
In C++ erzeugt man einen Zeilnemumbruch in einem String durch ein\n, in deinem Texteditor dadurch, dass man Enter drückt.
Also wird er die Datei nicht finden können. Schreibe in der Datei nur\ oder noch besser /, denn / funktioniert unter Windows wie unter Linux und wird sowohl in einer Textdatei als auch in einem C++ String nur als "/" geschrieben.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Plattform
Mini JLI'ler


Alter: 39
Anmeldedatum: 09.03.2009
Beiträge: 5

Medaillen: Keine

BeitragVerfasst am: 10.03.2009, 10:13    Titel: Antworten mit Zitat

Hallo,

schonmal vielen Dank für deine Antwort Smile Allerdings hatte ich es vor den \\ in der Textdateischon als / stehen und dachte es liegt vielleicht daran.

Hab es jetzt nochmal in / (und in allen möglichen Konstelationen) probiert und es funktioniert trotzdem nicht Sad

Bin im Moment echt am verzweifeln und am überlegen ob ich nicht lieber wieder BlitzBasic ausgraben soll *g*
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
Jonathan_Klein
Living Legend


Alter: 36
Anmeldedatum: 17.02.2003
Beiträge: 3431
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 10.03.2009, 11:06    Titel: Antworten mit Zitat

Dann bau mal mehr Fehlerabfragen ein. Die ganzen DX Funktionen können dir ja sagen, wo es schief läuft.
Dann solltest du zumindest schonmal wissen, ob er die Texturdatei findet,ob er sie laden konnte oder ob der Fehler sonst noch wo anders liegt.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Plattform
Mini JLI'ler


Alter: 39
Anmeldedatum: 09.03.2009
Beiträge: 5

Medaillen: Keine

BeitragVerfasst am: 10.03.2009, 11:55    Titel: Antworten mit Zitat

Nochmal danke für die Antwort aber jetzt blockiert mir ein "Just-In-Time" Debugger die Fehlermeldungen. Hab den mal zu VC '05 oder so dazubekommen. VC '05 ist schon lange wieder runter nur der Debugger nicht.

Schade, aber wird sich wohl um was größeres handeln und muss erstmal meinen Rechner säubern Smile

Und mir wird immer gesagt Programmieren sei kein anstrengendes Handwerk *g*

MFG Plattform
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
The Lord of Programming
Living Legend


Alter: 36
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 10.03.2009, 14:46    Titel: Re: Sprite wird nicht angezeigt. Brauche hilfe Antworten mit Zitat

Plattform hat Folgendes geschrieben:
Wenn ich das Bild genau so in der Reihenfolge erstelle und anzeigenlassen, das alles nur direkt in der Main Funktion mache, funktioniert es und das Bild wird angezeigt.

Was heißt das? Genau in welcher Reihenfolge?
Was genau hast du geändert, dass es nicht mehr funktioniert hat?
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Plattform
Mini JLI'ler


Alter: 39
Anmeldedatum: 09.03.2009
Beiträge: 5

Medaillen: Keine

BeitragVerfasst am: 10.03.2009, 15:29    Titel: Antworten mit Zitat

Wenn ich das Bild in der Reihenfolge
Code:

(1) CSprite Background
main
{
  (2) Background.Create( Direct3D.GetDevice(), 0 );
  (3) ResourceManager.AddTexture( "Tiles\\Background.png" );
  (4) Background.AddTexture(ResourceManager.GetTexture("Tiles\\Background.png"));

  Spielschleife
  {
    (5) Background.Draw()
  }
}


erstelle und Anzeigen lasse funktioniert es. Wenn ich es aber in über Funktionen meiner Klasse laufen lasse nicht.

Code:

main
{
  // -> (1) CSprite Background;
  // -> (2) Background.Create(...)
  CMap Map( Direct3D.GetDevice(), &ResourceManager);

  // -> (3) ResourceManager.AddTexture( "Tiles/Background.png" );
  // -> (4) Background.AddTexture(ResourceManager.GetTexture("Tiles/Background.png")";
  Map.LoadMap( "Maps\\Test.txt" );   
                  
  Spielschleife
  {
    // -> (5) Background.Draw()
    Map.Draw()
  }
}


Es steht ja nichts in den CMap Funktionen drin was es verändern könnte. Es ist genau die selbe Reihenfolge nur in anderen Funktionen gepackt.

p.s. Das mit den DirectX Error (also ich denke das mit den FAILED und SUCSESS Macros) klappt bei mir auch nicht wirklich. Ich bekomme da immer einen "normalen" Fehler. Also so einer wo drin steht ob ich den Fehler an Microsoft senden möchte. Aber ich geb nicht auf! 2 1/2 Wochen ohne erfolg lass ich nicht durchgehen ^^

p.p.s Ich hab mein Projekt mal als Zip Datei bei Uploaded.to hochgeladen (http://uploaded.to/?id=o5c3iu). Wenn einer möchte kann er sich gerne anschauen was ich da verzapft habe. Aber ich hafte nicht für Augenkrebs wegen fehlender Dokumentation, schlechtem Schreibstil oder sonstigem Smile (Datei ist auf Viren geprüft und als sicher eingestuft worden)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
The Lord of Programming
Living Legend


Alter: 36
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 11.03.2009, 14:27    Titel: Antworten mit Zitat

Ich würd da echt mal mit dem Debugger drüber laufen und schauen, ob alles seine Richtigkeit hat. So bekommst dus wohl am schnellsten raus.
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Plattform
Mini JLI'ler


Alter: 39
Anmeldedatum: 09.03.2009
Beiträge: 5

Medaillen: Keine

BeitragVerfasst am: 11.03.2009, 17:16    Titel: Antworten mit Zitat

Das ist ja auch so ein Problem. Der Debugger meint es ist alles in Ordnung. Er sagt mir das er aus der Textdatei die richtige Datei lädt, das der ResourceManager sie richtig in die map einfügt und das Draw ohne Probleme den Background zeichnen kann. Mir können wohl wirklich nur noch diese DirextX Makros FAILED und SUCSESS helfen. Was anderes fällt mir sonst nichts ein.

Naja wenn alle stricke reißen mach ich es eben ohne den ResourcenManager und füg den später ein wenn ich den auch selber schreiben kann ohne copy & paste ^^.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
AFE-GmdG
JLI MVP
JLI MVP


Alter: 44
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 11.03.2009, 18:34    Titel: Antworten mit Zitat

Grundsätzlich sagt ein Debugger nicht, dass etwas in Ordnung ist, wenn das nicht stimmt.
Allerdings musst du verstehen, wie der Debugger dir überhaupt etwas sagen kann.
Es nützt nämlich nichts, wenn du nur den Code einfach im Debugger laufen lässt. Du musst den Code an verschiedenen Stellen anhalten, dort diverse Variablen überprüfen und die passenden Schlüsse daraus ziehen.

MFG, AFE-GmdG
_________________
CPP:
float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;}
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
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
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