Entwickler-Ecke
Multimedia / Grafik - Ping Pong: Fehler bei der Kollision mit dem Schläger
Matthias-K - Mi 21.09.05 15:05
Titel: Ping Pong: Fehler bei der Kollision mit dem Schläger
hi leutz,
ich hab folgendes problem.
ping pong spiel!
ich weis: nicht noch so einer!
aber des muss nu sein! *ggg*
also, mein ping pong ist fast fertig! ich betone, fast.
wenn ich eine collision habe, geht der ball auch dorthin, wo er soll! nur wenn ich den ball in einem bestimmten winkel treffe, mit meinem "schläger", dann kommt keine kollision zustande.
der ball wandert an meinem schläger, der ein panel ist, entlang und verzieht sich dann.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58:
| function tform1.test : string; begin str := 0000; if colli(panel2.BoundsRect, image1.BoundsRect) then if ((image1.Left) > (panel2.left)) or (image1.left >= form1.ClientWidth) then str := 0000 else str := 1000; if colli(bandeunten.BoundsRect, image1.BoundsRect) then str := 0100; if colli(panel1.BoundsRect, image1.BoundsRect) then begin if ((image1.left) < (panel1.left + panel1.Width)) or ((image1.left + image1.Width) <= 0) then str := 0000; else str := 0010; end; if colli(bandeoben.BoundsRect, image1.BoundsRect) then str := 0001; end;
procedure TForm1.Timer1Timer(Sender: TObject); begin test; case str of 0000 : begin image1.top := image1.top + y; image1.left := image1.left + x; end; 1000 : begin x := x * (-1); image1.left := image1.left + x; image1.top := image1.top + y; end; 0100 : begin y := y * (-1); image1.left := image1.left + x; image1.top := image1.top + y; end; 0010 : begin x := x * (-1); image1.left := image1.left + x; image1.top := image1.top + y; end; 0001 : begin y := y * (-1); image1.left := image1.left + x; image1.top := image1.top + y; end; end; end; |
ich hab mir hier scho den halben tag den kopf zerbrochen, woran das liegen könnte, aber ich hab keen plan!
hab euch mal meine collisions routine geschickt. vieleicht seht ihr etwas, was ich nicht sehe!
matthias
Moderiert von
Tino: Titel geändert.
Heiko - Mi 21.09.05 15:31
Kannst du vlt. das Programm uns schicken, damit wir es selber sehen unter welchem Fall er nicht kollidiert? Oder wenigesten einen Screenshout (falls du den Fall triffst ;) ).
Solaris - Mi 21.09.05 15:48
So da ist das Programm.
Der Fehler tritt nur dann auf wenn der "Ball" entweder oben auf einen der "Schläger" trifft oder wenn der "Ball" die beiden "Schläger" unten berührt.
Der Ball wandert dann an der linken oder rechten Panelseite entlang (entweder nach oben oder nach unten) und wird dann am Ende des Schlägers wieder "abgestoßen".
Heiko - Mi 21.09.05 18:44
Wo ist es? Du hast glaube ich den Anhang vergessen ;).
PS: Solaris=Matthias-K? (Scheint zu mindestens so) ;)
GTA-Place - Mi 21.09.05 18:54
Das Game war vorher noch da. Kann ich bezeugen :wink:
Solaris - Do 22.09.05 08:09
Also wir sind nicht ein und die selbe Person!
Das Programm musste leider neu aufgebaut werden aber nu ist es da...
GTA-Place - Do 22.09.05 15:45
Ich glaub die meisten hier wissen,
dass ich nicht du bin :wink:
Amateur - Do 22.09.05 15:58
das problem hatte ich auch. du musst noch ein paar überprüfungen schreiben wenn der ball über dem schläger auftaucht und drauf trifft. is viel denkarbeit aber mit nem bisschen logik und wenn man es sich ma aufmalt kommt man drauf. wenn er von oben kommt musste halt prüfen ob ein punkt der unteren kante des balls oben auf den schläger trifft soll er nach oben wegfliegen. oder du machst ein trect um das image und überprüfst immer nur ob der ball in dem trect drin liegt. hab ich selbst noch net getestet sollte aber auch gehn. dann musste net soviel mit image denken sondern kannst dir ne eigene klasse tkollisionsrechteck schaffen mit eigenschaften wie kantelinks und so.
mit nen bisschen logik und dem aufzeichnen des problems mit einem analogen stift auf ein analoges papier wirste da sicher weiterkommen.
Heiko - Do 22.09.05 16:31
Solaris hat folgendes geschrieben: |
| Also wir sind nicht ein und die selbe Person! |
Mich wundert es nur das Matthias K. das problem meldet und du uns das programm gibst ;).
@Programm den Fall kann ich leider nicht überprüfen, da der Ball bei mir immer unten raus verschwindet, wenn ich direkt die exe ausführe.
Solaris - Do 22.09.05 20:23
Das mit dem nach unten raus verschwinden liegt daran das das panel auf albottom gesetzt wurde und nich auf alnone... und das der ball zu den seiten raus verschwindet wurde auch behoben.
du musst den ball gegen die untere oder obere seite des schlägers kommen lassen... mit etwas "glück" siehst du dann was ich meine
Solaris - Fr 23.09.05 09:09
Da ich anders keine Bilder hier reinposten kann habe ich es mal als Anhang an das Ende des Posts gehangen.
Auf dem Bild sieht man, wie der Ball auf das Panel trifft und wie er sich dann weiter bewegt.
Ich hoffe nun könnt ihr euch mal einen Eindruck von meinem Problem machen.
Heiko - Fr 23.09.05 12:47
Mhm, der mag wohl deine Anhänge nicht ;).
Solaris - Fr 23.09.05 12:49
Also bei mir sind da Anhänge vorhanden >___>
evtl. mal F5 drücken?
Heiko - Fr 23.09.05 12:51
Jetzt uach, nachdem ich gelesen habe, das man einfach einmal aktualisieren muss ;). Jetzt weiß ich wenigstens wie es aussieht.
//Edit: Kannst du vlt. die Koordinaten geben wann der Fall genau eintritt? Also Winkel in dem er "rollt", letzter Abprallpkt an der Wand und Koordinaten des Schlägers? Dann können wir es eigentlich rekonstruieren ;).
Amateur - Fr 23.09.05 13:24
ich hab schon geschrieben wie es geht. mit etwas logik kommste dahinter! es sind nur ein paar abfragen wenn der ball oben drauf kommt. abhängig von der geschwindigkeit und so kannste dann oben so etwas wie nen gesperrten bereich machen wo der ball abprallt. überleg einfach ein bisschen
Matthias-K - Fr 23.09.05 17:09
wir haben bereits diesen netten tip aus dem edh angewandt, um die kollision zu prüfen!
also nix mit trect! wenn du dir den quelltext angeschaut hättest, hättest du es gesehen!
daran liegt nicht das problem! das problem ist, das diese collisionsabfrage irgendwo ne kleine macke hat!
matthias
Amateur - So 25.09.05 16:43
ich schreib es nun zum dritten mal.
du brauchst kein trect. das war nur noch ne andere idee wie man es machen kann.
du musst nur ein paar abfragen hinzuschreiben wo getestet wird ob der obere /bzw. untere rand eures balls in dem panel liegt.
wenn man es sich aufmalt kriegt man es mit ein paar for und if abfragen locker hin.
überlegt halt mal ein bisschen.
wenn ihr hier nen fertigen quelltext erwartet muss ich euch enttäuschen.
nen bisschen logik hilft da weiter. wenn ihr das net hinkriegt solltet ihr noch ein paar tuts lesen und nachdenken.
sry aber ich habs auch hinbekommen. der quellcode is net schwer. es is nur logik!
denn das selbe prob gabs bei mir und nach ein, zwei din A4 seiten zeichnungen hatte ich meine beiden abfragen fertig. und siehe da nach ein paar versuchen mit kleinen änderungen hat es gepasst
Matthias-K - So 25.09.05 16:58
ich brauch bestimmt keine tuts mehr lesen!
ich bin auch nicht für des ping pong spiel verantwortlich.
die beiden, die dafür verantwortlich sind, sind solaris und stadtfuchs!
diese beiden sind lehrlinge und sollen es lernen! lernen zu programmieren und lernen, zu fragen in foren oder sonstwo! und da teilweise recht unbrauchbare anregungen kamen, hab ich mich selbst eingeklinkt!
und ich brauch bestimmt keinen code hier!
ich hab beiden schon gesagt, das sie die prüfung auf die oberen und unteren kanten durchführen sollen. nur hab ich keine zeit, mich auch noch darum zu kümmern! auch wenns hart klingt, is aber zur zeit so!
matthias
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!