Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi ballbewegung in breakout spiel (https://www.delphipraxis.net/115773-ballbewegung-breakout-spiel.html)

Gandalfus 23. Jun 2008 12:44

Re: ballbewegung in breakout spiel
 
du solltest garkeine festen werte nehmen sondern timebased movement. Also was addiert wird ist von der vergangenen Zeit und einer festgelegten Geschwindigkeit abhängig. Nur die Richtung ist fest. In dem verlinkten Artikel ist das gut beschrieben.

Beispiel:

Delphi-Quellcode:
PosX: double;
PosY: double;

speedX: double;
speedY: double;

newPosX:=speedX * vergangene_Zeit + alte_PosX;
newPosY:=speedY * vergangene_Zeit + alte_PosY;

der Speed Vektor gibt die richtung vor und der Betrag(also länge des Vektor) die Geschwindigkeit .

mimi 23. Jun 2008 22:49

Re: ballbewegung in breakout spiel
 
Ich habe das jetzt bei mir so gelöst:
Delphi-Quellcode:
var
  px,py:Integer;
begin
  if BallMove then begin
    if b_t +1 >=20 then begin
      b_t:=0;

      if Hori = cLeft then
        px:=Ball.Left-p_Hori.x
      else
        px:=Ball.Left+p_Hori.x;

      if Verti = cDown then
        py:=Ball.top+P_Verti.y
      else
        py:=Ball.top-P_Verti.y;

      if Engine.SpriteManger.N_Collision(px,py,ball,false,false) <> NIL then begin
        Hori:=not Hori;
        Verti:=not Verti;
        P_Verti:=Point(0,random(10)+1);
        p_Hori:=Point(random(10)+1,0);
        if Hori = cLeft then
          px:=Ball.Left-p_Hori.x
        else
          px:=Ball.Left+p_Hori.x;

        if Verti = cDown then
          py:=Ball.top+P_Verti.y
        else
          py:=Ball.top-P_Verti.y;
      end;

      ball.Left:=px; ball.Top:=py;
      ball.DrawSprite;
    end
    else
      inc(b_t);
  end;
Dieser Code wird in einem Timer ausgeführt. Darum habe ich eine zeitschleife verwendet.
Das Prinzip klappt eigentlich recht gut. Es sind Integer zahlen. Das reicht. Der ball fliegt jetzt nicht mehr vorhersehbar. Bei allen anderen BreakOut Varianten die ich erstellt habe, flog der ball eigentlich immer vorhersehbar
p_Hori. und p_Verti sind im Moment TPoints, aber ich glaube das ändere ich noch in Integer.
(Ich nutzte meine eigene Engine, hier und nicht die Andorra)

Gandalfus 25. Jun 2008 13:12

Re: ballbewegung in breakout spiel
 
Zitat:

Darum habe ich eine zeitschleife verwendet.
was meinst du damit?
Du solltest wirklich mal timebased movement versuchen.

btw.: vermutlich eignen sich hier Polarkoordinaten bessere als die Kartesischen. Damit wäre die Berechnung Ausfallswinkel=Einfallswinkel leichter.

mimi 25. Jun 2008 13:37

Re: ballbewegung in breakout spiel
 
Damit sich der Ball von alle bewegt nutzte ich ein Timer. Dieser steht bei mir auf 3 MS.
Damit der Ball nicht zu schnell fliegt verwende ich eine "Zeitschleife" so nenne ich das, damit der ball nur noch alle 20 MS(?) aufgerufen wird.

In dieser Procedure könnte ich aber noch andere sachen machen z.b. eine Zeit anzeige. Damit kann ich nicht beim Timer nicht pauschal sagen rufe das Event alle 20ms(?) auf.

Zitat:

Du solltest wirklich mal timebased movement versuchen.
Das habe ich auch noch vor. Nur ganz verstanden habe ich das bisher noch nicht.
z.b. kann ich eine Standard Geschwindigkeit angeben ?

Zitat:

btw.: vermutlich eignen sich hier Polarkoordinaten bessere als die Kartesischen. Damit wäre die Berechnung Ausfallswinkel=Einfallswinkel leichter.
Leider bin ich nicht so gut in Mahte. Mit Polarkoordinaten meinst du bestimmt ein Rundes "Positions System" oder ?
Damit habe ich noch keine Erfahrung. Ich bin froh das es so eigentlich ganz gut läuft. Abgesehen von den ecken, wo der ball lieben gerne eine weile verweilt *G*

Ricoo 1. Jul 2008 21:54

Re: ballbewegung in breakout spiel
 
danke für eure hilfe.. das sollte allemal reichen =D


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:39 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz