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

31

09.04.2010, 15:24

Mit der Kollision von Blöcken hab ich schon längst gelöst, da wird jetzt nicht mehr nur die Geschwindigkeit umgekehr aber Trozdem fliegt er machmal durch eine Block durck Xp


unterscheidest du zwischen kollisionen an der x oder y achse?
der ball fliegt wahrscheinlich wegen kleinen freezes(lange frametime) durch die blöcke. das behebt man indem man den ball in kleineren schritten fortbewegt und bei jedem schritt auf kollision prüft.

Zum Schläger, ja je mittige desto schneller fliegt er mir is nichts anders eigefallen wie es sonst berechnen könnte...


dafür gibt es sinusfunktionen. damit kannst du winkel in richtungsvektoren umrechnen.
ein richtungsvektor hat immer die länge 1. den vektor multiplizierst du mit der geschwindigkeit und erhälst den bewegungsvektor.
"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?

CrazyPlayer

Treue Seele

  • »CrazyPlayer« ist der Autor dieses Themas

Beiträge: 109

Wohnort: Mittenwald [Garmischpartenkirchen]

Beruf: Schüler

  • Private Nachricht senden

32

09.04.2010, 15:52

Mit der Kollision von Blöcken hab ich schon längst gelöst, da wird jetzt nicht mehr nur die Geschwindigkeit umgekehr aber Trozdem fliegt er machmal durch eine Block durck Xp


unterscheidest du zwischen kollisionen an der x oder y achse?
der ball fliegt wahrscheinlich wegen kleinen freezes(lange frametime) durch die blöcke. das behebt man indem man den ball in kleineren schritten fortbewegt und bei jedem schritt auf kollision prüft.

also die funktion sieht so aus

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
void CBall::CheckBlockCollisions()
{
    int left_x   = location.x;
    int left_y   = location.y + location.h / 2;
    int right_x  = location.x + location.w;
    int right_y  = location.y + location.h / 2;
    int top_x    = location.x + location.w / 2;
    int top_y    = location.y;
    int bottom_x = location.x + location.w / 2;
    int bottom_y = location.y + location.h;

    for(int block=0; block<g_NumBlocks; block++)
    {
        if(CheckPointInRect(top_x, top_y, g_Block[block].location))
        {
            HandleBlockCollision(block);
            yVel = -yVel;
        }

        if(CheckPointInRect(bottom_x, bottom_y, g_Block[block].location))
        {
            HandleBlockCollision(block);
            yVel = -yVel;
        }

        if(CheckPointInRect(left_x, left_y, g_Block[block].location))
        {
            HandleBlockCollision(block);
            xVel = -xVel;
        }

        if(CheckPointInRect(right_x, right_y, g_Block[block].location))
        {
            HandleBlockCollision(block);
            xVel = -xVel;
        }
    }

}
Every day is a programming day ;)

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

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

  • Private Nachricht senden

33

09.04.2010, 16:13

du kannst das ganze optimieren. deine blöcke sind ja in einem quadrat aufgeteilt.
wenn du es jetzt so machst wie mit dem mausklick beim editor hast du eine performancesteigerung von mindestens 1000% xD
ausserdem ist es einfacher.
"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?

CrazyPlayer

Treue Seele

  • »CrazyPlayer« ist der Autor dieses Themas

Beiträge: 109

Wohnort: Mittenwald [Garmischpartenkirchen]

Beruf: Schüler

  • Private Nachricht senden

34

09.04.2010, 16:28

ich hab ja blos mit dem Editor noch nicht angefangen :lol:
EDIT: Ich hab ja die CheckPointInRect Funktion vergessen zu schreiben... hier

C-/C++-Quelltext

1
2
3
4
5
6
7
8
bool CBall::CheckPointInRect(int x, int y, SDL_Rect rect)
{
    if((x >= rect.x) && (x <= rect.x + rect.w) &&
       (y >= rect.y) && (y <= rect.y + rect.h))
       return true;

    return false;
}


PS: 100. Beitrag ;)
Every day is a programming day ;)

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »CrazyPlayer« (09.04.2010, 16:40)


NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

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

  • Private Nachricht senden

35

09.04.2010, 17:16

ach du speicherst deine blöcke ja nicht in einem 2d array... das würde das ganze etwas einfacher machen.

naja es sollte auch so funktionieren. einfach bei freezes kleinere schritte machen und überleg dir ob du die sache mit hilfe der trigonometrie umsetzt. ich bin mir sicher das wirst du spätestens beim nächsten oder übernächsten projekt sowieso brauchen und es ist flexibler.

warum limitierst du eigentlich die fps?
"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?

CrazyPlayer

Treue Seele

  • »CrazyPlayer« ist der Autor dieses Themas

Beiträge: 109

Wohnort: Mittenwald [Garmischpartenkirchen]

Beruf: Schüler

  • Private Nachricht senden

36

09.04.2010, 17:32

Das spiel soll ja nicht zu schnell laufen
Every day is a programming day ;)

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

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

  • Private Nachricht senden

37

09.04.2010, 18:19

das tut es doch nicht wenn du die frametime bei jeder bewegung mit der geschwindigkeit multiplizierst.
"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?

CrazyPlayer

Treue Seele

  • »CrazyPlayer« ist der Autor dieses Themas

Beiträge: 109

Wohnort: Mittenwald [Garmischpartenkirchen]

Beruf: Schüler

  • Private Nachricht senden

38

09.04.2010, 20:17

das tut es doch nicht wenn du die frametime bei jeder bewegung mit der geschwindigkeit multiplizierst.
häää? check ich nicht ganz.....
Every day is a programming day ;)

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

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

  • Private Nachricht senden

39

09.04.2010, 20:25

du misst die zeit des letzten frames in sekunden und multiplizierst die bewegung mit der zeit.

das sieht dann etwa so aus:

Position += richtungsvektor*geschwindigkeit*frametime;

so kannst du 800 fps haben und das spiel läuft immer gleich schnell.
ich bin anfangs davon ausgegangen das du es schon so oder so ähnlich tust...
"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?

CrazyPlayer

Treue Seele

  • »CrazyPlayer« ist der Autor dieses Themas

Beiträge: 109

Wohnort: Mittenwald [Garmischpartenkirchen]

Beruf: Schüler

  • Private Nachricht senden

40

09.04.2010, 20:38

Also meinst du es so z.b. ?

Quellcode

1
location.x += xVel * FPS.get_ticks();


weil dort wird der Ball imemr schneller....
Every day is a programming day ;)

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »CrazyPlayer« (09.04.2010, 21:22)


Werbeanzeige