|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Plattform Mini JLI'ler
Alter: 40 Anmeldedatum: 09.03.2009 Beiträge: 5
Medaillen: Keine
|
Verfasst am: 10.03.2009, 00:59 Titel: Sprite wird nicht angezeigt. Brauche hilfe |
|
|
Hallo an alle
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 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 |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 10.03.2009, 09:26 Titel: |
|
|
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 |
|
|
Plattform Mini JLI'ler
Alter: 40 Anmeldedatum: 09.03.2009 Beiträge: 5
Medaillen: Keine
|
Verfasst am: 10.03.2009, 10:13 Titel: |
|
|
Hallo,
schonmal vielen Dank für deine Antwort 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
Bin im Moment echt am verzweifeln und am überlegen ob ich nicht lieber wieder BlitzBasic ausgraben soll *g* |
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 10.03.2009, 11:06 Titel: |
|
|
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 |
|
|
Plattform Mini JLI'ler
Alter: 40 Anmeldedatum: 09.03.2009 Beiträge: 5
Medaillen: Keine
|
Verfasst am: 10.03.2009, 11:55 Titel: |
|
|
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
Und mir wird immer gesagt Programmieren sei kein anstrengendes Handwerk *g*
MFG Plattform |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 10.03.2009, 14:46 Titel: Re: Sprite wird nicht angezeigt. Brauche hilfe |
|
|
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 |
|
|
Plattform Mini JLI'ler
Alter: 40 Anmeldedatum: 09.03.2009 Beiträge: 5
Medaillen: Keine
|
Verfasst am: 10.03.2009, 15:29 Titel: |
|
|
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 (Datei ist auf Viren geprüft und als sicher eingestuft worden) |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 11.03.2009, 14:27 Titel: |
|
|
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 |
|
|
Plattform Mini JLI'ler
Alter: 40 Anmeldedatum: 09.03.2009 Beiträge: 5
Medaillen: Keine
|
Verfasst am: 11.03.2009, 17:16 Titel: |
|
|
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 |
|
|
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 11.03.2009, 18:34 Titel: |
|
|
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 |
|
|
|
|
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
|