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

Jawaiica

Treue Seele

  • »Jawaiica« ist der Autor dieses Themas

Beiträge: 134

Wohnort: Hannover

Beruf: Student

  • Private Nachricht senden

1

08.02.2010, 23:00

Problem bei erweiterung?

hi @ all,

ich habe verucht das Spiel des Buches zu erweitern. Ich wollte einen Satelit hinzufügen. Mein Problem nun:

Es spawnen Satelliten, jedoch bleiben diese nicht wie die Asteroiden "dauerhaft" da sondern sie blinken nur ab und zu auf... ich weiß nicht woran dies liegen kann... habt ihr vielleicht eine lösung für mich?

vielen dank schonmal im voraus



Mit freundlichen Grüßen Jawaiica

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

2

08.02.2010, 23:02

leider können auch wir nicht hellsehen und können dir ohne code nicht weiter helfen :/
ich vermute mal dass du was mit der variable isAlive machst oder nicht machst was zu diesem fehler führt.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

3

08.02.2010, 23:03

david_pb's kristallkugel ist wieder gefragt :D

zeig uns etwas code, dann können wir dir eher helfen ;)

Jawaiica

Treue Seele

  • »Jawaiica« ist der Autor dieses Themas

Beiträge: 134

Wohnort: Hannover

Beruf: Student

  • Private Nachricht senden

4

08.02.2010, 23:19

naja ich hab den code jetzt nicht mehr parat aber ich kann euch sagen was ich verändert habe^^ also ich hab den inhalt der Asteroids.cpp und hpp datei kopiert und in die jeweiligen Satellit.cpp und hpp gepackt. Dort hab ich dann alle Dateien, die im namen Asteroids hatten abgeändert. Also zb:

blablaAsteroids wurde dann zu blablaSatellit

Dann hab ich die Funktionen Collision etc kopiert und das selbe gemacht.

Das mit dem isAlive kann gut sein... Die hatte ich ebenfalls verändert. Dort hatte ich ein _Satellit drangehängt.

edit:
Morgen lade ich mal den code hoch!

Jawaiica

Treue Seele

  • »Jawaiica« ist der Autor dieses Themas

Beiträge: 134

Wohnort: Hannover

Beruf: Student

  • Private Nachricht senden

5

09.02.2010, 15:21

Satellit.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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include "Satellit.hpp"

// Init

//

// Aufgabe: Asteroid initialisieren

//

void CSatellit::Init (CSprite *pSpriteSatellit, float fXPos, float fYPos)
{
  // Zeiger auf Sprite kopieren und Koordinaten setzen

  m_pSpriteSatellit = pSpriteSatellit;
  m_fXPos_Satellit = fXPos;
  m_fYPos_Satellit = fYPos;

  // Animation beginnt beim ersten Einzelbild

  m_fAnimPhase_Satellit = 0.0f;

  // Rect initialisieren

  m_Rect.x = static_cast<int>(fXPos);
  m_Rect.y = static_cast<int>(fYPos);
  m_Rect.w = pSpriteSatellit->GetRect().w;
  m_Rect.h = pSpriteSatellit->GetRect().h;

  // Asteroid aktivieren

  m_bIsAlive = true;

} // Init



// Update

//

// Aufgabe: Asteroid bewegen und Position prüfen

//

void CSatellit::Update ()
{
  // Asteroid bewegen

  m_fYPos_Satellit += 200.0f * g_pTimer->GetElapsed ();

  m_Rect.y = static_cast<int>(m_fYPos_Satellit);

  // Animieren

  m_fAnimPhase_Satellit += 10.0f * g_pTimer->GetElapsed ();

  // Prüfen, ob die Animation am Ende angelangt ist

  if (m_fAnimPhase_Satellit >= 20.0f)
    m_fAnimPhase_Satellit = m_fAnimPhase_Satellit - 20.0f;

  // Deaktivieren, falls außerhalb des Bildschirms

  if (m_fYPos_Satellit > 590.0f)
    m_bIsAlive = false;

} // Update



// Render

//

// Aufgabe: Asteroid rendern

//

void CSatellit::Render ()
{
  m_pSpriteSatellit->SetPos (m_fXPos_Satellit, m_fYPos_Satellit);
  m_pSpriteSatellit->Render (m_fAnimPhase_Satellit);

} // Render


Satellit.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
23
24
25
26
#ifndef SATELLIT_HPP
#define SATELLIT_HPP

#include "Sprite.hpp"

class CSatellit
{
  public:
    void Init     (CSprite *pSpriteSatellit, float fXPos, float fYPos);
    void Update   ();
    void Render   ();
    bool IsAlive  () {return m_bIsAlive;}
    void SetAlive (bool bIsAlive) {m_bIsAlive = bIsAlive;}
    SDL_Rect GetRect () {return m_Rect;}

  private:
    CSprite *m_pSpriteSatellit;         // Zeiger auf Asteroiden-Sprite

    float    m_fXPos_Satellit;          // X-Position des Asteroiden

    float    m_fYPos_Satellit;          // Y-Position des Asteroiden

    float    m_fAnimPhase_Satellit;     // Akt. Animationsphase des Asteroiden

    bool     m_bIsAlive;       // "Lebt" der Asteroid noch?

    SDL_Rect m_Rect;                    // Rect des Satelliten


};

#endif


braucht ihr noch mehr? [/code]

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

6

09.02.2010, 15:23

hat dein satellit überhaupt animationsphasen?
wenn nicht würd ich dir empfehlen nochmal gründlich zu lesen :D
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

Jawaiica

Treue Seele

  • »Jawaiica« ist der Autor dieses Themas

Beiträge: 134

Wohnort: Hannover

Beruf: Student

  • Private Nachricht senden

7

09.02.2010, 15:35

doch klar xD ganz vergessen sorry =( hier sind die anderen änderungen:

Game.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
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#ifndef GAME_HPP
#define GAME_HPP

#include "Player.hpp"
#include "Asteroid.hpp"
#include "Satellit.hpp"

class CGame
{
  public:
    CGame ();

    void Init ();
    void Run  ();
    void Quit ();

  private:
    void ProcessEvents   ();
    void SpawnAsteroids  ();
    void SpawnSatellit   ();
    void RenderAsteroids ();
    void RenderSatellit  ();
    void CheckCollisions  ();
    void CheckCollisions_Satellit();

    CPlayer *m_pPlayer;             // Spieler-Instanz

    CSprite *m_pSpriteBackground;   // Sprite für den Hintergrund

    CSprite *m_pSpriteAsteroid;     // Sprite für die Asteroiden

    CSprite *m_pSpriteSatellit;     // Sprite für die Satelliten

    float    m_fAsteroidTimer;      // Zeitgeber für nächsten Asteroiden

    float    m_fSatellitTimer;      // Zeitgeber für nächsten Satelliten

    bool     m_bGameRun;            // Läuft das Spiel noch?

    list<CAsteroid> m_AsteroidList; // Liste der Asteroiden

    list<CSatellit> m_SatellitList; // Liste der Satelliten


};

#endif


Game.cpp -> Run funktion

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 CGame::Run ()
{
  // Hauptschleife des Spiels durchlaufen

  //

  while (m_bGameRun == true)
  {
    // Events bearbeiten

    ProcessEvents ();

    // Framework updaten und Buffer löschen

    g_pFramework->Update ();
    g_pFramework->Clear ();

    // Hintergrundbild rendern

    m_pSpriteBackground->Render ();

    // Spieler updaten und rendern

    m_pPlayer->Update ();
    m_pPlayer->Render ();

    // Neue Asteroiden hinzufügen

    SpawnAsteroids ();
    SpawnSatellit  ();

    // Kollisionen prüfen

    CheckCollisions ();

    // Asteroiden rendern

    RenderAsteroids ();
    RenderSatellit  ();

    // Buffer flippen

    g_pFramework->Flip ();

  }

} // Run


Satelliten spawn:

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
void CGame::SpawnSatellit ()
{
  // Timer für nächsten Asteroiden erhöhen

  m_fSatellitTimer += g_pTimer->GetElapsed ();

  // Wenn eine halbe Sekunde vergangen ist,

  // dann einen neuen Asteroiden erzeugen

  if (m_fSatellitTimer >= 1.0f)
  {
    // Neuer Asteroid

    CSatellit Satellit;

    // Zufällige X-Position

    int XPos_Satellit = rand()%736;

    // Asteroid initialisieren

    Satellit.Init (m_pSpriteSatellit, static_cast<float>(XPos_Satellit), -60.0f);

    // Asteroid in Liste einfügen

    m_SatellitList.push_back (Satellit);

    // Zeitgeber wieder zurücksetzen

    m_fSatellitTimer = 0.0f;

  }

} // SpawnAsteroids



Rendern der Satelliten:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void CGame::RenderSatellit ()
{
  // Iterator für die Asteroiden-Liste

  list<CSatellit>::iterator It;

  // Asteroiden-Liste durchlaufen

  for (It = m_SatellitList.begin (); It != m_SatellitList.end (); ++It)
  {
    // Asteroid rendern

    It->Render ();

    // Asteroid updaten

    It->Update ();

  }

} // RenderSatellit



Init game.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
void CGame::Init ()
{
  // Neuen Spieler initialisieren

  m_pPlayer = new CPlayer;
  m_pPlayer->Init ();
  m_pPlayer->Reset ();

  // Hintergrundbild (Sprite) laden

  m_pSpriteBackground = new CSprite;
  m_pSpriteBackground->Load ("Data/Background.bmp");

  // Sprite für Asteroiden laden

  m_pSpriteAsteroid = new CSprite;
  m_pSpriteAsteroid->Load ("Data/Asteroid.bmp", 20, 64, 64);
  m_pSpriteAsteroid->SetColorKey (255, 0, 255);

  // Timer für Asteroiden zurücksetzen

  m_fAsteroidTimer = 0.0f;


  // Sprite für Satelliten laden

  m_pSpriteSatellit = new CSprite;
  m_pSpriteSatellit->Load ("Data/Satellit.bmp", 1, 64, 64);
  m_pSpriteSatellit->SetColorKey (255,0,255);

  //Timer für Asteroiden zurücksetzen

  m_fSatellitTimer = 0.0f;

  // Spiel läuft

  m_bGameRun = true;

} // Init



mehr hab ich nicht geändert...

Hier noch die Satellit.bmp:


(Link)

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

8

09.02.2010, 15:55

Zitat von »"NachoMan"«

wenn nicht würd ich dir empfehlen nochmal gründlich zu lesen :D
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

Jawaiica

Treue Seele

  • »Jawaiica« ist der Autor dieses Themas

Beiträge: 134

Wohnort: Hannover

Beruf: Student

  • Private Nachricht senden

9

09.02.2010, 16:13

hab ich echt die animationsphasen vergessen?!

KeksX

Community-Fossil

Beiträge: 2 107

Beruf: Game Designer

  • Private Nachricht senden

10

09.02.2010, 16:39

Zitat von »"Jawaiica"«

hab ich echt die animationsphasen vergessen?!


Im Code nicht, aber woanders! :].

Werbeanzeige