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

22.01.2016, 10:43

C++ List Asteroid

Hallo :)

Ich versuche zurzeit ein Space Shooter zu programmieren und habe seid längerem ein Problem was ich selbst nicht lösen kann :(. In meinem Space Shooter sollen Asteroiden erstellt die der Spieler ausweichen soll. Das erstellen der Asteroiden ist nicht das Problem sondern die List. Ich schaffe es nicht das die Asteroiden geupdatet(Asteroid bewegt sich nicht) werden ?(

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
#pragma once

#include <SFML\Graphics.hpp>
#include <list>

#include "Asteroid.hpp"

using namespace sf;
using namespace std;

class AsteroidManager {

public:
    void Insert                 (Asteroid Asteroid);
    void Update                 (float ElapsedTime);
    void Render                 (RenderWindow &Window);

private:
    list<Asteroid>              List;
    list<Asteroid>::iterator    It;
    Clock                       Clock;

};


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
#include "AsteroidManager.hpp"

void AsteroidManager::Insert(Asteroid Asteroid) {

    List.push_back(Asteroid);

}

void AsteroidManager::Update(float ElapsedTime) {

    for (auto It : List) {

        It.Update(ElapsedTime);

    }

}

void AsteroidManager::Render(RenderWindow &Window) {

    for (auto It : List) {

        It.Render(Window);

    }

}


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
#pragma once

#include <SFML\Graphics.hpp>
#include <iostream>

using namespace sf;
using namespace std;

class Asteroid {

public:
    Asteroid        (string Path);
    void Update     (float ElapsedTime);
    void Render     (RenderWindow &Window);

private:
    Texture         Texture;
    Sprite          Sprite;

    Vector2f        Position;

    float           MoveSpeed;

};


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
#include "Asteroid.hpp"

Asteroid::Asteroid(string Path) : Position(400, 100), MoveSpeed(100.0f) {

    Texture.loadFromFile(Path.c_str());
    Sprite.setTexture(Texture);
    Sprite.setOrigin(static_cast<float>(Texture.getSize().x / 2), static_cast<float>(Texture.getSize().y / 2));
    Sprite.setPosition(Position);

}

void Asteroid::Update(float ElapsedTime) {

    Sprite.move(0, MoveSpeed * ElapsedTime);
    Sprite.rotate(100.0f * ElapsedTime);

}

void Asteroid::Render(RenderWindow &Window) {

    Window.draw(Sprite);

}

Wirago

Alter Hase

Beiträge: 1 193

Wohnort: Stockerau

Beruf: CRM Application Manager

  • Private Nachricht senden

2

22.01.2016, 10:46

Schon mal den Debugger angeworfen um zu prüfen ob sich die Variablen verändern bzw ob überhaupt die Methoden korrekt aufgerufen werden?

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

3

22.01.2016, 11:35

Wenn ich das grad richtig sehe dann hat Wirago dein Problem schon erkannt. Debugger ist ein gutes Stichwort. Wobei bei dem Fehler vermutlich ein wenig genauer damit geguckt werden muss. Mal ein kleiner Hinweis. Wenn ein Objekt in eine Liste geschoben wird dann wird es ja erst mal kopiert. Wenn die Liste ein Objekt zurück gibt wird das Objekt auch kopiert. Arbeitest du damit dann arbeitest du also auf einer Kopie. Du möchtest aber auf dem selben Objekt arbeiten welches sich in der Liste befindet.

C-/C++-Quelltext

1
2
3
for(auto &ichBinEineReferenz: liste) {

}

So solltest du Referenzen aus der Liste bekommen und dann sollte es auch klappen.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

4

22.01.2016, 11:56

Danke für die Hilfe es klappt jetzt :thumbsup:

Ich benutze den Debbuger so gut wie nicht das sollte ich wohl mal schnell ändern :D

Wirago

Alter Hase

Beiträge: 1 193

Wohnort: Stockerau

Beruf: CRM Application Manager

  • Private Nachricht senden

5

22.01.2016, 12:29


Ich benutze den Debbuger so gut wie nicht das sollte ich wohl mal schnell ändern :D


Solltest du ;)

birdfreeyahoo

Alter Hase

Beiträge: 756

Wohnort: Schorndorf

Beruf: Junior Software Engineer

  • Private Nachricht senden

6

22.01.2016, 12:45

Eine Frage habe ich: Warum schreibt er

C-/C++-Quelltext

1
auto It


Soweit ich weiß, ist auto ein automatischer typ wie var bei c#. It ist aber doch schon in der Klasse deklariert oder nicht?

Wirago

Alter Hase

Beiträge: 1 193

Wohnort: Stockerau

Beruf: CRM Application Manager

  • Private Nachricht senden

7

22.01.2016, 13:03

Eine Frage habe ich: Warum schreibt er

C-/C++-Quelltext

1
auto It


Soweit ich weiß, ist auto ein automatischer typ wie var bei c#. It ist aber doch schon in der Klasse deklariert oder nicht?


Ja, auto in C++ ist das var in C#. Du musst aber trotzdem einen identifier angeben. In C# Schreibst du ja auch zB foreach (Kfz car in myList)

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

8

22.01.2016, 14:03

Soweit ich weiß, ist auto ein automatischer typ wie var bei c#. It ist aber doch schon in der Klasse deklariert oder nicht?

It braucht die Klasse in dem Fall gar nicht zu kennen. Er benutzt es ja nur in den beiden Schleifen. Von daher kann er sich den Member in der Klasse eigentlich sparen. In der Schleife wird It dann vor allem überschrieben. It in der Schleife ist nicht das selbe wie It als Klassenmember. Er gibt ja durch auto einen neuen Typ an der in dem Fall eben von C++ aufgelöst wird.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

9

22.01.2016, 18:25

Ich finde übrigens, dass es beim Verständnis und zum Lernen immens hilft, wenn man Variablen und Parameter (also alle Instanzen) mit kleinem Buchstaben beginnt und Klassen mit großen.
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]

birdfreeyahoo

Alter Hase

Beiträge: 756

Wohnort: Schorndorf

Beruf: Junior Software Engineer

  • Private Nachricht senden

10

23.01.2016, 15:16

Und für was ist dann der Klassenmember It?

Werbeanzeige