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

30.06.2017, 10:03

[C++ / SFML] Spritefehler

Guten Tag,
ich habe das Problem, dass sich manche Sprites bei schnellen Bewegungen komisch verzerren (sieht aus als würden sie in der Mitte durchgeschnitten und der untere Teil leicht nach rechts versetzt sein).
Woran kann das liegen und wie kann ich das beheben?

2

30.06.2017, 10:12

Kristallkugel sagt, dass du Mist gebaut hast! ;)

Spaß beiseite, relevante Codeabschnitte und ggf. Screenshots helfen, dir zu helfen.
fka tm

TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

3

30.06.2017, 10:27

Das nennt sich Tearing und liegt am Screen Refresh.

4

30.06.2017, 10:54

@Michael

player.h

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef PLAYER_HPP
#define PLAYER_HPP

#include <SFML\Graphics.hpp>

class player
{
public:
    player(int x, int y, sf::String tex);
    void Update();
    void Render(sf::RenderWindow &window);
private:
    sf::Texture textur;
    sf::Sprite sprite;
};

#endif


player.cpp

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
#include "player.h"

player::player(int x, int y, sf::String tex)
{
    textur.loadFromFile(tex);
    textur.setSmooth(false);
    sprite.setTexture(textur);
    sprite.setPosition(x, y);
}

void player::Update()
{   
    if(sf::Keyboard::isKeyPressed(sf::Keyboard::W))
    {
        sprite.move(0, -3);
    }
    else if(sf::Keyboard::isKeyPressed(sf::Keyboard::S))
    {
        sprite.move(0, 3);
    }
    else if(sf::Keyboard::isKeyPressed(sf::Keyboard::A))
    {
        sprite.move(-3, 0);
    }
    else if(sf::Keyboard::isKeyPressed(sf::Keyboard::D))
    {
        sprite.move(3, 0);
    }
}

void player::Render(sf::RenderWindow &window)
{
    window.draw(sprite);
}


@TGGC

Und wie verhindere ich so etwas?

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

5

30.06.2017, 11:01

Du musst vertikale Synchronisierung aktivieren (am besten einmalig bei der Initialisierung deines Programms):
https://www.sfml-dev.org/documentation/2…8f8aff366034f61

TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

6

30.06.2017, 11:06

Durch Vsync oder andere Timing Verfahren.

7

30.06.2017, 11:35

Dankeschön, jetzt funktioniert alles einwandfrei.

Werbeanzeige