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

FreezingEngine

Treue Seele

  • »FreezingEngine« ist der Autor dieses Themas

Beiträge: 280

Wohnort: NRW

Beruf: Schüler

  • Private Nachricht senden

1

12.02.2011, 22:33

Maus Klick in SFML

Hallo!
Bin erst seit kurzem mit SFML am arbeiten und insgesamt 2 1/2 Monate mit Programmieren überhaupt am arbeiten.
Bin jetzt mit SFML soweit das ich ein Text habe der aufblinkt bzw farbe ändert wenn maus drüber ist , Hintergrundbild angezeigt wird und eine Backround Musik spielt, ich möchte jetzt das durch ein Klicken auf den Text Spiel beenden sich das Fenster schließt und das bei Spiel starten , das Fenster mit Scree.Clear(); "sauber" gemacht wird soweit erstaml und hier der Code(siehe Anhang).
Habe jetzt wirklich lange gerübelt und oft das tutorial auf der HP durchgelesen iwie steh ich immer noch aufm Schlauch.
Danke für die Antworten im Vorfeld.
MfG Marcel.


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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#include <SFML/Graphics.hpp>
#include <SFML/Window.hpp>
#include <SFML/Audio.hpp>

int main()
{
    sf::RenderWindow Screen(sf::VideoMode::GetDesktopMode(), "Versuch1", sf::Style::None);
        
    //Titel Settings
    sf::String Titel;
    Titel.SetText("Ein kleines Spiel");
        Titel.SetPosition(300, 8);
        Titel.SetSize(90);
        Titel.SetColor(sf::Color::Black);
    
    
    //Menü Array mit Position größe ist unten!
    sf::String menu[2];
    menu[0].SetText("Spiel starten");
    menu[1].SetText("Spiel beenden");

    for (int i=0; i<2; i++)
    {
    menu[0].SetPosition(300,200);
    menu[1].SetPosition(300,400);
    }
    

    
    //Event für Schleife
    sf::Event Screen1;
    
    //Bild wird geladen//   
    sf::Image Bild1;
    if (!Bild1.LoadFromFile("Unbenannt.jpg"));  
    sf::Sprite Bild;
        Bild.SetImage(Bild1);
        Bild.SetPosition(0, 0);
    
        //Spielt Musik ab
        sf::Music Lied(96000);
        if (!Lied.OpenFromFile("lol12.wav"))
        return EXIT_FAILURE;
        Lied.Play();
        Lied.SetLoop(true);
    
        //Schleife startet.
    while (Screen.IsOpened())
        {
            while (Screen.GetEvent(Screen1))
            {
                if ((Screen1.Type == sf::Event::KeyPressed)&& (Screen1.Key.Code == sf::Key::Escape))
                Screen.Close();
            if (Screen1.Type == sf::Event::Closed)
             Screen.Close();
            }
        Screen.Clear();
          //Zeichnet Bild bzw das Bild im Sprite
          Screen.Draw(Bild);
        //Menü settings
          for(int i=0; i<2; i++)
         {
            sf::FloatRect TextRect = menu[i].GetRect();
            sf::Vector2f MousePosition(Screen.GetInput().GetMouseX(), Screen.GetInput().GetMouseY());
            if (TextRect.Contains(MousePosition.x,MousePosition.y))
            {
                menu[i].SetColor(sf::Color::Red);
            }
            else
            {
                menu[i].SetColor(sf::Color::Black);
            }
            //Menü grße + die zeichnungen
                menu[i].SetSize(65);
            Screen.Draw(menu[i]);
            Screen.Draw(Titel);
         }
    

        //Bildschirm zeigt alles.
        Screen.Display();
    
    
    }


// ENDE! :D
    return EXIT_SUCCESS;
}






EDIT:Problem gelöst.
"He who sacrifices freedom for security deserves neither."
Benjamin Franklin

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »FreezingEngine« (13.02.2011, 12:57)


2

12.02.2011, 23:01

Was genau verstehst Du denn nicht? Du musst nur schauen, ob der Mausbutton gedrückt wurde und dann das Spiel beenden.
http://sfml-dev.org/documentation/1.6/cl…af803e29ffa9dea (isMouseButtonDown)

3

12.02.2011, 23:05

Dann prüfst du jetzt einfach noch, (wie du es mit der Farbe auch schon gemacht hast) ob der Mauszeiger über dem Text ist und ob die Maustaste gedrückt wurde. Dann reagierst du entsprechend. Wenn du dann aber einen leeren Screen haben willst, der auch leer bleibt (nicht nur für das eine Frame in dem die Maustaste gedrückt wurde), solltest du dir eine Variable anlegen, die den aktuellen Spielstatus beschreibt. Und das Menu zeichnest du dann nur, wenn diese Variable dem Menu entspricht.

lg chaia

4

16.04.2011, 21:41

Hallo,
darf ich das Thema vielleicht aufgreifen?
Ich arbeite ebenfalls an einem Menü, bestehend aus:
- Hintergrund Bild
- Zwei Texten (SFML Text)
Ich möchte nun gerne nach einem Mausklick überprüfen ob die Position der Maus(X und Y) gleich dem Text ist, oder sich im Bereich des Textes befindet. Meine Idee war es, vorher in einer Variable festzulegen, in welchen Bereich sich der Text befindet (jeweils pro Text), um dann schließlich nach einem Mausklick zu überprüfen ob die X und Y Position gleich der Variable ist. Wäre dies ein Weg?? Bin über jede Hilfe dankbar!

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

5

16.04.2011, 21:55

willkommen im forum.
sf::String verfügt über eine methode GetRect() und das rect über Contains(T X, T Y). damit ist das ganz einfach.

also einfach if(text.GetRect().Contains(mousePosX, mousePosY)
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

6

16.04.2011, 22:24

Hallo,
vielen Dank, es klappt ;-).

moritz31

Treue Seele

Beiträge: 259

Wohnort: Hessen

Beruf: Student

  • Private Nachricht senden

7

23.04.2011, 13:01

geht aber auch mit Positionen < > = glaub ich,
aber so wie es Nacho gesagt hat is natürlich leichter

Werbeanzeige