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

Daedra22

Treue Seele

  • »Daedra22« ist der Autor dieses Themas

Beiträge: 115

Wohnort: Osten

Beruf: Student Informationstechnik

  • Private Nachricht senden

11

27.05.2013, 20:52

Du musst es ja nicht so kompliziert machen. Du guckst am Anfang deiner Hauptschleife einfach jeden Frame ob die Maus grad gedrückt wird. Du weißt also ob die Maus im aktuellen Frame gedrückt wird. Wenn du jetzt zusätzlich speicherst, ob die Maus im letzten Frame gedrückt wurde, dann kannst du damit ganz leicht Mausklicks erkennen. Wird die Maus im aktuellen Frame gedrückt und im letzten nicht, dann handelt es sich um einen Mausklick. Wird die Maus aktuell nicht gedrückt ist es egal und wir die Maus im aktuellen Frame gedrückt und wurde auch im letzten Frame schon gedrückt, so ist der gesuchte Moment des Klicks schon vorbei. Wie gesagt ich würde mir sowas in eine Klasse kapseln aber im Prinzip reichen 2 bool Variablen für den aktuellen Zustand und den des letzten Frames aus.

so etwa?-



case SDL_MOUSEBUTTONDOWN:
{
if(!taste2)
{
x2=event.motion.x;
y2=event.motion.y;
taste2=true;
}
}
break;


case SDL_MOUSEBUTTONUP:
{
taste2=false;
}
break;
Who are you? - I am a game designer.
No you are not! - I am a game designer.
What kind of a designer ? - I am a game designer.
You mean you play games ? - I am a game designer.

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Daedra22« (27.05.2013, 21:04)


12

27.05.2013, 23:05

Du kanns imo auch einfach das entsprechende Bit aus der Eventsequenz nehmen

C-/C++-Quelltext

1
2
3
4
5
6
if(e.type == SDL_MOUSEBUTTONUP)
{
    ...
    //e.type ^= SDL_MOUSEBUTTONUP;
    e.type = 0;
}


Edit: Schwachsinn, das Bit wird ja garnicht geprüft, du kannst einfach e.type = 0 setzen, s.o.

Edit: So wird das übrigens in deinem Fall auch nichts. Ich stelle fest, du hast ja zwei Event-Schleifen. Dann müsstest du in beiden Fällen das MouseUp- anstelle des MouseDown-Ereignis abfragen. So wie es Schorsch ja prinzipell auch schon vorgeschlagen hat.

Sry für diesen chaotischen Beitrag. :pillepalle:

Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von »dr.hallo« (28.05.2013, 01:37)


Daedra22

Treue Seele

  • »Daedra22« ist der Autor dieses Themas

Beiträge: 115

Wohnort: Osten

Beruf: Student Informationstechnik

  • Private Nachricht senden

13

28.05.2013, 10:05

Ok ich hab nun mal versucht Schorschis Idee umzusetzen, bin aber nicht sicher ob er es so gemeint hat :

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
bool MausT1, MausT2 = false;


while(SDL_PollEvent(&event))
    {

 if(event.type==SDL_MOUSEBUTTONDOWN & !MausT2)
 {MausT1=true;}

 if(event.type==SDL_MOUSEBUTTONUP& MausT1)
 {MausT1=false;}

 if(event.type==SDL_MOUSEBUTTONDOWN & !MausT1)
 {
 MausT2=true;
 }
 if(event.type==SDL_MOUSEBUTTONUP & MausT2)
 {MausT2=false;
 }
 }
 if(MausT2)
 {
 "Dann setze Kreuz" ... SDL_BlitSurface(kreuz....)
 }
Who are you? - I am a game designer.
No you are not! - I am a game designer.
What kind of a designer ? - I am a game designer.
You mean you play games ? - I am a game designer.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Schorsch« (28.05.2013, 12:37) aus folgendem Grund: Codetags eingefügt


Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

14

28.05.2013, 12:45

Finde die Bezeichner nicht besonders aussagekräftig. Wenn es funktioniert gut. Ich würde es eher in der Richtung lösen:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
bool mouseCurrentFrame, mouseLastFrame = false;

while(gameIsRunning)
{
    mouseLastFrame = mouseCurrentFrame;
    mouseCurrentFrame = false;
    while(SDL_PollEvent(&event))
    {
        if(event.type == SDL_MOUSEBUTTONDOWN)
        {
            mouseCurrentFrame = true;
        }
        // restlicher Event Code
    }
    
    // gamecode
    if(mouseCurrentFrame && !mouseLastFrame)
    {
        //Mausklick
    }
}


So in etwa würde ich es wohl umsetzen. Die Variablenbezeichnungen sind auch noch nicht optimal. Ich wollte mir hier ohne IDE ein wenig Tipparbeit sparen. Besser wäre etwas wie "leftMouseButtonDownCurrentFrame" etc. Wie gesagt ich kapsel mir sowas normal in eine Klasse. Dann habe ich eine Klasse Mouse welche dann Funktionen hat wie MouseClickLeft(), oder Events oder oder oder. Halt je nachdem was ich grad genau benötige. Aber so sollte es ja erst mal reichen.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Daedra22

Treue Seele

  • »Daedra22« ist der Autor dieses Themas

Beiträge: 115

Wohnort: Osten

Beruf: Student Informationstechnik

  • Private Nachricht senden

15

28.05.2013, 13:25

Wunderbar, hab die Variablen und die Struktur ein bisschen verändert, aber jetzt nimmt er nur noch einen Klick war.
Warum ist es eigentlich so wichtig, dass Variablen, Klassen und Co Englisch bezeichnet werden ?

Vielen Dank für eure Zeit und Hilfe :)
Who are you? - I am a game designer.
No you are not! - I am a game designer.
What kind of a designer ? - I am a game designer.
You mean you play games ? - I am a game designer.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

16

28.05.2013, 13:32

Ist absolut nicht wichtig. Da viele Bücher, Tutorials und anderen Quellen Englisch sind gewöhnt man sich das schnell an. Programmiersprachen benutzen selbst oft englische Wörter und wenn du mal in internationalen Teams arbeitest ist die Sprache normal auch Englisch. Also ist es gut sich das sofort anzugewöhnen. Hinzu kommt, benennt man Variablen Deutsch, dann schleicht sich schnell ein Sprachmix ein. So habe ich auch schon folgende Variablennamen gesehen:
isBegehbar,
clickable,
...
Und auch schon viel schlimmere Sachen. Kann mich nur an die meisten nicht mehr erinnern. Spätestens wenn es dann aber um Mausknöpfe geht (wie sich das schon anhört), etc geht hast du schnell einen Sprachsalat. Und das wird dann schnell abenteuerlich, vor allem wenn du mit anderen Leuten zusammen arbeitest. Machen kannst du das aber wie du möchtest. Von mir aus auch auf
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Daedra22

Treue Seele

  • »Daedra22« ist der Autor dieses Themas

Beiträge: 115

Wohnort: Osten

Beruf: Student Informationstechnik

  • Private Nachricht senden

17

02.06.2013, 19:00

Klingt einleuchtend ^^

aber ich hatte nur Russisch in der Schule, vielleicht hast du dafür auch einen Videoausschnitt :D ?
Who are you? - I am a game designer.
No you are not! - I am a game designer.
What kind of a designer ? - I am a game designer.
You mean you play games ? - I am a game designer.

Werbeanzeige