Autor |
Beitrag |
ZeitGeist87
      
Beiträge: 1593
Erhaltene Danke: 20
Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
|
Verfasst: Do 11.01.07 08:31
Was springt für uns dabei raus?
Wenn ich jedesmal wenn ich n Problem hätte nach Quelltext fragen würde, dann hätt ich in meiner Ausbildung nix gelernt...
LG
Stefan
PS Probieren geht über Studieren. Und wenn das nicht mehr geht -> DF 
_________________ Wer Provokationen, Ironie, Sarkasmus oder Zynismus herauslesen kann soll sie ignorieren um den Inhalt meiner Beiträge ungetrübt erfassen zu können.
|
|
julian2304 
      
Beiträge: 26
|
Verfasst: Do 11.01.07 11:37
Titel: lol?
back to topic^^
ich habe doch geschrieben das ich nicht weiterkomme mit dem "torwart".
da hab ich schon so viel ausprobiert aber es hat nicht funktioniert! darum habe ich mich hier im forum gemeldet!!! ALSO!!
ich brauche den quelltext!!
danke 
|
|
ZeitGeist87
      
Beiträge: 1593
Erhaltene Danke: 20
Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
|
Verfasst: Do 11.01.07 11:52
Ich hab zwar sowas noch nie gemacht, allerdings ergeben sich aus den vorherigen Posts alle Antworten..
Wo ist dein Problem?
Du musst doch nur prüfen, ob sich die Position des Balls mit denen des Torwarts überschneidet.
Ist dies der Fall, einfach alle Richtungen ändern..
Betrachte den Torwart einfach als Wand, also Außenwand.
Wie n Haus um den Garten ist. Wenn du dann den Ball schießt prallt er irgendwo vom Haus (Hauswand) ab, weil er kollidiert ist.
Du musst einfach nur prüfen, von welcher wand, links, rechts, oben oder unten.
So hab ichs mir vorgestellt und ich programmiers jez einfach mal!
Und du auch!
LG
Stefan
_________________ Wer Provokationen, Ironie, Sarkasmus oder Zynismus herauslesen kann soll sie ignorieren um den Inhalt meiner Beiträge ungetrübt erfassen zu können.
|
|
julian2304 
      
Beiträge: 26
|
Verfasst: Do 11.01.07 16:08
Titel: -.-
wenn ich den torwart als "wand" nehme, prallt der ball aber auch dort ab wo der torwart gar nich ist, also an der ganzen seite!??!
ich hab doch gesagt das ich ein noob bei delphi bin, darum hab ich mich ja auch hier gemeldet
|
|
ZeitGeist87
      
Beiträge: 1593
Erhaltene Danke: 20
Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
|
Verfasst: Do 11.01.07 16:24
Das Problem hat ich auch =)
dann hab ich mir ne skizze gemacht und gesehen, dass er nur abprallen darf, wenn er auf der höhe des torwarts ist und natürlich in den dimensionen (links bis rechts = oberkante) liegt.
Ich poste mal das was ich bis jez hab =)
Ist noch bissl buggy..unten funktionier noch nicht richtig..naja kann man alles optimieren, ging halt rein um die Kollissionskontrolle..
LG
Stefan
Einloggen, um Attachments anzusehen!
_________________ Wer Provokationen, Ironie, Sarkasmus oder Zynismus herauslesen kann soll sie ignorieren um den Inhalt meiner Beiträge ungetrübt erfassen zu können.
Zuletzt bearbeitet von ZeitGeist87 am Do 11.01.07 16:27, insgesamt 1-mal bearbeitet
|
|
julian2304 
      
Beiträge: 26
|
Verfasst: Do 11.01.07 16:26
ahh ok!nur du hast ja auch das problem das der ball so komisch blinkt? was ist das?
|
|
ZeitGeist87
      
Beiträge: 1593
Erhaltene Danke: 20
Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
|
Verfasst: Do 11.01.07 16:48
bei mir is das der refresh =)
_________________ Wer Provokationen, Ironie, Sarkasmus oder Zynismus herauslesen kann soll sie ignorieren um den Inhalt meiner Beiträge ungetrübt erfassen zu können.
|
|
JayEff
      
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: Do 11.01.07 17:50
julian2304 hat folgendes geschrieben: | ahh ok!nur du hast ja auch das problem das der ball so komisch blinkt? was ist das? |
Nun, da gibts eine Universalantwort die immer zieht: DoubleBuffered:=true;
Egal wohin, am besten aber ins Form1Create oder in den Startbutton, muss ja nur einmal auf true gesetzt werden fürs ganze Programm.
(Kleine Einschränkung: DoubleBuffered ist eine Variable der Form, das heißt, es muss für jede Form einzeln auf True gesetzt werden, auf der eine Bewegung dargestellt werden soll. Einfachster Weg: Ins Form1Create für jede Form dies braucht einstellen: Delphi-Quelltext 1: 2:
| Form1.DoubleBuffered := true; Form2.DoubleBuffered := true; | )
_________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
|
|
BerTeL
      
Beiträge: 45
Windowx XP
Delphi 7 Enterprise
|
Verfasst: Do 11.01.07 18:27
Ihr wollt euren source: eines meiner alten projeckte (wirklich alt) und hatt noch ein paar fehler. Aber müsste reichen (und ja nicht das abgeben ^^). Und nicht gleich jammer wenn ihr es nciht versteht  anschauen und es versuchen es zu verstehen.
Einloggen, um Attachments anzusehen!
|
|
Dragon06
      
Beiträge: 25
|
Verfasst: Do 11.01.07 18:31
BerTeL hat folgendes geschrieben: | Ihr wollt euren source: eines meiner alten projeckte (wirklich alt) und hatt noch ein paar fehler. Aber müsste reichen (und ja nicht das abgeben ^^). Und nicht gleich jammer wenn ihr es nciht versteht anschauen und es versuchen es zu verstehen. |
oha  naja also sooo professionell sollte unser prog nun nicht werden xD
aber nice!! ^^
werde es heut abend oder so noch mal versuchen und dann hier posten ob ich's hingekriegt hab 
|
|
BerTeL
      
Beiträge: 45
Windowx XP
Delphi 7 Enterprise
|
Verfasst: Do 11.01.07 18:41
Es reicht schon wenn du dir anschaust wie die kollision arbeitet ...
außerdem: argh 2. seite übersehen -.-. Dann hätte ich das nicht gepostet 
|
|
julian2304 
      
Beiträge: 26
|
Verfasst: Do 11.01.07 19:25
|
|
julian2304 
      
Beiträge: 26
|
Verfasst: Sa 13.01.07 16:46
also.......^^
ich habe es immer noch nicht hinbekommen das der ball am torwart abprallt.
könnte mir jemande jetzt hier mal den quelltext hinschreiben?
danke
mfg
|
|
JayEff
      
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: Sa 13.01.07 16:53
 Wenn das so ist, dann ließ dir einfach nochmal den ganzen Thread durch ...
Da wäre zum Beispiel meine Ausführung, wie man das auf dem Blatt Papier berechnen kann, dann wär da BerTels fertiges Programm das er euch zur Verfügung gestellt hat, und viele weitere Tipps und Hilfestellungen anderer Leute...
Zeitgeist87 hat auch, extra für euch, ein Programm geschrieben, das euch das demonstrieren soll...
Poste uns doch mal deinen Quelltext, der nicht funktioniert, dann sehn wir ja, ob du unsere Ratschläge befolgt hast  Ausserdem sehn wir dann, was du falsch machst und können es verbessern.
_________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 13.01.07 16:59
|
|
julian2304 
      
Beiträge: 26
|
Verfasst: Mo 15.01.07 09:04
|
|
ZeitGeist87
      
Beiträge: 1593
Erhaltene Danke: 20
Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
|
Verfasst: Mo 15.01.07 09:27
Also!
Noch mal von vorn, so dass es jeder versteht!
Du hast das Ding ja "Torwart" getauft.
Ergibt es dann also sinn, dass der Ball links oder rechts vom Torwart abprallen kann?
Nein!
Warum? Weil der sich nur auf der Linie bewegt, sprich nach links und rechts.
Alles was an ihm vorbeigeht ist nunmal n Tor!
Weil was bringts wenn der "rausläuft"?
Also reicht es, wenn du die Kollissionsabfrage deines "Torwarts" nur von oben her implementierst.
Wie gehts das?
Ich poste mal den Quelltext aus meinem Beispiel und erklär ihn:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| if ((rund.Top + rund.height) >= Torwart.Top) and (rund.Top <= Torwart.Top) then begin if (rund.left >= Torwart.Left) and ((rund.left + rund.Width) <= (Torwart.Left + Torwart.Width)) then begin rund.Top:= -rund.Top; vw:= -vw; debugbox.lines.add('Gehalten'); end; end; |
Erklärung:
mit
Delphi-Quelltext 1: 2:
| if ((rund.Top + rund.height) >= Torwart.Top) and (rund.Top <= Torwart.Top) then |
prüfen wir, ob sich der Ball überhaupt in der Nähe des Torwarts befindet, sprich ob der in berührt.
Allerings erfolgt diese Berührung mit Einschränkung:
Delphi-Quelltext 1: 2:
| if (rund.left >= Torwart.Left) and ((rund.left + rund.Width) <= (Torwart.Left + Torwart.Width)) then |
Denn nur wenn rund (der Ball) auch im Bereich des Torwarts ist, also sich so:
| * |
---------
|Torwart|
---------
befindet, darf er auch abprallen. Befindet er sich links oder rechts vom Torwart, aber auf gleicher Höhe, so darf er nicht abprallen.
Erst wenn diese beiden Bedingung erfüllt sind (auf gleicher Höhe und im Bereich des Towarts/Buttons), dann darfst du den Ball abprallen lassen:
Delphi-Quelltext 1: 2:
| rund.Top:= -rund.Top; vw:= -vw; |
Ich hoffe es ist einigermaßen gut erklärt!
LG
Stefan
_________________ Wer Provokationen, Ironie, Sarkasmus oder Zynismus herauslesen kann soll sie ignorieren um den Inhalt meiner Beiträge ungetrübt erfassen zu können.
|
|
Dragon06
      
Beiträge: 25
|
Verfasst: Mo 15.01.07 18:05
jo cool danke, jetz hab ich's auch endlich gerafft xD
naja aber die aufgabe war jetzt nicht ein fussball-programm zu machen ^^ sondern einfach nur einen bewegbaren button und einen anderen button der an dem bewegbaren abprallt!
also hab ich das auch noch für die untere seite gemacht...
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| If (Button.Top <= Button1.Top + Button1.height) and (Button.Top >= Button1.Top + Button1.height) then begin if (Button.left <= Button1.Left) and ((Button.left + Button.Width) >= (Button1.Left + Button1.Width)) then begin Button.Top:= -Button.Top; vw:= -vw; end; end; |
klappt auch soweit... naja der "ball" prallt zwar irgendwie eher in der mitte des anderen buttons ab, aber das dürfte ja nich so schlimm sein... oder hab ich da noch nen fehler drin??
danke für die reichliche hilfe ^^
|
|
JayEff
      
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: Mo 15.01.07 20:54
Dragon06 hat folgendes geschrieben: |
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| If (Button.Top <= Button1.Top + Button1.height) and (Button.Top >= Button1.Top + Button1.height) then begin if (Button.left <= Button1.Left) and ((Button.left + Button.Width) >= (Button1.Left + Button1.Width)) then begin Button.Top:= -Button.Top; vw:= -vw; end; end; |
oder hab ich da noch nen fehler drin?? |
Ja, erstens: grauenhafte Formatierung. Zweitens: Wenns nicht richtig klappt, ist ein Fehler drin.
Ich würde dir empfehlen, nicht mit Button und Button1, sondern vielleicht mit Player und Keeper zu arbeiten oder was die grad am liebsten ist, solangs eindeutig ist.
Die markierte Zeile ist, wie wir schon seeehr oft gesagt haben, totaler Blödsinn.
Man verschachtelt If-Abfragen nicht sondern verknüpft sie mit and (einfach alle statements die du schon hast in klammern setzen und mit nem and verbinden)
Wenn uns dann klar ist, welcher der Torwart und welcher der "Ball" ist, dann machen wir weiter 
_________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
|
|
Dragon06
      
Beiträge: 25
|
Verfasst: Mo 15.01.07 21:14
ach so ja...
button = ball
button1 = keeper
und es klappt ja auch jetzt! nur halt bei der unteren kante müsste noch n kleiner fehler sein... der ball prallt nicht an der kante ab, sondern in der mitte des keepers soweit ich das sehe ^^
hier ich hänge mal die anwundung an, könnt euch das ja mal angucken wie ich das meine;)
Einloggen, um Attachments anzusehen!
|
|
|