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

Raidenkk

Treue Seele

  • »Raidenkk« ist der Autor dieses Themas

Beiträge: 151

Wohnort: Bergkamen/Oberaden

Beruf: Multimedia Informatik

  • Private Nachricht senden

1

01.09.2011, 09:59

Mein erstes SFML Pong Spiel

Hey,
wie die Überschrift es schon sagt, versuche ich mich derzeitig an einem einfachem Retro Pong Spiel.
Leider scheiterte ich an den Kollisionen zwischen (Ball vs Pong Brett). Klar weis ich wie ich die Kollision prüfe nur da ich das ganze jetzt Objektorisiert angehe ist das eine kleine Hürde für mich.
Es währe verdammt Nett wenn mir jemand weiterhelfen oder Tipps geben könnte :).

Info:
Ich habe erst für jedes Objekt eine eigene Klasse, also 3 verschiedene Klassen.
Mir wurde gesagt ich sollte für die Pong Bretter eine Struktur in der Klasse CBall machen.


main.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
38
39
40
41
42
43
44
45
46
47
48
49
// ##################################
// Name:        Retro Pong          #
// Revision:    1                   #
// Datum:       31.08.2011-         #
// ##################################


#include <iostream>
#include <SFML/Graphics.hpp>
#include "CBall.hpp"

using namespace std;

// Prototypen

int main ()
{
    // Variablen
    CBall Ball;

    // Create MainRender Window
    sf::RenderWindow App(sf::VideoMode(800, 600, 32), "Retro Pong - Revision 1");
    App.SetFramerateLimit(60);

    // GameLoop
    while (App.IsOpened ())
    {
        // Process events
        sf::Event Event;
        while (App.GetEvent(Event))
        {
            //Close MainRender Window
            if (Event.Type == sf::Event::Closed)
            {
                App.Close ();
            }

        }

        App.Clear ();

        Ball.Zeichnen (App);
        Ball.Bewegung (App);

        App.Display ();
    }

    return 0;
}


CBall.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
// Quelldatei - Klasse für den Ball

#include <SFML/Graphics.hpp>
#include <iostream>
#include "CBall.hpp"

using namespace std;

// Konstruktor
CBall::CBall ()
{
    m_X = 395;
    m_Y = 295;
    m_SpeedX = 8.0f;
    m_SpeedY = 0.1f;


    cout << "Ball erstellt" << endl;
}

// Zeichnen
// Aufgabe: Stell den Ball grafisch da.
void CBall::Zeichnen (sf::RenderWindow &App)
{
    App.Draw (sf::Shape::Circle (m_X, m_Y, 5, sf::Color::Magenta));
}

// Bewergung
// Aufgabe: Bewegungen
void CBall::Bewegung (sf::RenderWindow &App)
{
    m_X += m_SpeedX;
}


CBall.hpp

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
// Headerdatei - Klasse für den Ball
class CBall
{
    private:
        // Membervariablen
        float m_X;
        float m_Y;
        float m_SpeedX;
        float m_SpeedY;

        struct S_Spieler
        {
            int m_X;
            int m_Y;
        };

    public:
        // Memberfunktionen
        CBall ();
        void Zeichnen (sf::RenderWindow &App);
        void Bewegung (sf::RenderWindow &App);
};

TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

2

01.09.2011, 10:01

Mein Tipp: Nicht aufgeben und weiterversuchen!

3

01.09.2011, 10:04

Hast du für beide Bretter jeweils eine eigene Klasse oder nur eine Instanz?
Gewinnen ist, wenn man einmal mehr aufsteht, als man zu Boden geht.

Raidenkk

Treue Seele

  • »Raidenkk« ist der Autor dieses Themas

Beiträge: 151

Wohnort: Bergkamen/Oberaden

Beruf: Multimedia Informatik

  • Private Nachricht senden

4

01.09.2011, 10:26

die Klassen der beiden Bretter habe ich gelöscht deswegen habe ich in der Klasse CBall auch eine Struktur S_Spieler

TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

5

01.09.2011, 10:30

Ich habs immer so gemacht. Das Brett definiert einen Streifen quer ueber den Bildschirm, der Ball hat 3 Moeglichkeiten: er ist ueber dem Streifen, unter dem Streifen oder in dem Streifen. Wenn der Ball nur droht links/ rechts aus dem Bild zu fallen, schaue ich, ob der Ball in dem Streifen ist. Wenn ja, wird er reflektiert und fliegt in die entgegengesetze Richtung. Ansonsten bekommt der gegenueberliegende Spieler einen Punkt und die naechste Runde beginnt.

Raidenkk

Treue Seele

  • »Raidenkk« ist der Autor dieses Themas

Beiträge: 151

Wohnort: Bergkamen/Oberaden

Beruf: Multimedia Informatik

  • Private Nachricht senden

6

01.09.2011, 10:34

Der Ball an sich ist ja nicht das Problem nur ich weis nicht wie ich die Kollision zwischen 2 Objekte Prüfen kann.
Z.b ich hatte am Anfang ja erst 3 Klasse (Ball,SpielerBrett,ComputerBrett) aber wie kann ich 2 verschiedene Klassen untereinander Prüfen.
Dann hat man mir gesagt ich soll SpielerBrett und ComputerBrett weglassen und eine Struktur in der CBall class machen.
Jetzt habe ich die Struktur aufgebaut und weis nicht mehr weiter.

TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

7

01.09.2011, 10:46

nur ich weis nicht wie ich die Kollision zwischen 2 Objekte Prüfen kann
Ok, ich hab nochn zweiten Tipp fuer dich: Lern lesen!

8

01.09.2011, 10:48

Gewinnen ist, wenn man einmal mehr aufsteht, als man zu Boden geht.

Raidenkk

Treue Seele

  • »Raidenkk« ist der Autor dieses Themas

Beiträge: 151

Wohnort: Bergkamen/Oberaden

Beruf: Multimedia Informatik

  • Private Nachricht senden

9

01.09.2011, 10:50

TGGC werden sie bitte nicht Frech, sie haben schließlich auch mal angefangen.
Danke Flonk

TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

10

01.09.2011, 11:16

Ein Gespraech hier ist ein bisschen albern, wenn X eine Frage stellt, weil er die Antwort von Y auf diese Frage gerade zuvor "gelesen" hat.

Werbeanzeige