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

  • »Johannes Schneider« ist der Autor dieses Themas

Beiträge: 103

Beruf: Chemiestudent

  • Private Nachricht senden

1

22.02.2010, 18:22

Sprites verzerren sich. Wo kann ich das einstellen?

Hallo zusammen.
Ich bastle gerade an einem kleinen, simplen junp-spiel (Bumper genannt).
Ich habe mich zu allererst mit der Verwendung von Sprites auseinandergesetzt.
Da ist mir aufgefallen, dass sich ein in mein Fenster geblittetes Bild bei der Veränderung der Fenstergröße mitverzerrt, ohne, dass ich irgendeinen Einfluss habe.
Ich habe das Gefühl, dass ich einen der Parameter der folgenden Zeilen ändern muss. Bin mir aber nicht ganz sicher....

Quellcode

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
28
29
30
31
32
33
34
35
36
37
38
void sprite::init(wchar_t* filename, LPDIRECT3DDEVICE9 pDevice)
{
    D3DSURFACE_DESC dsc;
    
    if(FAILED(D3DXCreateSprite(pDevice,&sp)))
    {
        MessageBox(NULL,TEXT("Erzeugen des Sprites fehlgeschlagen!"), TEXT(""), MB_OK|MB_ICONERROR|MB_SETFOREGROUND);
    }
    
          if(FAILED(D3DXCreateTextureFromFileEx(pDevice,filename,500,500,0,0,D3DFMT_UNKNOWN,D3DPOOL_DEFAULT,D3DX_DEFAULT,D3DX_DEFAULT,0xFFC00C0,NULL,NULL,&tx)))
    {   
        MessageBox(NULL,TEXT("Laden des Sprites aus Datei fehlgeschlagen!"), TEXT(""), MB_OK|MB_ICONERROR|MB_SETFOREGROUND);
    }   
    
    tx->GetLevelDesc(0, &dsc);
    width=dsc.Width;
    height=dsc.Height;
}

void sprite::draw(HWND hWnd)
{
    D3DXVECTOR3 vCenter(0.0f,0.0f,0.0f);
    D3DXVECTOR3 vPosition(0.0f,0.0f,0.0f);
    D3DCOLOR ModulateColor = 0xFFFFFFFF;
    
    if(FAILED(sp->Begin(D3DXSPRITE_ALPHABLEND)))
    {
        MessageBox(NULL,TEXT("Beginn des Rendervorgangs fehlgeschlagen!"), TEXT(""), MB_OK|MB_ICONERROR|MB_SETFOREGROUND);
    }
    if(FAILED(sp->Draw(tx,NULL,&vCenter,&vPosition,ModulateColor)))
    {
        MessageBox(NULL,TEXT("Blitten des Sprites fehlgeschlagen!"), TEXT(""), MB_OK|MB_ICONERROR|MB_SETFOREGROUND);
    }
    if(sp->End())
    {
        MessageBox(NULL,TEXT("Beenden des Rendervorgangs fehlgeschlagen!"), TEXT(""), MB_OK|MB_ICONERROR|MB_SETFOREGROUND);
    }
}


Weiss einer, wie ich DirectDraw sagen kann, dass die Sprites gleich gross bleiben sollen ?
"Das Glück des Forschers besteht nicht darin, die Wahrheit zu besitzen, sondern eine Wahrheit zu erringen. Und in diesem fortschreitendem, erfolgreichen Suchen nach der Wahrheit - darin liegt die
eigentliche Befriedigung." Max Planck

2

22.02.2010, 18:24

Ich würd mal sagen, wenn du dein Fenster grösser ziehst, bei gleich bleibender Auflösung, werden die Einzelnen Pixel automatisch auch grösser. ;)

3

22.02.2010, 18:34

Zitat von »"E122"«

Ich würd mal sagen, wenn du dein Fenster grösser ziehst, bei gleich bleibender Auflösung, werden die Einzelnen Pixel automatisch auch grösser. ;)


Dito.

unsigned long

Treue Seele

Beiträge: 140

Wohnort: Herzogenrath

Beruf: Fachinformatiker Fachrichtung Anwendungsentwicklung

  • Private Nachricht senden

4

22.02.2010, 18:48

Ich seh da kein DirectDraw.

  • »Johannes Schneider« ist der Autor dieses Themas

Beiträge: 103

Beruf: Chemiestudent

  • Private Nachricht senden

5

22.02.2010, 19:07

Gut. Dann schau ich halt, dass sch die Größe meines Fensters net verändert.
"Das Glück des Forschers besteht nicht darin, die Wahrheit zu besitzen, sondern eine Wahrheit zu erringen. Und in diesem fortschreitendem, erfolgreichen Suchen nach der Wahrheit - darin liegt die
eigentliche Befriedigung." Max Planck

6

22.02.2010, 20:06

Zitat


Gut. Dann schau ich halt, dass sch die Größe meines Fensters net verändert.


Normalerweise dürfte das Spiel beim Endbenutzer ja sowieso vollbild laufen.

Werbeanzeige