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

cojo2015

Alter Hase

  • »cojo2015« ist der Autor dieses Themas

Beiträge: 516

Wohnort: bei mir zu Hause

Beruf: Schüler

  • Private Nachricht senden

1

21.06.2015, 07:50

[C++ | SFML] Fehler bei der Bildschirm-Kollisionsprüfung

Hallo Leute,
leider habe ich schon wieder ein Problem, dass ich nicht allein lösen kann.
Mein Problem: Ich habe ein 2D Spiel in der SFML geschreiben, bei dem man eine Grafik bewegen kann (Klinkt sehr unspektakulär). Ich habe eine Prüfung eingebaut, wo geprüft wird, ob die Grafik sich außerhalb vom Bildschirmrand befindet. Wenn die Grafik außerhalb vom Bildschirm ist, dann soll ine neue Position gesetzt werden. Hier der Codeausschnitt:

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
    // Positionen bekommen
    float x = Grafic1_Sprite.getPosition().x;
    float y = Grafic1_Sprite.getPosition().y;

    // Prüfen, ob der Spieler außerhalb vom Fenster ist
    //

    // X
    if (x <= 2)
    {
        x = window.getSize().x;
        Grafic1_Sprite.setPosition(x, y);
    }
    if (x >= window.getSize().x)
    {
        x= 0.f;
        Grafic1_Sprite.setPosition(x, y);
    }

    // Y
    if (y <= 2)
    {
        y = window.getSize().y;
        Grafic1_Sprite.setPosition(x, y);
    }
    if (y >= window.getSize().y)
    {
        y = 0.f;
        Grafic1_Sprite.setPosition(x, y);
    }


Wenn ich mir die Variable x in der Konsole ausgeben lasse, dann ändert sie sich dementsprechent, was im Code steht, aber die Grafikposition ändert sich nicht :dash:. Was ist der Fehler?
Danke für die Bemühung im Voraus! :)

2

21.06.2015, 07:53

Wie würd das Sprite an die Funktion übergeben?
Zeig mal den Code bitte, also der Prototyp von der Funktion.
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

cojo2015

Alter Hase

  • »cojo2015« ist der Autor dieses Themas

Beiträge: 516

Wohnort: bei mir zu Hause

Beruf: Schüler

  • Private Nachricht senden

3

21.06.2015, 07:58

Die komplette Klasse:

C-/C++-Quelltext

1
2
3
4
5
6
class CPlayer
{
public:
    void Player (float fElapsedTime, float fSpeed, sf::Sprite Grafic1_Sprite, sf::RenderWindow &window);

};

4

21.06.2015, 08:01

Du erstellst in deiner Funktion ein Kopie vom Sprite und nimmst nicht das Original!

Übergebe es als Referenz.
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

cojo2015

Alter Hase

  • »cojo2015« ist der Autor dieses Themas

Beiträge: 516

Wohnort: bei mir zu Hause

Beruf: Schüler

  • Private Nachricht senden

5

21.06.2015, 08:24

Ok. Danke für die Hilfe. Jetzt funktioniert die Prüfung, wenn die Grafik rechts über dem Bildschirmrand ist. Wenn sie links vor dem Bildschirmrand ist, bleibt sie stehen ?(. Die Prüfung mit der Y-Achse funktioniert auch nur, wenn sie unter über dem Bidschirmrand ist.
Hier der Code:

Klasse: (.hpp)

C-/C++-Quelltext

1
2
3
4
5
6
class CPlayer
{
public:
    void Player (float fElapsedTime, float fSpeed, sf::Sprite &Grafic1_Sprite, sf::RenderWindow &window);

};


.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
35
36
37
void CPlayer::Player (float fElapsedTime, float fSpeed, sf::Sprite &Grafic1_Sprite, sf::RenderWindow &window)
{
    // Referenz auf das origianale Sprite
    sf::Sprite &rGrafic1_Sprite = Grafic1_Sprite;

    // Positionen bekommen
    float x = rGrafic1_Sprite.getPosition().x;
    float y = rGrafic1_Sprite.getPosition().y;

    // Prüfen, ob der Spieler außerhalb vom Fenster ist
    //

    // X
    if (x <= 2.f)
    {
        x = window.getSize().x;
        rGrafic1_Sprite.setPosition(x, y);
    }
    if (x >= window.getSize().x)
    {
        x= 2.f;
        rGrafic1_Sprite.setPosition(x, y);
    }

    // Y
    if (y <= 2.f)
    {
        y = window.getSize().y;
        rGrafic1_Sprite.setPosition(x, y);
    }
    if (y >= window.getSize().y)
    {
        y = 2.f;
        rGrafic1_Sprite.setPosition(x, y);
    }

} // Player

cojo2015

Alter Hase

  • »cojo2015« ist der Autor dieses Themas

Beiträge: 516

Wohnort: bei mir zu Hause

Beruf: Schüler

  • Private Nachricht senden

6

21.06.2015, 08:39

Also ich habe nochmal etwas probiert: Ich habe bei y= window.getSize().y; das window.getSize().y duch 760 ersetzt. Jetzt geht es. Habe ich dabei einen Fehler gemacht (also beim Aufruf von window.getSize().y)?

7

21.06.2015, 08:43

Soll der Player auf einer Bildschirm seite raus und zur anderen wieder rein?

Nimm unter schiedliche werte fürs setzen und überprüfen
Du prüfst bei einem if auf ein Wert und im anderen setzt du ihn auf diesen!

if und if else wäre auch ein fortschritt beim überprüfen einer Achse.
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

cojo2015

Alter Hase

  • »cojo2015« ist der Autor dieses Themas

Beiträge: 516

Wohnort: bei mir zu Hause

Beruf: Schüler

  • Private Nachricht senden

8

21.06.2015, 08:49

DANKE! Jetzt klappt alles! Vielen Dank für die Hilfe! (Ich muss halt noch sehr viel lernen...) :thumbsup:

9

21.06.2015, 09:11

DANKE! Jetzt klappt alles! Vielen Dank für die Hilfe! (Ich muss halt noch sehr viel lernen...)

Seinen Code selber zu debuggen hilft da ungemein seine Fehler selber zu finden.
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

Werbeanzeige