Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
Erlin
Založen: 06. 08. 2008 Příspěvky: 9
|
Zaslal: 15. září 2008, 19:06:39 Předmět: DirectX - Aplikace neodpovídá |
|
|
Ahoj, mám takový drobný problém. Dělám hru běžící na managed DirectX (můj první větší počin s grafikou) a .NET. Stává se mi, že mi najednou zčerná obrazovka/okno a systém označí aplikaci jako "Neodpovídá". Přesto kód na pozadí běží nerušeně dál, nebyla vyvolána žádná výjimka ani DirectX nevratil žádnou chybu.
Nejhorší je, že se to stává v náhodné okamžiky. Někdy po pár vteřinách v úvodním menu, někdy po dlouhých minutách ve hře. Občas se i stává, že se hra "vzpamatuje" a zase funguje normálně. Testoval jsem to na dvou odlišných PC, které jinak fungují dobře, takže chybu hardwaru apod. vylučuji.
Nevíte prosím někdo čím by to mohlo být? Předem díky za odpověď. |
|
Návrat nahoru |
|
 |
Augi

Založen: 28. 07. 2007 Příspěvky: 782 Bydliště: Čerčany
|
Zaslal: 15. září 2008, 19:21:22 Předmět: |
|
|
Jediné, co mě napadá, je zeptat se, jestli máš ošetřenou ztrátu zařízení (lost device). Jinak bych to spíše viděl na chybu v Tvém kódu...s takovýmhle chováním jsem se nikdy nesetkal... |
|
Návrat nahoru |
|
 |
Erlin
Založen: 06. 08. 2008 Příspěvky: 9
|
Zaslal: 15. září 2008, 19:27:59 Předmět: |
|
|
Ano, mám ošetřeno DeviceReset, DeviceLost i DeviceResizing. Začínám být z toho už zoufalý. |
|
Návrat nahoru |
|
 |
Augi

Založen: 28. 07. 2007 Příspěvky: 782 Bydliště: Čerčany
|
Zaslal: 15. září 2008, 19:34:29 Předmět: |
|
|
Tak pak nezbývá než začít řešit klasickým způsobem...zakomentovat co nejvíce kódu až zbude jen základní smyčka, přidat logování a zkusit přesně zjistit, kde se to kousne (v jakém místě kódu)... |
|
Návrat nahoru |
|
 |
Erlin
Založen: 06. 08. 2008 Příspěvky: 9
|
Zaslal: 15. září 2008, 19:43:16 Předmět: |
|
|
No to je právě ten problém, protože aplikace se nekousne, ona běží dál. Ale obrazovka je černá a Win mi po chvíli nabídne, abych ukončil program.
Komentoval jsem a ořezal co se dalo - vykresloval jsem pouze kurzor, nic víc to nedělalo a stejně se to stalo. Naopak, jsem zkusil kurzor nevykreslovat a taky nic... |
|
Návrat nahoru |
|
 |
Deluxe

Založen: 31. 07. 2007 Příspěvky: 235 Bydliště: Oslavany
|
Zaslal: 15. září 2008, 19:46:48 Předmět: |
|
|
To prece neni mozny, aby to bezelo dal, kdyz ti win nabidne to ukonceni, tak to znamena, ze neodpovidas na winapi spravy okna ne?
jinak mozna bych na tohle zkusil pouzit profiler, abys videl, ktera funkce trva jak dlouho, pokud se nejakaj "kousne". |
|
Návrat nahoru |
|
 |
Augi

Založen: 28. 07. 2007 Příspěvky: 782 Bydliště: Čerčany
|
Zaslal: 15. září 2008, 19:48:38 Předmět: |
|
|
Tak to bych zkusil dvě věci:
1) Pustit to na jiném počítači (jestli to není třeba problém driveru).
2) Zkusit založit nový projekt, překopírovat tam tu základní smyčku a zkusit pustit (pak nám tu klidně můžeš ten EXE vystavit a my to zkusíme pustit). |
|
Návrat nahoru |
|
 |
Tringi

Založen: 28. 07. 2007 Příspěvky: 290
|
Zaslal: 15. září 2008, 22:07:13 Předmět: |
|
|
Nevím jak v .NETu ale při práci přímo s API tohle přesně nastává, když nezpracováváš zprávy včas. Když píšeš že ti hra "pokračuje", tak máš hlavní smyčku špatně. Nejspíš upřednostňuješ kód hry před zprávami Windows, přičemž bys měl dělat přesný opak. Postni kód té hlavní smyčky na nopaste a mrknem na to. _________________ WWW | GitHub | TW |
|
Návrat nahoru |
|
 |
Matasx
Založen: 17. 08. 2008 Příspěvky: 258
|
Zaslal: 16. září 2008, 08:55:50 Předmět: |
|
|
Já řeším smyčku běhu programu takto:
kód: |
...
GameField.Tick((float)timebase);
Render();
Application.DoEvents();
Thread.Sleep(1); |
|
|
Návrat nahoru |
|
 |
Erlin
Založen: 06. 08. 2008 Příspěvky: 9
|
Zaslal: 16. září 2008, 12:40:36 Předmět: |
|
|
Ok. Díky zatím za rady. Zkusím na jejich základě provést další serii testů atd. a když tak se zase ozvu případně sem pisnu, čím to bylo. |
|
Návrat nahoru |
|
 |
Erlin
Založen: 06. 08. 2008 Příspěvky: 9
|
Zaslal: 23. září 2008, 15:35:59 Předmět: |
|
|
Za poslední 2 dny pilného testování se to už nestalo ani jednou, takže to považuju za uzavřené.
Problém skutečně byl v nedostatečném zpracovávání zpráv Windows.
Díky všem za rady a pomoc. |
|
Návrat nahoru |
|
 |
|