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

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

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

  • Private Nachricht senden

11

31.12.2012, 14:09

Warst du nie übermütig und hast mal was übersprungen?

Falls ich das getan habe, dann habe ich selbst gemerkt, dass es ein Fehler war.

Es wirkt halt so als würde er denken "Ich brauch ja nicht selbst lernen wenn die Frage sowieso im Forum beantwortet wird.".
"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?

Bu1

Frischling

Beiträge: 66

Beruf: Schüler

  • Private Nachricht senden

12

31.12.2012, 15:23

Es wirkt halt so als würde er denken "Ich brauch ja nicht selbst lernen wenn die Frage sowieso im Forum beantwortet wird.".

Wie TrommlBomml schon gesagt hat:

Zitat von »NachoMan«



Kommst du vielleicht aus Japan und liest das Buch ausversehen von Hinten nach Vorn?
Du weißt, dass unter anderem wegen solchen Aussagen unser Forum gern als unfreundlich und herablass...


Naja wenn man gerade erst mit Programmieren anfängt kann man durchaus etwas mal falsch verstehen oder vergessen. Auch wenn man das entsprechende Kapitel gelesen hat.
Zeig bitte mal die gesamte Funktion. Dann soltle sich der Fehler relativ leicht beheben lassen.
Das sollte für uns reichen um dir zu helfen.

Zitat

Sämtliche Rechtschreibfehler in diesem Beitrag sind nicht urheberrechtlich geschützt :!:
Sie können nach belieben kopiert und weiterverwändet werden. :P

13

31.12.2012, 16:12

Hier der funktionsaufruf im 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
void CGame::Init ()
{
  // Neuen Spieler initialisieren
  m_pPlayer = new CPlayer;
  m_pPlayer->Init (float fXPos, float fYPos);
  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;

  // Spiel läuft
  m_bGameRun = true;

} // Init

hier auszug aus der datei player.hpp

C-/C++-Quelltext

1
2
3
4
5
6
class CPlayer
{
  public:
    CPlayer     ();

    void Init   (float fXPos, float fYPos);

und hier die funktion in player.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
void CPlayer::Init (float fXPos, float fYPos)
{
 

  // Spielersprite erstellen
  m_pSpritePlayer = new CSprite;
  m_pSpritePlayer->Load ("Data/Player.bmp", 11, 64,64);
  m_pSpritePlayer->SetColorKey (255, 0, 255);
  // Schuss-Sprite erstellen
 
  
  m_pSpriteShot1 = new CSprite;
  m_pSpriteShot1->Load ("Data/Rocket.bmp", 0, 33, 45);
  m_pSpriteShot1->SetColorKey (255, 0, 255);
  
  
  m_pSpriteShot2 = new CSprite;
  m_pSpriteShot2->Load ("Data/Laser.bmp", 0, 64, 64);
  m_pSpriteShot2->SetColorKey (255, 0, 255);
  
  m_fXPos = fXPos;
  m_fYPos = fYPos;
 
  m_Rect.x = static_cast<int>(fXPos);
  m_Rect.y = static_cast<int>(fYPos);
  } // Init

Und natürlich wünsch ich euch allen einen guten Rutsch ins neue Jahr

(Link)

PS: 1. Ich habe das ganze buch von vorne bis hinten durchgelesen
2. Ich habe mir Stunden lang andere Bücher und Intenetseiten durchgelesen und nichts brauchbares gefunden

14

31.12.2012, 16:24

Es wirkt halt so als würde er denken "Ich brauch ja nicht selbst lernen wenn die Frage sowieso im Forum beantwortet wird.".

Man braucht nie irgendwas zu fragen, weil alles irgendwo in Büchern steht, aber mit Fragen geht es nunmal schneller und man versteht mehr. Auf mich machte es nicht den Eindruck einer unverschämten Frage, sondern eher den Eindruck einer Anfängerfrage (an die sich dieses Forum nunmal richtet).

Zur Frage: In der CGame::Init, woher sollen da die Werte für fXPos und fYPos kommen? Du scheinst die Variable nie angelegt zu haben. Möglich wäre sowas:

C-/C++-Quelltext

1
2
3
4
5
6
7
void CGame::Init ()
{
  // Neuen Spieler initialisieren
  m_pPlayer = new CPlayer;
  m_pPlayer->Init (50.0f, 43.0f);
  m_pPlayer->Reset ();
  ...


Oder sowas:

C-/C++-Quelltext

1
2
3
4
5
6
7
void CGame::Init (float PlayerStartX, float PlayerStartY)
{
  // Neuen Spieler initialisieren
  m_pPlayer = new CPlayer;
  m_pPlayer->Init (PlayerStartX, PlayerStartY);
  m_pPlayer->Reset ();
  ...


Oder auch:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
void CGame::Init ()
{
  // Neuen Spieler initialisieren
  m_pPlayer = new CPlayer;
  float StartX=50.0f, StartY=43.0f;
  m_pPlayer->Init (StartX, StartY);
  m_pPlayer->Reset ();
  ...
Lieber dumm fragen, als dumm bleiben!

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

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

  • Private Nachricht senden

15

31.12.2012, 16:28

Naja wenn man gerade erst mit Programmieren anfängt kann man durchaus etwas mal falsch verstehen oder vergessen. Auch wenn man das entsprechende Kapitel gelesen hat.

Aber nicht wenn man die Kapitel durchgearbeitet hat.

Naja, ich hab wohl etwas überreagiert.

@Fanto: Geh nochmal das ganze Buch durch und schreibe zu jedem Thema mindestens eine Übungsprogramm. Dann dürften solche Probleme nicht mehr auftreten.
"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?

Horni

Frischling

Beiträge: 21

Beruf: Student MB

  • Private Nachricht senden

16

02.01.2013, 20:05

der Compiler fragt wo fXPos und fYPos überhaupt deklariert sein sollen.
Er weiß weder was das für Variablen sind, noch welche Werte drin stehen
sollen. Du kannst ja nicht Variablen verwenden, die nirgends angelegt
(deklariert) wurden, und vor allem: die nirgends definiert wurden. Das
heißt sie haben an keiner Stelle Werte zugewiesen bekommen. Also kann
der Compiler sie nicht verwenden. Diese einfachste aller Grundlagen
müsste ganz am Anfang des Buches stehen. Du hast übrigens in deiner
letzter Version des Codes versucht, die Variablen im Funktionsaufruf zu
deklarieren, was nicht zulässig ist. Sie müssen vorher bekannt sein. Und
damit dein Programm auch was sinnvolles tut musst du den Variablen auch
vorher Werte zuweisen. Nur mit diesen Werten macht ja der
Funktionsaufruf überhaupt erst Sinn, weil die Funktion diese Werte
benötigt.

xXSlayerXx

Treue Seele

Beiträge: 111

Beruf: Technischer Produktdesigner

  • Private Nachricht senden

17

03.01.2013, 12:51

zu deinem fehler und weg vo der streiterei:

Durch den aufruf: player->init ( ypos, xpos) über gibts du der Funktion Init der Klasse player 2 Variablen.
Und zwar einmal die Variable xPos und einmal yPos.

Doch diese zwei Variablen hast du nicht deklariert. Das bedeutet, dass sie für den Vompiler nicht excestieren.
Du musst also anstatt diese zwei Variablen die richtige Position auf dem bildschirm angeben.

Zum beschpiel schreibst du: player->init (100,100)

dan sollte der Spieler bei Spielstart auf der Position 100, 100 starten.


[wenn etwas falsch Formatiert ist tut es mir leid. Sitze gerade in der Mittagspause und schreibe vom Handy]
Bestes Zitat aus einem Quellcode :D

C-/C++-Quelltext

1
2
3
4
5
6
7
8
/** 
Once you are done trying to ‘optimize’ this routine, 
and have realized what a terrible mistake that was, 
please increment the following counter as a warning 
to the next guy: 

total_hours_wasted_here = 11 
*/

Werbeanzeige