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

1

31.12.2009, 02:32

Sprites oder Textur

Guten Morgen.
Ich möchte gerne in meinem Haupmenü es so machen,
dass wenn der Benutzer die linke Maustaste drückt,
dass an dieser Position ein kleines Bildchen gerendert wird.
Sollte ich dafür mit Sprites arbeiten oder es mit Texturen lösen?

Weil ich habe ja gar keine View-Matrix oder eine KameraPosition,
deswegen wären Sprites nicht so gut, oder?

Edit: Habe es jetzt mal mit Texturen gemacht.
Aber nun ist ein zweites Problem aufgetreten.
Die Cursorposition, die ich über die GUI bekomme
stimmt irgendwie nicht. Das Bild ist auf der linken Seite des Bildes
fast unter dem Cursor und auf der rechten Seite ist es 4 cm daneben.
Warum ist das so? Kann man da etwas machen?

mfg

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

31.12.2009, 10:21

Re: Sprites oder Textur

Zitat von »"ahhhilfe"«

Sollte ich dafür mit Sprites arbeiten oder es mit Texturen lösen?


Hm kanns sein dass du da was durcheinanderbringst? Was genau meinst du mit "es mit Texturen lösen"?


Zitat von »"ahhhilfe"«

Die Cursorposition, die ich über die GUI bekomme
stimmt irgendwie nicht. Das Bild ist auf der linken Seite des Bildes
fast unter dem Cursor und auf der rechten Seite ist es 4 cm daneben.
Warum ist das so? Kann man da etwas machen?


Woher bekommst du diese Position denn?

3

31.12.2009, 11:33

Zitat

Hm kanns sein dass du da was durcheinanderbringst? Was genau meinst du mit "es mit Texturen lösen"?

Ein Viereck erstellen und darüber eine Textur legen.

Zitat

Woher bekommst du diese Position denn?

Zitat

Die Cursorposition, die ich über die GUI bekomme...

Also so:

C-/C++-Quelltext

1
2
tbVector2 m_vMousePos;
m_vMousePos = m_pGUI->GetCursorPos();


mfg

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

31.12.2009, 11:49

Oh sry, ich hab nicht geschnallt dass deine Frage im Kontext mit der Tribase Engine steht...

Zitat von »"ahhhilfe"«

Zitat

Hm kanns sein dass du da was durcheinanderbringst? Was genau meinst du mit "es mit Texturen lösen"?

Ein Viereck erstellen und darüber eine Textur legen.


Das is für mich auch n Sprite ;)
Anyway, ja so würd mans wohl machen...

C-/C++-Quelltext

1
m_pGUI->GetCursorPos(); 


Ist wohl nur ein wrapper für die normale GetCursorPos() WinAPI Funktion. Die gibt die die Mauskoordinaten am Bildschirm zurück, du willst aber die Mauskoordinaten relativ zu deinem Fenster.
Die bekommst du zum einen als Parameter der WM_LBUTTONDOWN Nachricht in deiner Fensterprozedur:

C-/C++-Quelltext

1
2
xPos = GET_X_LPARAM(lParam);
yPos = GET_Y_LPARAM(lParam);


oder du holst sie dir mit einer Kombination von GetCursorPos() und ScreenToClient():

C-/C++-Quelltext

1
2
3
POINT p;
GetCursorPos(&p);
ScreenToClient(hWnd, &p);


wobei hWnd dein Fensterhandle ist.

5

31.12.2009, 12:11

Ich habe es mit der zweiten Methode versucht aber diese Position
beschreibt den Windows Cursor aber nicht den von der GUI.

6

07.03.2010, 22:46

Habe mich nun nochmal mit dem Thema befasst und versucht es mit
folgendem Code:
Initialisierung der GUI:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//....

m_GUISkin.fCursorSpeed          = 0.0f;
//....

m_pGUI = new tbGUI;
    if(m_pGUI->Init(&m_GUISkin, MainMenuMsgProc,
                    tbVector2(tbDirect3D::Instance().GetScreenSize().x, tbDirect3D::Instance().GetScreenSize().y),
                    tbDirect3D::Instance().GetScreenSize() / tbDirect3D::Instance().GetScreenSize()))
    {
        // Fehler!

        TB_ERROR("Fehler bei der Erstellung der Benutzeroberfläche!", TB_ERROR);
    }
/*Und nicht:
m_pGUI = new tbGUI;
    if(m_pGUI->Init(&m_GUISkin, MsgVerarbeitungsFunktion,
                    tbVector2( 800.0f, 600.0f),
                    tbDirect3D::Instance().GetScreenSize() / tbVector2( 800.0f, 600.0f)))
    {
      TB_ERROR("Fehler beim Erstellen der GUI!", TB_ERROR);
    }
*\


In der Move-Funktion:

C-/C++-Quelltext

1
2
3
4
5
6
    //Cursor korrigieren!

    POINT p; 
    GetCursorPos(&p);
    ScreenToClient(tbDirect3D::Instance().GetWindow(), &p);
    m_pGUI->SetCursorPos( tbVector2( (float)(p.x), (float)(p.y)));
    //Fertig korrigiert!


Soo klappt bei mir alles.
GUI und Windows-Cursor stimmen überein.


//Edit: So werden aber die Koordinaten bei verschiedenen Auflösungen
verschieden sein. Also werd ich nicht drum herum kommen
eine eigene GUI zu schreiben aber will eh bald eine eigene Engine
aufbauen.

mfg

Werbeanzeige