Noch mal neu: Die Bewegung funktioniert, ich musste sf::time nur in die Runtime-Schleife packen, aber die Bewegungen ruckeln...
|
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
|
#include <iostream>
#include "windows.h"
#include <SFML\Graphics.hpp>
using namespace std;
int main()
{
//Sprite
sf::Texture square1;
square1.loadFromFile("square.png");
sf::Sprite player1;
player1.setTexture(square1);
player1.setOrigin(25,25);
player1.setPosition(400,300);
//Laufzeitvariable
sf::Event Event;
bool running = true;
//Fenster
sf::RenderWindow Fenster(sf::VideoMode(800,600,32),"Spiel");
sf::Keyboard Input;
//Clock
sf::Clock Uhr;
//Laufzeitschleife und Steuerung
while (running == true)
{
//Zeit
sf::Time Zeit = Uhr.getElapsedTime();
//Escape-Event
while (Fenster.pollEvent(Event))
{
if((Event.type == sf::Event::KeyPressed) && (Event.key.code == sf::Keyboard::Escape))
{
Fenster.close();
running = false;
}
}
//Steuerung
if (Input.isKeyPressed(sf::Keyboard::W))
{
player1.move(0,(-0.05 * Zeit.asMilliseconds()));
Uhr.getElapsedTime();
}
if (Input.isKeyPressed(sf::Keyboard::A))
{
player1.move((-0.05 * Zeit.asMilliseconds()), 0);
Uhr.restart();
}
if (Input.isKeyPressed(sf::Keyboard::S))
{
player1.move(0,(0.05 * Zeit.asMilliseconds()));
Uhr.restart();
}
if (Input.isKeyPressed(sf::Keyboard::D))
{
player1.move((0.05 * Zeit.asMilliseconds()), 0);
Uhr.restart();
}
//Darstellung
Fenster.clear(sf::Color::Black);
Fenster.draw(player1);
Fenster.display();
}
return 0;
}
|
Wenn ich zB. drei Sekunden warte, bevor ich zB. W drücke, verschwindet der Kasten aus dem Blickfeld, weil die restart()-funktion immer nur nach dem letzten Loslassen berechnet wird... Wie bekomme ich es richtig hin?