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

04.11.2012, 22:08

Unterschiede beim Starten vom Programm zwischen normal und über VS

Hallo!
Ich habe ein kleines Partikelsystem geschrieben und stehe nun vor dem Problem, dass alles funktioniert, wenn es über (F5) in VS gestartet wird.
Starte ich es nun aber normal über'n Explorer bleiben alle Partikel stehen. Debuggen ist da natürlich nicht hilfreich.
Nun interessiert mich was so unterschiedlich in der Weise des Startens ist, vielleicht kann ich es ja auf eigene Faust lösen. Zur Not frage ich nochmal hier nach. ^^
Also mich interessiert ziemlich welche Unterschiede dort beim Starten bestehen.
Danke

MfG
Check

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

2

04.11.2012, 22:14

Da wirst du irgendwo etwas machen, was undefiniert ist.

Das einzige, was "regulär" anders ist, sind die Suchpfade, was dazu führen kann, dass dein Programm in VS startet, aber aus dem Exporer nicht, weil er gewisse DLLs nicht findet. Wenn dein Programm aber mal gestartet ist sollte sich alles gleich verhalten.

Such mal nach uninitialisierten Variablen, Benutzung von 0-Zeigern, Zugriff ausserhalb von Array Grenzen etc. Das sind so Sachen, die schnell mal passieren und in VS nicht immer anschlagen.

Probier auch mal das mit VS im Release zu starten. Da geht dein Programm möglicherweise auch nicht (was wieder ein Hinweis auf undefiniertes Verhalten wäre).

3

04.11.2012, 22:50

Oooookaaaayyy....
Nun bewegen sie sich extrem langsam stark stockend, wenn ich es normal starte... o.ö
Eigentlich kann ich den Ganzen Rotz ja hierauf eingrenzen:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
if(isRun){
if(m_lifeTime>-1)
     if(m_curLifeTime.getElapsedTime().asMilliseconds() > m_lifeTime){
         m_life = false; return;}

sf::Vector2f mouse = r.convertCoords(sf::Mouse::getPosition(r), r.getView());
double vx = mouse.x - m_pos.x;
double vy = mouse.y - m_pos.y;

m_way = sf::Vector2f(static_cast<float>(vx / std::sqrt(std::pow(vx, 2.) + std::pow(vy, 2.))), static_cast<float>(vy / std::sqrt(std::pow(vx, 2.) + std::pow(vy, 2.))));

if(sf::Mouse::isButtonPressed(sf::Mouse::Right))
{
    m_pos.x -= m_way.x * frametime;
    m_pos.y -= m_way.y * frametime;
}
else
{
    m_pos.x += m_way.x * frametime;
    m_pos.y += m_way.y * frametime;
}}

Das bedeutet, dass die Variablen m_pos, m_way und frametime am ehesten in Frage kommen.
m_pos und m_way werden in der Initialisierungsliste vom Konstruktor feucht fröhlich initialisiert.
frametime ist eine Variable, die ich aus Gründen der Gleichmäßigkeit zwischenzeitlich in der Update-Funktion vom Emitter, dem Partikelmanager, erstelle und mit m_FrameTime.getElapsedTime().asMilliseconds() initialisiere. r ist vom Typ sf::RenderWindow und eine Referenz.
Ich bin wirklich verwirrt, kann es selbst durch Variablen und Zeiger auftreten, die selbst gar nichts mit zu tun haben?

MfG
Check

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Checkmateing« (04.11.2012, 23:07)


drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

4

04.11.2012, 23:15

Was ich noch vergessen habe: VS und Explorer können unterschiedliche Geschwindigkeiten haben. Hatte das selbst mal. Liegt wahrscheinlich an zusätzlichem Debug Zeugs.

Aber zu deinem Code:
Was bringt dich dazu zu vermuten, dass es hier liegen muss?
Ansonsten sehe ich da nur, dass du floating Point Division mit 0 haben kannst. m_way könnte also sehr grosse positive oder negative Werte annehmen.

5

04.11.2012, 23:30

Weil die Teilchen sich ja so vollkommen falsch bewegen.
Danach habe ich auch schon gesehen, also nach der Geschwindigkeit, ich habe einen sehr großen Faktor hinzugefügt, keine Änderung. Genau der gleiche Ablauf wie vorher. O_ö
Ebenso ist dort eigentlich so ziemlich das beheimatet, was ich zuvor änderte. Vor der Änderung gings ja. Ich hab nur keine Ahnung wie ich es sonst lösen soll, ohne die Änderung.
Naja, suchen... ._.

MfG
Check

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

6

05.11.2012, 07:04

Du bist Dir auch sicher, dass du den letzten Build startest und nicht irgendwas älteres? Speziell dann, wenn Du an den Faktoren schraubst, sollte sich ja etwas tun - außer du hast viele Divisionen durch 0 oder andere NAN-Probleme, dann sind vermutlich auch die Faktoren egal.
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]

Schrompf

Alter Hase

Beiträge: 1 470

Wohnort: Dresden

Beruf: Softwareentwickler

  • Private Nachricht senden

7

05.11.2012, 09:52

Evtl. läuft das Programm auch so schnell, dass frametime 0 ist. Nimmst Du dafür Integer oder floats?
Häuptling von Dreamworlds. Baut aktuell an nichts konkretem, weil das Vollzeitangestelltenverhältnis ihn fest im Griff hat. Baut daneben nur noch sehr selten an der Open Asset Import Library mit.

8

05.11.2012, 15:43

Naja, ~350 fps...
BlueCobold: Ja ich bin mir sicher, meist bereinige ich der Vorsicht halber meine Projekte bevor ich kompiliere. ;)
Aber sollte afaik nicht ein Debug-Fehler bei Division durch 0 kommen? Naja, mal if-Bedingungen drumpacken...

MfG
Check

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

9

05.11.2012, 15:55

Ich würde auch mal die Frametime checken; wie genau wird die gemessen? Was steckt da für ein Timer dahinter?

10

05.11.2012, 16:45

Die sf:: Clock wird nachdem alle Aktionen abgeschlossen sind neu gestartet.
Ansonsten einmal getElapsedTime für die sf::Int32 Variable frametime.

MfG
Check

Werbeanzeige