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

SwatzZ

Treue Seele

  • »SwatzZ« ist der Autor dieses Themas

Beiträge: 119

Beruf: Gymnasist (10. Klasse)

  • Private Nachricht senden

41

07.05.2013, 15:04

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?

SwatzZ

Treue Seele

  • »SwatzZ« ist der Autor dieses Themas

Beiträge: 119

Beruf: Gymnasist (10. Klasse)

  • Private Nachricht senden

42

07.05.2013, 15:21

Achso. Fertig, ich habe einfach eine Bedingung geschrieben, dass wenn nichts gedrückt ist, trotzdem restartet wird und jetzt gehts :)

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

43

07.05.2013, 15:28

Ist das eigentlich jetzt so eine Art BLOG?
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

44

07.05.2013, 15:30

sf::Time Zeit = Uhr.getElapsedTime();

Kleiner Tipp: Ändere das Obere um in Folgendes:

C-/C++-Quelltext

1
sf::Time Zeit = Uhr.restart();


Und entferne dann die ganzen restart() Aufrufe in den if-Bedingungen. Denn wie schon gesagt, gibt restart() automatisch die vergangene Zeit zurück.
So ist es außerdem wesentlich übersichtlicher und besser wartbar.

SwatzZ

Treue Seele

  • »SwatzZ« ist der Autor dieses Themas

Beiträge: 119

Beruf: Gymnasist (10. Klasse)

  • Private Nachricht senden

45

07.05.2013, 16:00

Ist das eigentlich jetzt so eine Art BLOG?
Hat sich scheinbar so entwickelt. Aber jetzt ein Danke an alle, die mir geholfen haben und ich schließe das hier mal mündlich :D

Fourb

Treue Seele

Beiträge: 122

Beruf: Schüler

  • Private Nachricht senden

46

07.05.2013, 16:44

Facepalm.. Auch wenn es geht. Lern bitte nochmal die Grundlagen von Anfang an.
42 / Pi = 13,37

Werbeanzeige