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

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

11

15.08.2013, 16:46

In dem Fall würde ich auch eine Physik-Engine empfehlen.

FreezingEngine

Treue Seele

  • »FreezingEngine« ist der Autor dieses Themas

Beiträge: 280

Wohnort: NRW

Beruf: Schüler

  • Private Nachricht senden

12

17.08.2013, 05:47

Also ich hab mir mal trozdem den gewünschten Effekt gecodet auch ohne
Phsyik-Engine, allerdings hat die Reaktion auch wenig mit Physik zutun aber es
genügt meinen Ansprüchen^^

Also falls es jemanden intressiert hier mal der Code:

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
void EntityCollisionHelper::Rebound(Entity *entityOne,Entity *entityTwo)
{
    
    float mCalculatedEndSpeed = 0;

    if( static_cast<Spaceship*>(entityOne)->GetCurrentSpeed() >  static_cast<Spaceship*>(entityTwo)->GetCurrentSpeed())
    {
        mCalculatedEndSpeed = static_cast<Spaceship*>(entityOne)->GetCurrentSpeed();

        if(static_cast<Spaceship*>(entityOne)->GetCurrentSpeed() > 0)
        {
            static_cast<Spaceship*>(entityOne)->SetCurrentSpeed(mCalculatedEndSpeed);
            static_cast<Spaceship*>(entityTwo)->SetCurrentSpeed(-mCalculatedEndSpeed-1);
        }
        else
        {
            static_cast<Spaceship*>(entityOne)->SetCurrentSpeed(mCalculatedEndSpeed);
            static_cast<Spaceship*>(entityTwo)->SetCurrentSpeed(-mCalculatedEndSpeed-1);
        }

        entityTwo->SetDirection(entityOne->GetDirection());
        entityOne->SetDirection(entityOne->GetDirection());

    }
    else if( static_cast<Spaceship*>(entityTwo)->GetCurrentSpeed() >  static_cast<Spaceship*>(entityOne)->GetCurrentSpeed())
    {
        mCalculatedEndSpeed = static_cast<Spaceship*>(entityTwo)->GetCurrentSpeed();

        if(static_cast<Spaceship*>(entityTwo)->GetCurrentSpeed() > 0)
        {
            static_cast<Spaceship*>(entityTwo)->SetCurrentSpeed(-mCalculatedEndSpeed-1);
            static_cast<Spaceship*>(entityOne)->SetCurrentSpeed(mCalculatedEndSpeed);
        }
        else
        {
            static_cast<Spaceship*>(entityTwo)->SetCurrentSpeed(-mCalculatedEndSpeed-1);
            static_cast<Spaceship*>(entityOne)->SetCurrentSpeed(mCalculatedEndSpeed);
        }

        entityTwo->SetDirection(entityTwo->GetDirection());
        entityOne->SetDirection(entityTwo->GetDirection());
    }

}


Soweit funktioniert es auch, jedenfalls bei vorwärts Bewegungen , rückwärts gibt es noch ein paar Probleme und mnachmal auch bei
der vorwärts Bewegung allerdings selten und willkürlich^^
Falls jemand iwo. einen Punkt im Code sieht den man verbessern/optimieren kann , nur her damit :)

MfG Marcel
"He who sacrifices freedom for security deserves neither."
Benjamin Franklin

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »FreezingEngine« (17.08.2013, 06:13)


Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

13

17.08.2013, 09:23

[...], allerdings hat die Reaktion auch wenig mit Physik zutun [...]

Da muss ich strikt widersprechen, denn immerhin ist von der Physik abhängig, wie sich Objekte bewegen und bei Kollisionen verhalten, auch im Luftleeren Raum und auch außerhalb von Planeten.
Da die Umsetzung deiner eigenen Aussage zufolge noch nicht richtig funktioniert, wäre eine Physik-Engine doch durchaus eine Überlegung wert, oder? ;)
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

FreezingEngine

Treue Seele

  • »FreezingEngine« ist der Autor dieses Themas

Beiträge: 280

Wohnort: NRW

Beruf: Schüler

  • Private Nachricht senden

14

17.08.2013, 19:44

Naja es funktioniert nur hat halt ein paar bugs , also kein Grund gleich
alles wegzuschmei ßen und ne Physik-Engine zu holen :D

Dachte halt nur jemanden intressierts wie ich das jetzt gemacht habe
und hab auf Optimierungstips gehofft^^

MfG Marcel
"He who sacrifices freedom for security deserves neither."
Benjamin Franklin

FreezingEngine

Treue Seele

  • »FreezingEngine« ist der Autor dieses Themas

Beiträge: 280

Wohnort: NRW

Beruf: Schüler

  • Private Nachricht senden

15

18.08.2013, 23:38

Eine andere Frage

Also ich bleib mal mit der Frage hier da es ja indirekt mit dem ersten Thema zutun hat,
undzwar hab ich das Problem das ich nicht weiß wie ich herausfinden kann wo relativ zu einem Objekt(Raumschiff) eine Kollision stattfindet.

Ne Idee wäre das Objekt selbst in 4 Rechtecke aufzuteilen halt vorne ,hinten,rechts,links aber bevor ich es so umständlich
mache wollte ich fragen ob jemand dazu ne andere idee hat^^

MfG Marcel
"He who sacrifices freedom for security deserves neither."
Benjamin Franklin

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

16

18.08.2013, 23:42

Transformiere den Punkt in das lokale Koordinatensystem des Raumschiffs.

Werbeanzeige