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

11

04.07.2015, 19:10

Du erstellt mit new einen neuen Asteroiden, aber kopierst in die Liste das Objekt.
Entweder speichere die Adresse des Asteroiden in der Liste und sorge dafür, dass es auch freigegeben wird.
Oder erzeuge das Objekt auf dem Stack und Kopiere es in die Liste.

cojo2015

Alter Hase

  • »cojo2015« ist der Autor dieses Themas

Beiträge: 516

Wohnort: bei mir zu Hause

Beruf: Schüler

  • Private Nachricht senden

12

04.07.2015, 19:25

Du erstellt mit new einen neuen Asteroiden, aber kopierst in die Liste das Objekt.
Entweder speichere die Adresse des Asteroiden in der Liste und sorge dafür, dass es auch freigegeben wird.
Oder erzeuge das Objekt auf dem Stack und Kopiere es in die Liste.


Also sozusagen eine Referenz vom Asteroiden, wenn ich das richtig verstehen, oder?
PS: Danke für die Geduld mit mir

cojo2015

Alter Hase

  • »cojo2015« ist der Autor dieses Themas

Beiträge: 516

Wohnort: bei mir zu Hause

Beruf: Schüler

  • Private Nachricht senden

13

05.07.2015, 08:48

Moin, ich habe nochmal den Code Zeile für Zeile auseinander genommen und habe herausgefunden, dass der Fehler etwas mit dem Sprite zu tun hat. Im Anhang könnt ihr das Bild mit den Fehlern sehen. Muss ich zusätzlich noch Speicher reservieren, oder hab ich irgendow etwas vergessen?
»cojo2015« hat folgendes Bild angehängt:
  • Fehlermeldung.PNG

14

05.07.2015, 11:03

Das kann man jetzt so nicht sagen ohne den Code dafür gesehen zu haben.
Könntest du ihn reinkopieren?

cojo2015

Alter Hase

  • »cojo2015« ist der Autor dieses Themas

Beiträge: 516

Wohnort: bei mir zu Hause

Beruf: Schüler

  • Private Nachricht senden

15

05.07.2015, 11:34

Quelldatei:

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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#include "AsteroidManager.hpp"

// Konstruktor
//
// Aufgabe: Speicher reservieren
//
CAsteroidManager::CAsteroidManager ()
{
    m_pClock = new sf::Clock ();
    m_pClock->restart ();

}



// Destruktor
//
// Aufgabe: Speicher freigeben
//
CAsteroidManager::~CAsteroidManager ()
{
    delete m_pClock;
    m_pClock = NULL;

}



// Insert
//
// Aufgabe: Fügt einen Asteroiden in die Liste ein
//
void CAsteroidManager::Insert (CAsteroid *Asteroid)
{
    mList.push_back (Asteroid);
}



// Update
//
// Aufgabe: Updatet den Manager
//
void CAsteroidManager::Update (float fFrameTime)
{
    Spawn (0.5f);

    for (auto it : mList)
    {
        it->Update (fFrameTime);
    }

}



// Handle
//
// Aufgabe: Handhabt den Manager
//
void CAsteroidManager:: Handle ()
{
    for (auto it : mList)
    {
        it->Handle ();
    }

}



// Render
//
// Aufgabe: Rendert den Asteroiden
//
void CAsteroidManager::Render (sf::RenderWindow *rw)
{
    for (auto it : mList)
    {
        it->Render (rw);
    }

}



// Spawn
//
// Aufgabe: Spawnt nach einem Interwall einen neuen Asteroiden
//
void CAsteroidManager::Spawn (float fTime)
{
    if (m_pClock->getElapsedTime().asSeconds() >= fTime)
    {
        // Zufällige Variablen
        //
        int speed    = rand() %150  + 50;
        int rotaion  = rand() %100  + 10;

        int xPos     = rand() %1000 + 20;
        int yPos     = rand() %-200 + 20;

        CAsteroid *p = new CAsteroid (std::string ("Data/Asteroid.png"), sf::Vector2f (xPos, yPos), sf::Vector2f (0.1f, 0.1f), speed, rotaion);

        mList.push_back (p);

        m_pClock->restart ();
    }

}


Headerdatei:

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
#ifndef MANAGER_HPP
#define MANAGER_HPP

#include <iostream>
#include <list>
#include <SFML\Graphics.hpp>
#include "Asteroid.hpp"

class CAsteroidManager
{
public:
    CAsteroidManager ();
    ~CAsteroidManager ();

    void Insert (CAsteroid *Asteroid);
    void Spawn (float fTime);
    void Update (float fFrameTime);
    void Handle ();
    void Render (sf::RenderWindow *rw);

private:
    std::list<CAsteroid*> mList;
    sf::Clock             *m_pClock;

};

#endif


PS: Habe VS neu gestartet udn ich habe einen anderen Fehler: m_pClock <Speicher kann nicht gelesen werden>. Wenn ich einen Doppelklick darauf mache, geht er in Zeile 93 in der .cpp :dash:

16

05.07.2015, 12:10

versuch mal eine sf::Clock ohne einen Pointer.
Dann kannst du das ganze mit dem "new sf::Clock" und das delete sparen.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

17

05.07.2015, 12:15

Hatten wir das nicht schon geklärt? Du rufst Spawn auf einem illegalen Pointer auf.
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]

18

05.07.2015, 12:58

Hat es geklappt cojo?

cojo2015

Alter Hase

  • »cojo2015« ist der Autor dieses Themas

Beiträge: 516

Wohnort: bei mir zu Hause

Beruf: Schüler

  • Private Nachricht senden

19

05.07.2015, 14:52

@BlueCobold: Ja, aber er hat es nicht komplett gespeichert (also nur ein Teil vom dem, was ich geschreiben habe).

@SlyGamer72HD: Nein, leider nicht. Ich habe eine sf::Clock clock; als Membervariable deklariert. Immer wenn ich diese Uhr mit einemm "this"-Pointer aufgerufen hatte, habe ich einfach das "->" durch einen Punkt ersetzt. Der Fehler bleibt... :-/

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »cojo2015« (05.07.2015, 15:04)


BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

20

05.07.2015, 15:09

Das Problem liegt nicht *in* der Spawn-Methode, sondern dort, wo sie aufgerufen wird. Zeig diese Zeile bitte.
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]

Werbeanzeige