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

11

25.10.2015, 17:51

Da bin ich überfragt

Meine Idee klappt auch nicht. Genau das selbe, wie am Anfang vom Thread :pillepalle: :dash:

12

25.10.2015, 18:08

Zeige bitte mal wie der Player übergeben wird und letzten endes beim Asteroiden landet, Funktionrumpf reicht.
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

13

25.10.2015, 18:13

Zeige bitte mal wie der Player übergeben wird und letzten endes beim Asteroiden landet, Funktionrumpf reicht.

in PlayState.hpp:

C-/C++-Quelltext

1
2
3
4
5
6
// ...

public:
    std::unique_ptr<Player> mPlayer;

// ...


in Asteroid.cpp nach den #include´s:

C-/C++-Quelltext

1
std::unique_ptr<PlayState> mPlayState = std::make_unique<PlayState>();


Aufruf in Asteroid.cpp in der "Spawn"-Methode:

C-/C++-Quelltext

1
2
3
4
5
// ...

randOffset() + mPlayState->mPlayer->getCurrentX(),

// ...

14

25.10.2015, 18:22

Nur so nebenbei, dein Design ist nicht gut.

Wie kommt Playstate in Asteroid?
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

15

25.10.2015, 18:26

Wie kommt Playstate in Asteroid?

Das war nur als "Experiment" gedacht, denn als ich in "Asteroid" einen unique_ptr von "Player" erstellt habe, war die Speicheradresse nicht die gleiche. JailSoft hat mir empfolhen, dies mal zu überprüfen, da die Variable, welche sonst die x-Position von dem Spieler beinhaltet, auf 0 steht. Das Experiament war aber Erfolglos. Sonst ist "PlayState" nicht in "Asteroid" drin.

16

25.10.2015, 18:27

Ich habe mich kurz eingelesen aber könnte mich irren:

Muss man das nciht mit einem Move machen?

Nein.

Das Experiament war aber Erfolglos. Sonst ist "PlayState" nicht in "Asteroid" drin.

Dann Zeige bitte wie es im Ursprungscode war!
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

17

25.10.2015, 18:27

Muss man das nciht mit einem Move machen?

Nein, mit einem "move" lässt man den Smartpointer "auf einen Anderen State zeigen". Man muss ihn aber mit einem std::make_... initialisieren.

cojo2015

Alter Hase

  • »cojo2015« ist der Autor dieses Themas

Beiträge: 516

Wohnort: bei mir zu Hause

Beruf: Schüler

  • Private Nachricht senden

18

25.10.2015, 18:32

Dann Zeige bitte wie es im Ursprungscode war!
Asteroid.cpp:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
std::unique_ptr<Player> mPlayer = std::make_unique<Player>();

// ...

// loadAsteroid
// Auf die x-Position des Spielers wird ein zufälliger offset addiert. 
// Die Asteroiden werden außerhalb des Bildschirms gesetzt, 
// damit keine unschönen Effekte erzeugt werden.
    mSprite.setPosition(
        randOffset() + mPlayer->getCurrentX(),
        -10.f);

19

25.10.2015, 18:36

Ich weiß gerade nicht was ich sinnvolles sagen soll!

Ist das dein ernst!?

Du erstellst jedes mal in Asteroid.cpp einen neuen player und wunderst warum jedesmal wenn ein neuer Asteroid erstellt wird, die Werte so sind sie sind.
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

20

25.10.2015, 18:41

Ich weiß gerade nicht was ich sinnvolles sagen soll!

Ist das dein ernst!?

Du erstellst jedes mal in Asteroid.cpp einen neuen player und wunderst warum jedesmal wenn ein neuer Asteroid erstellt wird, die Werte so sind sie sind.

Das "std::make_..." steht unter den #include`s, also wird das doch nicht jedes mal erstellt, wenn ein neuer Asteroid erstellt wird. Oder habe ich da einen gewaltigen Denkfehler?

Hier die komplette Asteroidenkalsse:

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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#include "asteroid\include\Asteroid.hpp"
#include "gameStates\states\include\PlayState.hpp"

std::unique_ptr<Player> mPlayer = std::make_unique<Player>();

Asteroid::Asteroid()
    : m_bAlive(true)
    , m_fCurrentXPos(0.f)
    , m_fCurrentYPos(0.f)
{
}


void Asteroid::Init(Game &game)
{
    loadAsteroid(game);
}


void Asteroid::Update()
{
    mSprite.move(0.f, m_fSpeed);    // Asteroid bewegen

    mSprite.rotate(0.09f);          // Asteroid rotieren

    // Wenn der Asteroid außerhalb vom Bildschirm ist, dann deaktivieren
    if (mSprite.getPosition().y >= 570.f)
        m_bAlive = false;

}


bool Asteroid::CheckCollision(sf::Sprite &sprite)
{
    // Überschneiden sich der Asteroid mit dem angegbenen Sprite?
    if (sprite.getGlobalBounds().intersects(mSprite.getGlobalBounds()))
    {
        // Kollision!
        m_bAlive = false;

        return true;
    }
    else
        return false;

}


void Asteroid::Render(sf::RenderWindow &App)
{
    App.draw(mSprite);
}


void Asteroid::loadAsteroid(Game &game)
{
    mTexture.setSmooth(false);

    // Mittelpunkt ist genau in der Mitte der Textur
    mSprite.setOrigin(
        game.mManager->getTexture(RessourcenManager::ASTEROID).getSize().x / 2.f, 
        game.mManager->getTexture(RessourcenManager::ASTEROID).getSize().y / 2.f);

    mSprite.setTexture(game.mManager->getTexture(RessourcenManager::ASTEROID));
    mSprite.setScale(0.5f, 0.5f);   // auf 50% verkleinern

    // Auf die x-Position des Spielers wird ein zufälliger offset addiert. 
    // Die Asteroiden werden außerhalb des Bildschirms gesetzt, 
    // damit keine unschönen Effekte erzeugt werden.
    mSprite.setPosition(
        randOffset() + mPlayer->getCurrentX(),
        -10.f);

    std::cout << "Player: " << mPlayer->getCurrentX() << std::endl;
    std::cout << "Asteroid: " << mSprite.getPosition().x << std::endl << std::endl;

}


float Asteroid::randOffset()
{
    int xOffset = std::rand() % 100 + 2;

    std::cout << "offset: " << xOffset << std::endl;

    return xOffset;
}

Werbeanzeige