Realistische Ball Bewegung



  • Jo, das wäre mal was, müsste aber schon 3D sein.
    Ich denke, sein Diagramm zeigt die Situation von oben gesehen. Wo der Ball abprallt, sind die Schläger der Spieler.
    Der Ball sollte hier eigentlich keinen Geschwindigkeitsverlust erfahren, da er sonst immer langsamer wird und man kann erstmal ne Tasse Kaffee trinken gehen, bevor er einmal das Spielfeld durchquert hat 😃
    Ich denke, dass so eine lineare Bewegung für Pong doch das beste ist.



  • Ok - dann lassen wir den Speedverlust beim Aufprall weg - dann gehts auch mit Gravity ohne Speedverlust

    Cool währe auch ein bekiffter Ball, der macht, was er lustig ist 😃



  • klar und nach 4 mal hin und her hüpft er dir raus ausm spiel 😃



  • mich irritiert ein bissl dieses 0=0 !!!
    vielleicht soll das bedeuten, das der ball sozusagen am paddle etwas kleben bleibt oder so ähnlich...
    vielleicht meint er auch den winkel....
    hmmmmmmmmmmmmmmmmm
    ein rätsel
    Gruß
    E-the-Real



  • Oder er meint, daß Anschneiden, wie man es bei Breakout´s gewöhnt ist? Daß man den Ball noch etwas mitnimmt.



  • Hallo,
    ist ja nett das ihr euch so viele Gedanke num mich macht, aber ich hab eigentlich eher so was in der Richtung gemeint:
    http://www.onlinespiele.org/pang/index.php3?fromauswahl=1
    Der Code oben sollte eigentlich nur die Flugbahn des Balls verdeutlichen und
    nicht iregendetwas anderes(wie man vielleicht fälschlicherweise meinen könnte) 😃 .
    Gruß,
    Julian



  • gelöscht



  • Das Spiel geht bei mir nicht, aber ich glaube du meinst so eine Flugbahn?
    .-°-..-°-..-°-..-°-._

    (von der Seite gesehen, die = sind der Boden)

    Vielleicht so etwas:

    [...]
    ball.y_speed += grav;
    ball.y_pos += ball.y_speed;
    if (ball.ist_am_boden) ball.y_speed *= -1; //y-geschwindigkeit 'vertauschen', so dass der Ball hochhüpft
    [...]
    


  • Hm.. was ist unrealistisch da...
    Wenn eine perfekt runde Kugel über eine perfekt glatte platte mit perfekt graden und 90° abstehenden banden da ist dann ist die Kugelbewegung doch wie bei Pong oder seh ich das falsch?
    Nur beim abprallen vom Schläger wenn er sich zu der Zeit bewegt könnte man sich streiten 😃

    Son permanentes Küpfen hat man doch nur wenn man mit nem Flummi Pong spielt 😛



  • Ich glaube, er will den Ball in die Luft werfen und ihn nicht auf dem Boden rumrollen lassen.
    Also kein Billiard sondern eher Golf...



  • Hallo,
    Müzbieger hatte recht. Das habe ich gemeint. Ich versuch mal das irgendwie einzubauen. Danke.
    Julian



  • @jube
    meintest du sowas in der Art?

    void bewegpunkt(int x, int y, double winkel, int kraft, int fall, int wind)
    {
       int hkraft=kraft, vkraft=kraft;
       int h, v;
    
       while(x<getmaxx()&&y<getmaxy())
       {
          if(x>0&&y>0)
             putpixel(x, y, WHITE);
          vkraft+=fall;
          h=hkraft*(1-winkel);
          v=vkraft*winkel;
          x+=h+wind;
          y-=v;
       }
    }
    

    Beispiel zum Aufruf:

    bewegkugel(50, 300, 0.5, 20, -1, 0);
    


  • Hallo,
    deine Lösung ist etwas zu aufwändig für meine Anforderungen, aber trotzdem danke. Ich meine eigentlich einfach nur, dass der Ball sich so bewegt wie Münzbieger beschrieben hat. Er soll nicht aufhörensich zu bewegen, bis man ihn
    halt abschießt oder er dem Spieler Energei abzieht. Meine "Lösung" schaut bis jetzt so aus:

    Baelle[a].vy += grav; // sind alles double Werte; grav hat wert o.1
    Baelle[a].x += Baelle[a];// Array aller Bälle
    Baelle[a].y += Baelle[a].vy;
    if(Baelle[a].y < 100)//  Grenze oben auf y-Achse wo der Ball umkehren soll
    {
    	Baelle[a].y = 100;
    	Baelle[a].vy = 5;	//Geschwindigkeit wird neu gesetzt		
             grav = 0.1;
    }
    else if(Baelle[a].y > 600)// Grenze unten auf y-Achse wo der Ball umkehren soll
    {
    	Baelle[a].y = 600;
    	Baelle[a].vy = -5;//Geschwindigkeit wird neu gesetzt
             grav = -0.1;
    }
    if(Baelle[a].x > 846)
    {
    	Baelle[a].x = 846;
    	Baelle[a].vx = -(Baelle[a].vx);
    }
    else if(Baelle[a].x < -78)
    {
             Baelle[a].x = -78;
    	Baelle[a].vx = -(Baelle[a].vx);
    }
    

    Die Funktion lässt zwar den Ball bogenförmig springen, aber er springt nicht hoch genug(nicht bis zur 100 Grenze). Habt ihr vielleicht Optimierungsvorschläge?
    jube



  • das nach "Grenze unten auf y-Achse wo der Ball umkehren soll" würde ich ändern

    Baelle[a].y = 600; 
        Baelle[a].vy = -5; //so springt er immer mit der gleichen Geschwindigkeit ab
        grav = -0.1;  //die Schwerkraft ist konstant und darf sich deshalb auch nicht ändern
    

    Vorschlag:

    Baelle[a].y = 600;
    Baelle[a].vy *= -1; //2.5 * -1 = -2.5 | Geschwindigkeit umdrehen
    

    Für die "Spielfeldgrenzen" (Baelle[a].x > 846) würde ich Variablen/Konstanten nehmen, da sich das leichter ändern lässt, wenn zB das Spielfeld durch eine nachträglich eingebaute Highscore-Tabelle kleiner wird.

    ps:
    "Baelle[a].x += Baelle[a];// Array aller Bälle"
    verstehe ich nicht...



  • Sollte eigetnlich heißen:

    Baelle[a].x+= Baelle[a].vx;
    

    1. grav ist vielleicht der falsche Begriff, man könnte ihn auch mit
    vereinfachte "Beschleunigungsvariable" in dem Fall, wenn der Ball wieder
    fällt und mit Gravitation in dem anderen Fall bezeichnen(kurz gesagt:
    der Ball soll beim einen mal beim abspringen vom Boden langsamer werden
    und danach beim Fall schneller).
    2. Die Geschwindigkeit setze ich ja bei jeder y-Kollision wieder auf 5, weil
    der Ball sich sonst irgendwann gar nicht mehr bewegen würde.

    Mein Problem ist halt nur, dass der Ball nicht die gewünschte Höhe erreicht( IMHO nach, weil er gar nicht erst zu der Stelle kommt an der oben abprallen, soll da grav vy irgendwann davor schon in den negativen Bereich gebracht hat und somit der Ball wieder fällt). Gibt es vielleicht noch eine andere Lösung?
    Julian



  • Naja, unter einem Pong-CLONE versteh' ich was anderes... 😕



  • Und auch physikalisch gesehen ist es Humbug. ( "Geschwindigkeit wird neu gesetzt" <= LOL )


Anmelden zum Antworten