Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Ball am Tisch (https://www.delphipraxis.net/128864-ball-am-tisch.html)

Whatever 8. Feb 2009 11:27

Re: Ball am Tisch
 
Eine Bewegung ist eine aneinander reihung einzelner Schritte. Also musst Du eine Schleife bauen die bei jedem Durchlauf einen Schritt macht (die X und Y Werte des Shapes werden verändert). Durch eine Verzögerung entsteht dann eine Bewegung. Die Schleife kommt dann in die OnClick Prozedur des StartButtons.

Sir Rufo 8. Feb 2009 11:27

Re: Ball am Tisch
 
Ja, nur bevor du mich gleich fressen möchtest :mrgreen: schau mal hier unter Punkt 2.3.2.3

Hawkeye4077 8. Feb 2009 11:34

Re: Ball am Tisch
 
danke, das hilft mir weiter. dann muss ich doch die repeat until schleife verwenden, oder?

@ sir rufo:
ich weiß, dass die null bock haltung hier nicht erwünscht ist, aber habe ich denn je geschrieben, dass ich von euch erwrte, dass ihr meine hausaufgaben macht? das projekt ist im übrigen freiwillig, ich mache es, weil mir delphi spaß macht. nur diesmal hab ich halt ein brett vorm kopf!

Whatever 8. Feb 2009 11:40

Re: Ball am Tisch
 
Ja zum Beispiel die.
Oder die For Schleife ansonsten musst du dir eine geeignete Abbruchsbedingung überlegen.

Hawkeye4077 8. Feb 2009 11:45

Re: Ball am Tisch
 
gut, vielen dank!

_frank_ 8. Feb 2009 11:52

Re: Ball am Tisch
 
Zitat:

Zitat von Hawkeye4077
na toll, mathe ist nicht gerade mein lieblingsfach.

was wir mit "delta x" und "delta y" meinen, ist aber schon klar (sollte auch aus der zeichnung ersichtlich sein), und wie du diese berechnen kannst?
dann brauchst ja nur noch das verhältnis der beiden berechnen, eine schleife mit der länge eines deltas bauen (am besten das größte der beiden) den entsprechenden wert mit jedem schleifendurchlauf erhöhen und gleichzeitig den anderen mit hilf des Verhältniswertes erhöhen.

kleiner tip...machs erstmal ohne abprallen. das verkompliziert das Ganze am Anfang nur.

HTH Frank

Sir Rufo 8. Feb 2009 12:00

Re: Ball am Tisch
 
Ja, anbieten würde sich eine Funktion, die das Shape um max. 1 Pixel in x- und y- Richtung auf den Zielpunkt bewegt.

Diese Funktion so lange aufrufen, bis der Zielpunkt erreicht wurde.

Das Abprallen wird dann dadurch realisiert, dass sich jeweils beim Erreichen der Grenzen der Zielpunkt ändert.

cu

Oliver

Hawkeye4077 8. Feb 2009 12:03

Re: Ball am Tisch
 
hi, danke. was mit delta x und delta y gemeint ist, verstehe ich schon. an das apprallen mache ich mich später, wenn der ball sich erstmal bewegt.

_frank_ 8. Feb 2009 14:19

Re: Ball am Tisch
 
um das mal ganz einfach (ohne sonderfälle zu berücksichtigen) in code zu fassen (muss natürlich noch optimiert werden):

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
    dx,dy:integer;
    v:double;
    ps,pz:TPoint;
begin
  ps:=Point(10,10); //ball soll von da
  pz:=Point(100,200); //nach da
  //den weg als linie vorzeichnen
  canvas.moveto(ps.x,ps.y);
  canvas.lineto(pz.x,pz.y);
  shape1.SetBounds(ps.x,ps.y,10,10);//die startposition und größe des Shapes setzen
  sleep(1000);//einfach mal warten, um den startpunkt in ruhe zu betrachten
  //deltas berechnen
  dx:=pz.x-ps.x;
  dy:=pz.y-ps.y;
  if dx>dy then
  begin
    v:=dy/dx; //verhältnis berechnen
    for i:=1 to dx do
    begin
      //neu positionieren
      shape1.left:=ps.x+i;
      shape1.Top:=ps.y+trunc(i*v);
      application.ProcessMessages;
      sleep(20); //damit die bewegung bisschen langsamer wird...
    end;
  end else
  begin
    v:=dx/dy; //verhältnis berechnen
    for i:=0 to dy do
    begin
      //neu positionieren
      shape1.top:=ps.y+i;
      shape1.Left:=ps.x+trunc(i*v);
      application.ProcessMessages;
      sleep(20); //damit die bewegung bisschen langsamer wird...
    end;
  end;
end;
HTH Frank


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:47 Uhr.
Seite 3 von 3     123   

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