Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

11

07.12.2007, 16:55

Zitat von »"$nooc"«

nein ich rufe das in einer while schleife in der WinMain() auf..
also pro durchlauf nur 1mal


Achso, dein letzter post hatte mich da bisschen irritiert. :oops:
Aber der Code, denke ich mal, wird hier niemanden was nützen, da wir nich wissen, was innerhalb der Klasse steht ;)

$nooc

Alter Hase

  • »$nooc« ist der Autor dieses Themas

Beiträge: 873

Wohnort: Österreich / Kärnten

Beruf: Schüler

  • Private Nachricht senden

12

07.12.2007, 17:02

welchen code würdest du benötigen?

directdraw initialisierung?
erstellung der primarysurface bzw. des backbuffers?

einfach sagen und ich poste die benötigten zeilen..
ich kann den fehler nichtmal eingrenzen, das ist das problem..

ich mein ich kann auch das ganze projekt zum runterladen zur verfügung stellen wenn das hilfreich ist..

ansonst kann ich noch das anbieten..
das gesamte projekt:

Main.cpp

CSurface.cpp

CBitmap.cpp

CDisplay.cpp

ddutil.hpp

dxutil.hpp
Am Anfang der Weisheit steht die eigene Erkenntnis, dass man selbst nichts weiß! - Sokrates

13

07.12.2007, 17:42

Zitat von »"$nooc"«

welchen code würdest du benötigen?

directdraw initialisierung?
erstellung der primarysurface bzw. des backbuffers?

einfach sagen und ich poste die benötigten zeilen..
ich kann den fehler nichtmal eingrenzen, das ist das problem..

ich mein ich kann auch das ganze projekt zum runterladen zur verfügung stellen wenn das hilfreich ist..

ansonst kann ich noch das anbieten..
das gesamte projekt:

Main.cpp

CSurface.cpp

CBitmap.cpp

CDisplay.cpp

ddutil.hpp

dxutil.hpp


Hab mal alles überflogen, aber mir ist nichts aufgefallen...
Ich würde mal ne sicherung von dem Projekt machen und dann alles unnötig überbord werfen, evtl. auf klassen verzichten und dann probieren, ob es funktioniert und dann stück für stück wieder alles zusammen setzten, bis du auf den Fehler stößt.

ja ich weiß, die antwort würde mir auch nicht gefallen :(

$nooc

Alter Hase

  • »$nooc« ist der Autor dieses Themas

Beiträge: 873

Wohnort: Österreich / Kärnten

Beruf: Schüler

  • Private Nachricht senden

14

07.12.2007, 17:53

hmm.. da bleibt mir wohl nichts anderes übrig ^^


aber auf jeden fall ein fettes dankeschön für deine bemühung! ;)
Am Anfang der Weisheit steht die eigene Erkenntnis, dass man selbst nichts weiß! - Sokrates

$nooc

Alter Hase

  • »$nooc« ist der Autor dieses Themas

Beiträge: 873

Wohnort: Österreich / Kärnten

Beruf: Schüler

  • Private Nachricht senden

15

07.12.2007, 17:58

falls es noch jemand versuchen will:

hier kann man sich das compilierbare projekt runterladen (ca. 1,2MB):
Projekt Download
Am Anfang der Weisheit steht die eigene Erkenntnis, dass man selbst nichts weiß! - Sokrates

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

16

07.12.2007, 18:08

So als zusätzliche Anmerkung. Mir hat der Code in dxutil.hpp besonders gut gefallen! :lol:

Zur Erläuterung:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
template <class T>
void ptrDelete (T *ptr)
{
    if(ptr)
    {
        delete ptr;
        ptr = NULL;
    }
}


Diese Funktion ist total sinnlos! Sie macht nämlich garnichts anderes als ein "delete ptr". Den Zeiger "Nullen" ist zwar ein guter Vorsatz, nur leider in diesem Code ziemlich uneffektiv.

Also fassen wir zusammen:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
template< typename T >
void ptrDelete( T*& ptr )
{
    if(ptr)
    {
        delete ptr;
        ptr = 0;
    }
}


Die Referenz auf den Zeiger hilft dabei den Zeiger auch wirklich als Null-Zeiger zu definieren. Im ursprünglichen Code wurde nur die Kopie des Zeigers "genullt", nicht aber der Zeiger selbst!

Die If-Anweisung ist übrigens total unnötig, wir kommen also zu:

C-/C++-Quelltext

1
2
3
4
5
6
template< typename T >
void ptrDelete( T*& ptr )
{
    delete ptr;
    ptr = 0;
}


Weiter gehts mit:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
template <class T>
void relObject (T object)
{
    if(object)
    {
        object->Release();
        object = NULL;
    }
}


Hier macht die If-Abfrage zwar Sinn, der Zeiger wird aber dennoch nicht auf 0 gesetzt. Hier bitte auch eine Referenz verwenden, also:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
template< typename T >
void relObject( T& object )
{
    if(object)
    {
        object->Release();
        object = NULL;
    }
}


Und da war dann noch...

C-/C++-Quelltext

1
2
3
4
5
6
7
8
template <class T>
inline bool failed (T retVal)
{
    if(retVal == DD_OK || retVal == static_cast<HRESULT>(true))
        return false;
 
    return true;
}


Es wirkt irgendwie etwas unprofessionell wenn man Konstrukte á la:

C-/C++-Quelltext

1
if ( x ) return true; else return false;


verwendet. Gib lieber den Wert der Auswertung zurück:

C-/C++-Quelltext

1
2
3
4
5
template <class T>
inline bool failed (T retVal)
{
    return retVal != DD_OK || retVal != static_cast< HRESULT >( true ));
}



Und zuletzt die Funktion succeeded... Diese ist ja genau das Gegenteil von "failed" also könnte man ja "failed" ja auch einsetzen. Sollte sich die Funktionalität einmal ändern muss sie nur noch an einer Stelle im Code angepasst werden. Ein super Vorteil:

C-/C++-Quelltext

1
2
3
4
5
template <class T>
inline bool succeeded (T retVal)
{
    return !failed(retVal);
}
@D13_Dreinig

$nooc

Alter Hase

  • »$nooc« ist der Autor dieses Themas

Beiträge: 873

Wohnort: Österreich / Kärnten

Beruf: Schüler

  • Private Nachricht senden

17

07.12.2007, 18:28

ok, da sind vllt. noch einige erbärmliche anfängerfehler drinnen ^^
hab sie ausgebessert, und glaub ich auch verstanden.. thx

du hast auch nicht den grund entdeckt warum mein programm flimmert?

hier kann man sich das compilierbare projekt runterladen (ca. 1,2MB):
Projekt Download
Am Anfang der Weisheit steht die eigene Erkenntnis, dass man selbst nichts weiß! - Sokrates

18

07.12.2007, 18:30

hui...hab mir den fehler ganz anders vorgestellt ^_^'
Wie soll es den eigentlich richtig aussehen?
Wenn es im Fenster laufen soll, musst du noch nen Clipper setzen, was eigentlich auch im Vollbild Modus gemacht werden sollte.

Ob dies den Fehler behebt, kann ich aber nicht zu 100% sagen.

$nooc

Alter Hase

  • »$nooc« ist der Autor dieses Themas

Beiträge: 873

Wohnort: Österreich / Kärnten

Beruf: Schüler

  • Private Nachricht senden

19

07.12.2007, 18:39

die darstellung in einem fenster wird noch nicht behandelt..
nur jene im fullscreen-modus..

und eigtl. sollte das programm ausschließlich im fullscreen modus ausführbar sein.. also glaub ich nicht dass es daran liegt..

das flackern ist heftig, nicht? :D

edit:
wäre es richtig dargestellt sollte der gesamte bildschirm schwarz sein, und in der linken oberen ecke sollte die datei Bitmap1.bmp dargestellt werden..

führe das nochmal auf, und dann klick oben auf den blauen balken des fensters, der immer kurz zu sehen ist..
-> taste gedrückt halten...

mach das ein paarmal, und dann siehst du die zwei varianten die das programm darstellt..

mal richtig, mal falsch.. und das immer abwechselnd.

keine ahnung wie ich das hinbekommen habe..


edit2:
es kommt mir so vor als ob das programm immer zwischen gdi und directdraw wechselt.. ich kann sogar das fenster verschieben wenn ich es anklicke und wegziehe..

und darunter wird ganz normal windows angezeigt.. animierte dinge bewegen sich auch..


@ Kalero:

du scheinst dich mit directdraw ein bischen auszukennen, hast du evtl. ein paar gute tutorials für mich parat?

da ddraw veraltet ist findet man nicht allzuleicht was nützliches.. ^^
Am Anfang der Weisheit steht die eigene Erkenntnis, dass man selbst nichts weiß! - Sokrates

20

07.12.2007, 20:35

Zitat von »"$nooc"«

@ Kalero:

du scheinst dich mit directdraw ein bischen auszukennen, hast du evtl. ein paar gute tutorials für mich parat?

da ddraw veraltet ist findet man nicht allzuleicht was nützliches.. ^^


naja, geht so ^_^'
Ich habs mit dem Buch Game Programming für Dummies gelernt, ist aber nicht wirklich weiter zu empfehlen.
dieses Tut sieht aber ganz ordentlich aus: http://www.codeworx.org/directx_tuts.php

Ich würde dir aber eher raten, dich z.B. mit SDL zu beschäftigen. Das ist leichter zu bedienen und hat mehr zu bieten ^_^
Aber ich will dir da nicht reinreden.

Ich würde dir aber empfehlen, den Clipper auch im Vollbild modus zu setzen. Ansonsten kann es passieren, das bilder, die über den bildschirm rand hinaus gehen einfach verschwinden, auch wenn noch die hälfte zusehen sein sollte.

Zitat von »"$nooc"«

das flackern ist heftig, nicht?


Ich bin fast Blind XD

Werbeanzeige