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

Anonymous

unregistriert

1

24.07.2006, 13:18

SDK mit DDraw Tutorials?

Hi,

Ich würde mir gern die Samples, die das Plattform SDK eigentlich mitliefern
sollte angucken:

Klick!

Leider kann ich die nicht in dem entsprechendem Verzeichnis finden. Hat
jemand vielleicht irgendeine Ahnung, wo man die runterladen könnte? Danke!

Anonymous

unregistriert

2

25.07.2006, 11:49

Okay... Dann frag ich halt anders: Wie schaffe ich den Abstand zwischen
dem blitten der Bildern bei einer Animation? Bei mir geht das immer so
schnell, dass man gar nichts sieht :p ich blitte immer einzelne Ausschnitte
der Bitmap nacheinander. Oder gibt es vielleicht eine bessere Möglichkeit?
Habe ja gehört, dasss man mit DDraw butterweiche Animationen hinbekommen
soll, hört sich so an, als wenn es da einen Trick/einige Funktionen gibt.
Oder gibt es vielleicht sogar ein gutes Tutorial mit sauberem Code zum
Thema Animationen mit DDraw? Oder könnt ihr mir vielleicht doch sagen,
wo ich die Beispiele vom Plattform SDK herbekommen könnte? ;)
Danke!

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

3

25.07.2006, 11:55

hab jetzt leider nicht viel Zeit, kann dir später aber noch was posten:

llFrequency und alle anderen vom Typ __int64

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
QueryPerformanceFrequency((LARGE_INTEGER*) &llFrequency);

// Startzeitpunkt messen

QueryPerformanceCounter((LARGE_INTEGER*)(&llStartTime));

// etwas tun


// Endzeitpunkt messen

QueryPerformanceCounter((LARGE_INTEGER*)(&llEndTime));

if(llEndTime == llStartTime)    return (float)0.00000001f;
else                            return (((float)(llEndTime - llStartTime)) / ((float)llFrequency));


ist n icht syntaktisch korrekt, sollte aber folgerbar sein.

Anonymous

unregistriert

4

25.07.2006, 12:07

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
QueryPerformanceFrequency((LARGE_INTEGER*) &llFrequency);

if(Key_Right == isPressed)
{
   // Startzeitpunkt messen

   QueryPerformanceCounter((LARGE_INTEGER*)(&llStartTime));

   mario.blit(10, 10, 18, 70, 18, 35);

   // Endzeitpunkt messen

   QueryPerformanceCounter((LARGE_INTEGER*)(&llEndTime));
}

if(llEndTime == llStartTime)    return (float)0.00000001f;
else                            return (((float)(llEndTime - llStartTime)) / ((float)llFrequency));


Hab ich das so ungefähr richtig eingesetzt? Oo Ein kleines Beispiel wäre
nicht schlecht ;) Und müssten wie müssen die 'll' Variablen initialisiert
werden? Ich schau jetzt noch mal in der MSDN nach und wäre schön,
wenn du es nacher besser beschreiben könntest =) Dankeschön!

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

5

25.07.2006, 14:47

So in etwa... bei etwas tun muss natürlich die Scene rein die du malen willst. eigentlich brauchst du immer nur eine Zeit messen. die neue Zeit die vergangen ist ergibt sich logscherweise aus der alten minus dem letzten Messzeitpunkt.

t(frame) = t[i-1] - t
wobei i € N und die Indexe Messungen angibt.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
__int64 llStartTime, llFrequency, llEndTime;
float fFinalTime;

QueryPerformanceFrequency((LARGE_INTEGER*) &llFrequency);

// Startzeitpunkt messen

QueryPerformanceCounter((LARGE_INTEGER*)(&llStartTime));

// etwas tun


// Endzeitpunkt messen

QueryPerformanceCounter((LARGE_INTEGER*)(&llEndTime));

// (*)

if(llEndTime == llStartTime)    fFinalTime = (float)0.00000001f;
else                            fFinalTime =  (((float)(llEndTime - llStartTime)) / ((float)llFrequency));


das (*) muss sein, damit du nie 0 rausbekommst, wegen einer zu kleinen Zeit. Wenn du etwas mit dieser Zeit multiplizierst, wird sonst die Var. immer 0.
also in etwa so:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
....
(static) __int64 llStartTime = 0, llFrequency, llEndTime =0;
float fFinalTime;
....
//Frequenz nur einmal bestimmen

QueryPerformanceFrequency((LARGE_INTEGER*) &llFrequency);
...
...
...
while (1) {
// Endzeitpunkt messen

QueryPerformanceCounter((LARGE_INTEGER*)(&llEndTime));

if(llEndTime == llStartTime)    fFinalTime = (float)0.00000001f;
else                            fFinalTime =  (((float)(llEndTime - llStartTime)) / ((float)llFrequency)); 

// Die letzte Messzeit

llStartTime = llEndTime

// Zeit pro Frame mit der Render funktion und Move auf dem Weg geben

// diese können dann Animationen u.s.w. machen

RenderEverything(fTimePassed);
MoveEverything(fTimePassed);

// Anzeigen, Flippen etc.

Device->Flip(..);
}


@ThreadThema:
Ich glaub im SDK gibts keine Tuts mehr, da DDraw nicht explizit mehr vorhanden ist, sondern nur noch in der "veralteten" DX7 er Version. Für "neuere" 2D Spiele sollte man eigentlich RHW Vertices benutzen.

Aber DDraw ist sehr viel schöner, auch weil man extrem viel mit WinAPI machen kann ^^

Anonymous

unregistriert

6

25.07.2006, 18:39

Guuuuut und wie genau sieht das in der Render Funktion bei den
Animationen aus und wie wird fTimePassed initialisiert? ;) Ich habe
es jetzt so (Funktioniert natürlich nicht):

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
        if (Key_Right == isPressed)
        {
            if(x < 54.0)
            {
                x += 18.0;
                x *= fFinalTime;
                background.blit(0, 0);
                mario.blit (10, 10, (unsigned long)x, 70, 18, 35);
            }
            else
            {
                x = -18.0;
            }
        }


Und fFinalTime sollte ich ja sowieso nicht dafür verwenden *eyeroll*

EDIT: Ich weiß ich bin blöd ;)

Anonymous

unregistriert

7

25.07.2006, 18:58

koschka
Um mal schnell was in 2D an zu zeigen, reichen RHW. Für ein richtiges Spiel sind die mehr als nur eine Bremse.

Anonymous

unregistriert

8

25.07.2006, 18:59

Oo Oh man ^^ hast du denn einen besseren Vorschlag nix da? :)

Anonymous

unregistriert

9

25.07.2006, 19:20

Orthogonale Projektionsmatrix, untransformierte Vertices, VertexBuffer und Verschiebungsmatrizen.

Anonymous

unregistriert

10

25.07.2006, 19:29

Ähm Vertexbuffer, usw kann man auch in DDraw verwenden? Habe auch
mal gesucht und nur Beispiele zu D3D gefunden...

Werbeanzeige