![]() |
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.
|
Re: Ball am Tisch
Ja, nur bevor du mich gleich fressen möchtest :mrgreen: schau mal
![]() |
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! |
Re: Ball am Tisch
Ja zum Beispiel die.
Oder die For Schleife ansonsten musst du dir eine geeignete Abbruchsbedingung überlegen. |
Re: Ball am Tisch
gut, vielen dank!
|
Re: Ball am Tisch
Zitat:
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 |
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 |
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.
|
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:
HTH Frank
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:11 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz