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

16.09.2009, 13:30

SDL Absturz wegen dämlicher/unvorteilhafter Mausabfrage?

Ich habe jetzt mein erstes eigenes SDL-Spiel (obwohl Test-Anwendung es besser trifft) in die Wege geleitet. Mein Ziel ist, dass man die Spielfigur mit einem Mouseklick auf den Bildschirm lenken kann. Dafür braucht es natürlich eine abfrage der Maus, die ich nach etwas googeln so gestaltet habe:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void CPlayer::CheckMouseState()
{
    if (SDL_BUTTON(SDL_BUTTON_LEFT))
    {
        for (int x = 0; x <= 800; x++)
        {
            for (int y = 0; y <= 600; y++)
            {
                if (SDL_GetMouseState (&x, &y))
                {
                    m_fXPosWanted = static_cast<float> (x);
                    m_fYPosWanted = static_cast<float> (y);
                }
            }
        }
    }
}

m_fPosWanted stellt die angestrebte Position dar, die in der ProcessMoving()-Funktion angelenkt wird. Allerding stürzt das Programm ab, sobald ich es starte. Mein Verdacht ist, dass die große Schleife das Programm abstürzen lässt. Andererseits habe ich auch keine bessere Möglichkeit gefunden, eine Mausabfrage zu gestalten. Ist die SDL womöglich gar nicht zur-Maussteuerung designt? Oder liegt der Fehler woanders, was ich mir nicht vorstellen kann, da ich nichts im Quellcode ansonsten geändert haben (Vorher lief die Bewegung per Tatstatur ab, da funktionierte alles.)
Danke für euer Interesse

PS: Habt ihr nen besseren Namen für die Zielposition? XPosWanted klingt ziemlich dämlich xD

ChrisJ

Alter Hase

Beiträge: 487

Wohnort: Schweich

Beruf: Schüler

  • Private Nachricht senden

2

16.09.2009, 13:36

int pos_wanted[2];
if(SDL_GetMouseState(&pos_wanted[0], &pos_wanted[1])&SDL_BUTTON(1)) {
m_fPosXWanted = (float)pos_wanted[0];
// etc.
}
was sollen die schleifen denn bewirken?
"Don't trust your eyes: They are a hell of a lot smarter than you are"

3

16.09.2009, 14:12

Aso, ich hab den GetMouseState -Befehl falsch verstanden. Ich hab das so interpretiert, dass geprüft wird, ob die Maus auf dieser Positon liegt :lol: Deswegen die Schleife.

4

16.09.2009, 14:15

SDL_GetMouseState (&x, &y));

(+ ggf. cast nach float) sollte genügen.

Alternativer Name für m_fXPosWanted/m_fYPosWanted: m_fTargetX /...Y
fka tm

5

16.09.2009, 14:36

Zitat von »"TrikkieMikkie"«


Alternativer Name für m_fXPosWanted/m_fYPosWanted: m_fTargetX /...Y

Danke, der alte war kaum auszuhalten :)

Werbeanzeige