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

24.09.2022, 23:00

Sfml c++ animation per knopfdruck abspielen

Hallo,
ich hab da ein Problem wo ich nicht weiter komme vllt. kann mir hier jemand einen helfen. Ich will eine Animation(also ein SpriteSheet mit 24 Frames) per Knopfdruck abspielen, diese soll einfach bis zum ende laufen und sich nur wiederholen wenn ich den Knopf drücke. Bis jetzt hab ich es nur geschafft, dass die Animation abgespielt wenn der Knopf gedrückt bleibt, sich wiederholt und die Animation dort beginnt wo ich den Knopf losgelassen habe, wie in dem folgenden Code:



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
...

//initialisierung für den Sprite(SpriteSheet)
sf::Texture texture;
texture.loadFromFile("test1.png");
sf::Sprite sprite;
sprite.setPosition(300, 500);
sprite.setScale(5, 5);
sprite.setTexture(texture);

//Initialiserung für den Touch Knopf
sf::RectangleShape button;
button.setSize(sf::Vector2f(600, 200));
button.setPosition( sf::Vector2f(500, 1900));
button.setFillColor(sf::Color::Red);

sf::Clock clock;
sf::Vector2f animRect;
        
        while (window.isOpen())
        {                                                       
        
        
                sf::Event event;

//Touch wird mit den Bilfschirm Koordinaten gesetzt
sf::Vector2i pixelPos = sf::Touch::getPosition(0, window); 
sf::Vector2f worldPos = window.mapPixelToCoords(pixelPos);


//setzt das Rect für den SpriteSheet
sprite.setTextureRect(sf::IntRect (animRect.x * 101, animRect.y * 232, 101, 232));
                
                while (window.pollEvent(event))
                {                                               
                        
                if (event.type == sf::Event::Closed)
                                window.close();
                        }       
                
//FloatRect für den Button            
sf::FloatRect btnRect = button.getGlobalBounds();
                
                //wenn der Touch gedrückt wird
                if(btnRect.contains(worldPos)){
                        // ab hier bräuchte ich Hilfe
                        if(clock.getElapsedTime().asSeconds() >= 0.2){
                animRect.x++;
                if(animRect.x * 101 >= texture.getSize().x)
        animRect.x = 0;
           animRect.y = 0;
                clock.restart();
                        }                               
                }

Dies soll eine einfache Übung für mich als Beginner sein, deshalb möchte ich alles in der main Funktion haben und erstmal keine Klassen oder Header benutzen.