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.