|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
cschmidt Mini JLI'ler
Anmeldedatum: 25.05.2003 Beiträge: 2
Medaillen: Keine
|
Verfasst am: 15.06.2003, 09:34 Titel: JLI-Fighter |
|
|
Hallo,
ich habe das Beispielpogramm JLI-Fighter komplimiert, aber wenn ich es starte, wird das Fenster geladen, aber dann hängt mein PC! Woran könnte das liegen? |
|
Nach oben |
|
|
nEp Junior JLI'ler
Anmeldedatum: 03.06.2003 Beiträge: 75
Medaillen: Keine
|
Verfasst am: 15.06.2003, 13:38 Titel: |
|
|
Wahrscheinlich daran, dass er die Bilder nicht findet. Schau mal ob die Verzeichnisangaben stimmen. |
|
Nach oben |
|
|
KI JLI Master
Alter: 39 Anmeldedatum: 04.07.2003 Beiträge: 965 Wohnort: Aachen Medaillen: Keine
|
Verfasst am: 04.07.2003, 21:08 Titel: Bei mir kommt ein Ausnahmefehler! |
|
|
Ich hab' mir eben das Buch gekauft und wollte das Beat 'em up Spiel testen.
Doch dieser Ausnahmefehler machte mir einen Strich durch die Rechnung!
JLI_FIGHTER.exe hat ein Problem festgestellt und muss beendet werden.
Was soll ich jetzt tun?
Systeminfo:
Windows XP
DirectX 9.0 (andere Beispielprojekte wie z.B. SkyBox funktionieren.)
RIVA TNT 2 (neue NVidia Treiber) |
|
Nach oben |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 04.07.2003, 21:37 Titel: |
|
|
Bei dem Beispiel sind die Pfade nicht okay. GUck mal in die global.h und prüfe, ob LAUF,SCHLAG,STEHEN,TRITT richtig definiert sind. Benenne die Pfade folgendermaßen um:
#define LAUF "../../Media/JLIFighter/korisso_lauf_%s%04d.png"
#define SCHLAG "../../Media/JLIFighter/korisso_schlag_%s%04d.png"
#define STEHEN "../../Media/JLIFighter/korisso_stand_%s%04d.png"
#define TRITT "../../Media/JLIFighter/korisso_tritt_%s%04d.png"
Christian |
|
Nach oben |
|
|
KI JLI Master
Alter: 39 Anmeldedatum: 04.07.2003 Beiträge: 965 Wohnort: Aachen Medaillen: Keine
|
Verfasst am: 04.07.2003, 21:52 Titel: Danke |
|
|
Danke Christian,
für deine schnelle Hilfe!
Jetzt funktioniert das Spiel!
Am besten wäre es, wenn man vorher überprüft ob die Bilder verfügbar sind.
Mit einer Fehlerroutine könnten solche Ausnahmefehler verhindert werden.
Naja, das kann ich ja dann noch einbauen
Dummerweise läuft das Spiel mit einer Bildwiederhohlungsfrequenz von 2 bps.
Wird es im Softwarerender Modus ausgeführt
<edit>
wird es nicht!
HAL
Aber warum diese geringe Framerate ??? |
|
Nach oben |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 04.07.2003, 22:53 Titel: |
|
|
Hat die Karte 32 MB? |
|
Nach oben |
|
|
KI JLI Master
Alter: 39 Anmeldedatum: 04.07.2003 Beiträge: 965 Wohnort: Aachen Medaillen: Keine
|
Verfasst am: 04.07.2003, 23:07 Titel: |
|
|
Christian Rousselle hat Folgendes geschrieben: | Hat die Karte 32 MB? |
Nein, die Karte ist nicht mehr die neueste.
Sie hat 16 MB. |
|
Nach oben |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 05.07.2003, 08:17 Titel: |
|
|
Hallo,
das Hintergrundbild + die Animationen passen bei 16 MB nicht komplett in den Grafikkartenspeicher. Es sind mehr als 20 MB.
Sollte aber trotzdem möglich sein, das ganze halbwegs flüssig laufen zu lassen. Kannst du mal probieren, wie viele FPS du hast, wenn du nur den Hintergrund erzeugst und anzeigen läßt.
Dazu muss du das Laden der Texturen für die Player-Sprites:
Code: |
....
Player2.SetPlayer(2);
Player2.Create(Direct3D.GetDevice(),&ResourceManager,8);
Player2.SetPosition(SCR_WIDTH - 300, SCR_HEIGHT - 256);
/*
int i;
char Filename[256];
// Grafiken für die Spieler laden
for(i=0;i<16;i++)
{
sprintf(Filename,LAUF,"rot",i);
ResourceManager.AddTexture(Filename);
Player1.AddTexture(WALK_LEFT,ResourceManager.GetTexture(Filename));
Player1.AddTexture(WALK_RIGHT,ResourceManager.GetTexture(Filename));
sprintf(Filename,LAUF,"blau",i);
ResourceManager.AddTexture(Filename);
Player2.AddTexture(WALK_LEFT,ResourceManager.GetTexture(Filename));
Player2.AddTexture(WALK_RIGHT,ResourceManager.GetTexture(Filename));
}
for(i=0;i<6;i++)
{
sprintf(Filename,SCHLAG,"rot",i);
ResourceManager.AddTexture(Filename);
Player1.AddTexture(PUNCH,ResourceManager.GetTexture(Filename));
sprintf(Filename,SCHLAG,"blau",i);
ResourceManager.AddTexture(Filename);
Player2.AddTexture(PUNCH,ResourceManager.GetTexture(Filename));
}
for(i=0;i<6;i++)
{
sprintf(Filename,STEHEN,"rot",i);
ResourceManager.AddTexture(Filename);
Player1.AddTexture(STAND,ResourceManager.GetTexture(Filename));
sprintf(Filename,STEHEN,"blau",i);
ResourceManager.AddTexture(Filename);
Player2.AddTexture(STAND,ResourceManager.GetTexture(Filename));
}
for(i=0;i<12;i++)
{
sprintf(Filename,TRITT,"rot",i);
ResourceManager.AddTexture(Filename);
Player1.AddTexture(KICK,ResourceManager.GetTexture(Filename));
sprintf(Filename,TRITT,"blau",i);
ResourceManager.AddTexture(Filename);
Player2.AddTexture(KICK,ResourceManager.GetTexture(Filename));
}
// die Felder mit den Umrissen der Sprites für die Kollisionserkennung berechnen
Player1.BuildOutlineArrays();
Player2.BuildOutlineArrays();
*/
return TRUE;
}
|
und das Anzeigen der Player Sprites auskommentieren.
Code: |
if(!GamePaused && !NewGame)
{
// Eingabe holen
int Key = InputManager.GetInput();
/*
// auf Tasten reagieren
Player1.Move(Key);
Player2.Move(Key);
// auf Kollision testen
if(Player1.TestCollision(&Player2))
{
if(Player1.GetCurrentAnimation() == KICK || Player1.GetCurrentAnimation() == PUNCH)
{
nHitsPlayer2++;
}
if(Player2.GetCurrentAnimation() == KICK || Player2.GetCurrentAnimation() == PUNCH)
{
nHitsPlayer1++;
}
Direct3D.DrawText("Kollision aufgetreten",10,35,0xFFFFFFFF);
}
// Spieler zeichnen
Player1.Draw();
Player2.Draw();
// und animieren
Player1.Animate();
Player2.Animate();
*/
}
|
Wenn das schnell genug ist, dann sollten wir versuchen, die Sprites nur im AGP-Speicher anzulegen. Momentan wird D3DPOOL_MANADED bei der Erzeugung verwendet. D3DPOOL_DEFAULT ist ev. besser.
Christian |
|
Nach oben |
|
|
Cyianor Super JLI'ler
Anmeldedatum: 23.12.2002 Beiträge: 452
Medaillen: Keine
|
Verfasst am: 06.07.2003, 10:46 Titel: |
|
|
Ich hab da ein ganz anderes Problem bei JLI Fighter. Zwar startet er das Spiel, ganz ohne Probleme und zeigt auch das Hintergrund-bild an. Die Schrift und die Sprites bleiben aber leider im Hintergrund. Woran könnte das liegen???
My System:
2,53 Ghz
512 MB DDR RAM
Radeon 9700 Pro
Felix |
|
Nach oben |
|
|
KI JLI Master
Alter: 39 Anmeldedatum: 04.07.2003 Beiträge: 965 Wohnort: Aachen Medaillen: Keine
|
Verfasst am: 06.07.2003, 11:54 Titel: |
|
|
@Christian
Danke für die Hilfestellung! Ich werd es sofort ausprobieren.
Eventuell könnte man DXT Texturen benutzen. Damit mehr Texturen in den Grafikspeicher passen.
Aber das ist nur eine Theorie, welche sich erst anhand der Praxis bewahrheiten wird.
Also heißt es jetzt: testen, testen, testen |
|
Nach oben |
|
|
KI JLI Master
Alter: 39 Anmeldedatum: 04.07.2003 Beiträge: 965 Wohnort: Aachen Medaillen: Keine
|
Verfasst am: 06.07.2003, 13:53 Titel: |
|
|
Ich habe es immer och nicht über die 2 bps gekriegt.
Obwohl ich die entsprechenden stellen auskommentiert habe und alle D3DPOOL Parameter mit D3DPOOL_DEFAULT ersetzt habe.
Es muss doch eine Lösung geben, oder!?
Ich werde jetzt noch etwas rumprobieren, hoffe aber trotzdem auf weitere Hilfe, falls jemand noch eine Idee hat wie ich das Spiel zum Laufen bringe.
Bin für jeden Tip dankar.
<edit>
Als ich alles auf D3DPOOL_MANAGED gestzt hatte hatte ich zwar ca. 85 bps, aber einen Haufen Grafikfehler.
sieh hier -> KLICK_MICH
Ich hätte da übrigens noch eine Frage:
Ich benutze VC++ 6.0 und möchte wissen wie ich den den Buchprojekten die Autohilfe für DirectX 9.0 aktivieren kann.
|
|
Nach oben |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 06.07.2003, 15:46 Titel: |
|
|
@Monkey: Hast du auch den Code? Oder nur die ausführbare Datei? Kannst du einen Screenshot machen?
@KI: Das mit den DXT Texturen wird dir nichts helfen, weil die TNT2 soweit ich weiss keine Texturkompression kann. Kannst du mal in der global.h versuchen die Größe auf 800 x 600 oder 640 x 480 zu ändern? Wird es jetzt besser?
Christan |
|
Nach oben |
|
|
KI JLI Master
Alter: 39 Anmeldedatum: 04.07.2003 Beiträge: 965 Wohnort: Aachen Medaillen: Keine
|
Verfasst am: 06.07.2003, 18:18 Titel: |
|
|
Wenn ich die Auflösung auf 640*480 verringere, habe ich eine Bildwiederhohlungsfrequenz von ca 5 bps.
Übrigens:
Programme, welche ich mit dem DX9 AppWizard für VC++ erstellt habe, laufen alle flüssig und mit hoher Bildwiederhohlungsfrequenz (ca. 80 bis 85 bps).
Meine D3DX9 AppWizard Settings-> Code: |
Render Device = D3DDEVTYPE_HAL
Display Mode = Fullscreen
Resolution = 1024*768
Refresh Rate = 85 hz
|
Device Settings->
Code: |
BackBufferFormat = D3DFMT_X8R8G8B8
StencilBufferFormat = D3DFMT_D16
Multisample Type = D3DMULTISAMPLE_NONE
MultiSample Quality = 0
Vertex Processing = SOFTWARE_VP
Present Interval = D3DPRESENT_INTERVAL_DEFAULT
|
Der S3TC-Algorithmus zur Texturkompression wurde 1998 mit DirectX 6 eingeführt.
Ich wusste garnicht, dass der TNT2 Chip dieses Feature nicht unterstützt.
Hat die Texturkompressionsunterstützung nichts mit den Treibern zu tun?
Denn von denen habe ich die neuesten.
<edit>Im Klartext:
Das Beat 'em Up Spiel funktioniert immer noch nicht richtig bei mir!
Ich werde es jetzt mal auf einem anderen, schnelleren, besseren Computer testen. |
|
Nach oben |
|
|
KI JLI Master
Alter: 39 Anmeldedatum: 04.07.2003 Beiträge: 965 Wohnort: Aachen Medaillen: Keine
|
Verfasst am: 09.07.2003, 11:47 Titel: |
|
|
NEWS
Bei meinem Freund läuft das Spiel einwandfrei flüssig bei 85 fps!
Es scheint wirklich ein Problem bei der Speicherverwaltung zu geben.
@Christian
Könntest du mir vielleicht einen Tip geben, wie ich das Spiel auch bei "schlechteren" Computern zum laufen bringe?
Denn ein Spiel dieser Art dürfte ja eigentlich keine großen Anforderungen haben.
Nachtrag:
Ich weiß es ist kein "richtiges" Spiel, sondern nur ein Beispiel für Kollision!
Aber ein ausbaufähiges Beispiel. |
|
Nach oben |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 09.07.2003, 13:55 Titel: |
|
|
Hallo,
probiere doch mal das Erzeugen/Rendern des Hintergrundes auszukommentieren. Irgendwo ist eine Grafik, die vom Hauptspeicher auf die Grafikkarte kopiert werden soll. Dadurch denke ich, dass es so lange dauert. Was hast du denn für einen Prozessor?
Christian |
|
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
|