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

DerMark

Treue Seele

Beiträge: 324

Wohnort: Emsdetten

Beruf: Softwareentwickler

  • Private Nachricht senden

21

17.01.2011, 17:28

Wenn du debuggst sollte im Ausgabe(Output) Fenster eine genauere Beschreibung des Problems erscheinen wenn du über die besagte Stelle gehst. Kannst du diese mal bitte zeigen?

Ansonsten: Ein Minimalbeispiel versuchen.

Developer_X

Treue Seele

  • »Developer_X« ist der Autor dieses Themas

Beiträge: 247

Wohnort: Hessen

Beruf: Schüler

  • Private Nachricht senden

22

17.01.2011, 17:32

Das da :

Quellcode

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
Building to ensure sources are up-to-date
Build succeeded
Selecting target: 
Debug
Adding source dir: F:\C++ Projekte\Games\Galactica Ball\
Adding source dir: F:\C++ Projekte\Games\Galactica Ball\
Adding file: bin\Debug\Galactica Ball.exe
Starting debugger: 
done
Registered new type: wxString
Registered new type: STL String
Registered new type: STL Vector
Setting breakpoints
Debugger name and version: GNU gdb (GDB) 7.0.50.20100202
At F:\C++ Projekte\Games\Galactica Ball\Game.cpp:55
At F:\C++ Projekte\Games\Galactica Ball\Game.cpp:57
At F:\C++ Projekte\Games\Galactica Ball\Game.cpp:55
At F:\C++ Projekte\Games\Galactica Ball\Game.cpp:60
At F:\C++ Projekte\Games\Galactica Ball\Game.cpp:62
Program received signal SIGTRAP, Trace/breakpoint trap.
In ntdll!DbgUiConvertStateChangeStructure () (C:\Windows\system32\ntdll.dll)
In ntdll!RtlpNtMakeTemporaryKey () (C:\Windows\system32\ntdll.dll)
In ntdll!RtlInitAnsiStringEx () (C:\Windows\system32\ntdll.dll)
In ntdll!EtwpNotificationThread () (C:\Windows\system32\ntdll.dll)
In ntdll!RtlpNtMakeTemporaryKey () (C:\Windows\system32\ntdll.dll)
In ntdll!DbgUiConvertStateChangeStructure () (C:\Windows\system32\ntdll.dll)
In ntdll!RtlpNtMakeTemporaryKey () (C:\Windows\system32\ntdll.dll)
In ntdll!EtwpNotificationThread () (C:\Windows\system32\ntdll.dll)
In ntdll!RtlOwnerAcesPresent () (C:\Windows\system32\ntdll.dll)
In ntdll!RtlpNtMakeTemporaryKey () (C:\Windows\system32\ntdll.dll)

Also es klappt alles, und dann dieses "Inntdll!" .
Ich denke mal das hat nichts mit mir zu tun oder, also mit meinem Code, oder?
- Die Zeit ist wie ein Fluss, und die Gegenwart wie ein Fels, der von dem Fluss der Zeit geschliffen wird. -
Kevin Riehl

DerMark

Treue Seele

Beiträge: 324

Wohnort: Emsdetten

Beruf: Softwareentwickler

  • Private Nachricht senden

23

17.01.2011, 17:41

Und wie siehts mit dem Minimalbeispiel aus?

Der Output sagt leider zu wenig :(

Developer_X

Treue Seele

  • »Developer_X« ist der Autor dieses Themas

Beiträge: 247

Wohnort: Hessen

Beruf: Schüler

  • Private Nachricht senden

24

17.01.2011, 17:48

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
#include <SFML/Graphics.hpp>
#include <windows.h>
#include "ColorScale.hpp"

#define STARS 1000
#define WIDTH 1440
#define HEIGHT 800

using namespace std;

int main()
{
    sf::RenderWindow* App = new sf::RenderWindow(sf::VideoMode(800, 600, 32), "Galactica Ball");

    sf::Image* backgroundImage = new sf::Image(WIDTH,HEIGHT);

    ColorScale gradient;
    gradient.insert(0.0,sf::Color::Black);
    gradient.insert(1.0,sf::Color::Blue);
    gradient.insert(2.0,sf::Color::Red);

    sf::Color* tab = new sf::Color[HEIGHT];
    gradient.fillTab(tab,HEIGHT);

    for(int i=0;i<WIDTH;i++)
        for(int j=0;j<HEIGHT;j++)
            backgroundImage->SetPixel(i,j,tab[j]);

    for(int i = 0;i<STARS;i++)
        backgroundImage->SetPixel(sf::Randomizer::Random(1,WIDTH-2),sf::Randomizer::Random(1,HEIGHT-2),sf::Color::White);

    sf::Sprite* background = new sf::Sprite(*backgroundImage);

    delete[] tab;

        //  Zeichne SternenHimmel
    App->Draw(*background);

    Sleep(10000);
    delete App;
    return 0;
}


Ich hoffe du weißt, dass ich ColorScale von dieser Website nutze:
http://www.sfml-dev.org/wiki/fr/sources/gradient
- Die Zeit ist wie ein Fluss, und die Gegenwart wie ein Fels, der von dem Fluss der Zeit geschliffen wird. -
Kevin Riehl

Fred

Supermoderator

Beiträge: 2 121

Beruf: Softwareentwickler

  • Private Nachricht senden

25

18.01.2011, 01:14

Deine Funktion stürzt nicht an der von dir angebenen Stelle ab.
Wenn ich das Programm bei mir ausführe, erhalte ich eine "Heap Corrupted" Fehlermeldung. Und das liegt an der Größe von tab. Bis zu einer Array-Größe von 500 gibt es keinerlei Probleme. Dann allerdings stürtzt das Programm eben ab, wenn man den tab löschen will.
Allerdings wundert es mich, dass es vorher so gut mitmacht. Ein Array wird erstellt und dann mit einer Funktion gefüllt, wo ich die Größe noch dazu angeben muss...das kann ja nur schief gehen und was dann in dieser Funktion passiert, ist mir auch mehr als unsicher, wie dem Array dort Werte zugewiesen werden.

C-/C++-Quelltext

1
2
sf::Color tab[HEIGHT];
    gradient.fillTab(tab,HEIGHT-1);

Funktioniert dann im Übrigen mit dem gewünschten Ergebnis, aber wie gesagt: sonderlich viel halte ich von dieser Farbverlauf-Klasse nicht. Statt eines Arrays lieber einen std::vector verwenden, dann wäre das ganze deutlich sicherer.

Ach und nebenbei. Eine sinnvolle Minimalanwendung ist das, was du da hast nichts. Es fehlt zumindest noch ein

C-/C++-Quelltext

1
App->Display()
, damit überhaupt irgendetwas angezeigt wird und ein

C-/C++-Quelltext

1
App->Clear()
schadet in der Regel auch nicht.

Developer_X

Treue Seele

  • »Developer_X« ist der Autor dieses Themas

Beiträge: 247

Wohnort: Hessen

Beruf: Schüler

  • Private Nachricht senden

26

18.01.2011, 14:56

Ja, ich habe diese Beispielanwendung schnell zusammengestellt.

Jetzt funktioniert es, und nein, es war nicht meine Idee die ColorScale Klasse so zu nutzen, die haben dort erklärt, dass man den Code so nutzen soll, was ich dann auch gemacht habe, naja danke, danke für deine Hilfe!

M.f.G. Developer_X
- Die Zeit ist wie ein Fluss, und die Gegenwart wie ein Fels, der von dem Fluss der Zeit geschliffen wird. -
Kevin Riehl

Fred

Supermoderator

Beiträge: 2 121

Beruf: Softwareentwickler

  • Private Nachricht senden

27

18.01.2011, 15:13

Ich behaupte auch nicht, dass es eine schlechte Idee von dir war. Ich habe mir den Code dort durchaus angesehen und dieser funktioniert dort auch(oder sagen wir: er lässt sich erfolgreich ausführen). Ich halte nur von der Klasse nicht viel bzw. die Art und Weise wie sie implementiert wurde. Nur weil sie sich im Wiki befindet, muss sie ja nicht gut sein.
Und wenn sich dann eben zeigt, dass die Klasse mit bestimmten Werten funktioniert und mit anderen Werten leider nicht, sollte man sich Gedanken machen, ob man nicht eine sichere Version implementiert, bei der nicht viel schief gehen kann.

Werbeanzeige