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

01.03.2010, 18:46

SDL + Text auf Konsole

Hi,
Situation:
Ich bin dabei ein Spiel zu programmieren, aber es läuft nicht. :?
Nun wollte ich, um den Fehler einzugrenzen, verschiedene Prüfziffern einfach per 'cout' in der nebenherlaufenden Console ausgeben. Allerdings gibt er keine Ziffern aus.

Also meine Frage.
Ist es überhaupt möglich, was auf der Console auszugeben wenn SDL schon initialisiert ist?

Gruß,
Cmd. Rex

Databyte

Alter Hase

Beiträge: 1 040

Wohnort: Na zu Hause

Beruf: Student (KIT)

  • Private Nachricht senden

2

01.03.2010, 18:48

Job das geht...

Es kann aber sein, dass er nie zu diesen Stellen kommt :)

3

01.03.2010, 18:52

danke für die antwort

genau das wollt ich halt wissen, nicht das ich jetzt ganz an der falschen stelle suche, weil er die erste ziffer nicht ausgibt und sich am ende rausstellt das das garnicht geht ;D

dann werd ich mich mal an die fehlersuche machen ^^

gruß
cmd. rex

4

01.03.2010, 20:32

Also ich konnte den Fehler mittlerweile auf einen kleinen teil beschränken:

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
void CGame::SpawnBalls()
{

    m_fBallTimer += g_pTimer->GetElapsed();

    if(m_fBallTimer >= 0.5f)
    {
        //zufällige Koordinaten

        int XPos = rand()%750;
        int YPos = rand()%550;

        //Kugel Initialisieren

        Ball.Init(m_pSpriteBall, static_cast<float>(XPos), static_cast<float>(YPos));

        //Kugel in die Liste einfügen

        m_BallList.push_back(Ball);

        //Timer wieder zurücksetzen

        m_fBallTimer = 0.0f;
    }

}//Ende SpawnBalls


void CGame::RenderBalls()
{
    Ball.Render();

}//Ende RenderBalls





In diesem zustand läuft er garnicht, und gibt kurz nachdem SDL initialisiert worden ist folgenden Text auf debugger console aus

Zitat


process returned -11 (0xFFFFFFF5) execution time: 0.741 s
Press any key to continue



hinweis:
-11 habe nicht ich selbst programmiert sondern kommt vom Compiler

Das merkwürdige ist wenn ich


C-/C++-Quelltext

1
if(m_fBallTimer >= 0.5f)

in

C-/C++-Quelltext

1
if(m_fBallTimer != 0.5f)


umwandel, geht es ohne probleme.

Falls ihr nochmehr Informationen braucht sagt bescheid, aber ich wollt jetzt nicht den kompletten quelltext posten.

PS:
Auch bei den Operatoren '==' , ' <=' , '<' und '>' läufts nicht.

nochmal PS:
Der ursprüngliche Code stammt vom AsteroidSpawn() aus dem Asteroids Spiel aus dem Buch c++ für Spieleprogrammierer, nur ein wenig verändert also an mein spiel angepasst.



gruß
cmd. Rex

Databyte

Alter Hase

Beiträge: 1 040

Wohnort: Na zu Hause

Beruf: Student (KIT)

  • Private Nachricht senden

5

02.03.2010, 07:15

Versuch mal mit nem Debugger die Variable m_fBallTimer zu untersuchen....
auf anhieb würd ich sagen, dass du vergessen hast, sie von anfang an auf 0 zu setzten...

Und dass es mit != funktioniert ist irgendwie klar ;)

6

03.03.2010, 17:56

Hi,
Nein daran lags leider nicht :(

gruß
Cmd Rex

idontknow

unregistriert

7

03.03.2010, 18:24

Schonmal gekuckt ob der Rückgabewert von g_pTimer->GetElapsed() in Ordnung ist?

8

03.03.2010, 21:10

wie überprüf ich das denn am besten?

EDIT:
Okay ich glaub ich hab den fehler. :idea: :idea:
Es liegt nich am spawn sondern am rendern. Da ich erstmal vereinfacht habe:

C-/C++-Quelltext

1
Ball.Render(0.0f)


Also versucht er (so vermute ich) im ersten durchlauf (wenn der timer zb. 0.2 oder so ist) zu rendern obwohl er garnichts initiallisiert hat. Dabei ensteht der Fehler. Kann das angehen?

gekommen bin ich darauf, als ich feste werte als timer eingeben habe lief es (logischer weise) bei 0.5f und 0.6f. Als ich jedoch 0.2f angegeben habe kam genau der gleiche fehler.


ich hoffe wenn ich die renderklasse geschrieben habe läufts, ansonsten meld ich mich wieder ^^
danke für eure hilfe

gruß
Cmd. Rex

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

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

  • Private Nachricht senden

9

03.03.2010, 22:37

ach dein problem ist, dass du nicht die list sondern "Ball" benutzt. du initialisierst den gleichen ball erst zu spät und dann immer wieder neu. anstatt die bälle in der liste zu rendern.
"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?

10

04.03.2010, 19:15

Also das war schon mal das Problem mit dem Fehlercode,
allerding hat idontknow wohl auch recht. Irgendwas stimmt mit dem Timer Wert nicht. Allerdings versteh ich nicht so richtig was damit sein kann, denn an der Timer Datei hab ich garnichts verändert. :?:

Ist da irgendwas drin was ich ändern muss wenn ichs für ein anderes Spiel nutzen will? wie kann ich den rückgabewert von g_pTimer->GetEllapsed() am besten überprüfen?

gruß
Cmd. Rex

Werbeanzeige