| Autor |
Beitrag |
Yannis
Hält's aus hier
Beiträge: 15
Delphi 2005
|
Verfasst: Di 25.04.06 19:02
Taaag,
ich bin ja grade dabei mein erstes Spiel für die Schule zu Programmieren. Dazu brauche ich leider wieder eure Hilfe. Und zwar:
Wenn sich ein Tshape1 und Tshape2 überschneiden soll eine Aktion geschehen. Jedoch wie mache ich das? Muss ich dafür die Koordinaten ermitteln, oder geht das auch einfacher?
Danke für eure Hilfe Moderiert von Christian S.: Topic aus VisualCLX (Component Library for Cross Platform) verschoben am Di 23.05.2006 um 20:13
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mi 26.04.06 22:36
Moin und  im Forum!
Yannis hat folgendes geschrieben: | | Wenn sich ein Tshape1 und Tshape2 überschneiden soll eine Aktion geschehen. |
AFAIK mußt du das bei Shapes selbst bestimmen, ob es eine Überlappung gibt. Hängt halt von der Form ab, wie das geht. Aber du hast es im Prinzip schon korrekt erkannt, das läuft auf Koordinaten-Rechnen hinaus.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Yannis 
Hält's aus hier
Beiträge: 15
Delphi 2005
|
Verfasst: Mo 08.05.06 11:40
Geht das auch einfacher?
Bin leider noch nicht so ein Delphicrack, aber man soll ja nie aufhören zu fragen
Yannis
|
|
delfiphan
      
Beiträge: 2684
Erhaltene Danke: 32
|
Verfasst: Mo 08.05.06 21:28
Sehen die Shapes alle gleich aus? Oder hast du vielleicht sogar nur Rechtecke?
|
|
Yannis 
Hält's aus hier
Beiträge: 15
Delphi 2005
|
Verfasst: Di 16.05.06 07:08
Ich habe nur Rechtecke, aber verschieden große...
|
|
DaKirsche
      
Beiträge: 187
Win XP Pro, SuSe Linux 7.3 - 10.2, Win 2k3 Server, Win 2000, Win NT 4.0
Delphi 2006 Pro, Java, HTML, SQL, PHP, CSS
|
Verfasst: Di 16.05.06 08:28
Wenn du nur mit Rechtecken arbeitest musst du eigentlich nur prüfen, ob Shape1.left <= Shape2.left + Shape2.width ist, bzw. umgekehrt..
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:
| procedure TForm1.PruefeUeberlappung(a,b : TShape); begin Prüfvorgang if (a.left < b.left) then begin if b.left < a.left + a.width then if b.top < a.top + a.height then showmessage(b.name + ' hat ' + a.name + ' überlappt!'); end else begin if a.left < b.left + b.width then if a.top < b.top + b.height then showmessage(a.name + ' hat ' + b.name + ' überlappt!'); end; end;
procedure TForm1.Timer1Timer(Sender: TObject); begin Shape1.left := Shape1.left + random(50) - 25; Shape2.left := Shape2.left + random(50) - 25; Shape1.top := Shape1.top + random(20) - 10; Shape2.top := Shape2.top + random(20) - 10;
PruefeUeberlappung(Shape1,Shape2); end; |
|
|
delfiphan
      
Beiträge: 2684
Erhaltene Danke: 32
|
Verfasst: Mi 17.05.06 18:23
Alternativ zu den vielen ifs geht auch folgendes:
Delphi-Quelltext 1: 2:
| if (abs((X1-X2)*2+W1-W2)<W1+W2) and (abs((Y1-Y2)*2+H1-H2)<H1+H2) then |
|
|
Yannis 
Hält's aus hier
Beiträge: 15
Delphi 2005
|
Verfasst: Mo 22.05.06 11:50
delfiphan hat folgendes geschrieben: | Alternativ zu den vielen ifs geht auch folgendes:
Delphi-Quelltext 1: 2:
| if (abs((X1-X2)*2+W1-W2)<W1+W2) and (abs((Y1-Y2)*2+H1-H2)<H1+H2) then | |
Wo muss man das jetzt einfügen?
Weil in diesem code ja keine bezeichnungen wie "shape1" oder "shape2" stehen.
DaKirsche hat folgendes geschrieben: | Wenn du nur mit Rechtecken arbeitest musst du eigentlich nur prüfen, ob Shape1.left <= Shape2.left + Shape2.width ist, bzw. umgekehrt..
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:
| procedure TForm1.PruefeUeberlappung(a,b : TShape); begin Prüfvorgang if (a.left < b.left) then begin if b.left < a.left + a.width then if b.top < a.top + a.height then showmessage(b.name + ' hat ' + a.name + ' überlappt!'); end else begin if a.left < b.left + b.width then if a.top < b.top + b.height then showmessage(a.name + ' hat ' + b.name + ' überlappt!'); end; end;
procedure TForm1.Timer1Timer(Sender: TObject); begin Shape1.left := Shape1.left + random(50) - 25; Shape2.left := Shape2.left + random(50) - 25; Shape1.top := Shape1.top + random(20) - 10; Shape2.top := Shape2.top + random(20) - 10;
PruefeUeberlappung(Shape1,Shape2); end; | |
Und hierzu:
Ich habe 4 Shapes
Vielleicht geht ihr einfach mal dadrauf -> www.yazi.de/linkdump...MultitaskingTest.htm
|
|
Stoney
      
Beiträge: 122
Mac OS X 10.6 "Snow Leopard", Ubuntu Linux 9.04, Mandriva 2010, Win 7, Win Vista, Win XP
Object Pascal (Turbo Delphi, FPC 2.2.4, Lazarus), C++ (Code::Blocks, XCode), Java (Eclipse)
|
Verfasst: Mo 22.05.06 12:17
Ich verweise auf einen ähnlichen Thread, bei dem ich bereits Lösungsvorschläge geliefert habe: Hier
Vor allem die beiden Beiträge aus dem Thread könnten dich interessieren:
Rechteckskollision
Kreiskollision
Ich hoffe, das hilft dir etwas weiter.
|
|
delfiphan
      
Beiträge: 2684
Erhaltene Danke: 32
|
Verfasst: Mo 22.05.06 17:50
|
|
Yannis 
Hält's aus hier
Beiträge: 15
Delphi 2005
|
Verfasst: Di 23.05.06 07:47
Danke, klappt super!
Jetzt brauch ich nur noch ein Paar Einzelheite:
- Wie kann man Shapes farbig machen?
- Wie kann man der Form ein Hintergrundbild verpassen?
|
|
Yannis 
Hält's aus hier
Beiträge: 15
Delphi 2005
|
Verfasst: Di 23.05.06 18:39
Und noch eine Frage, zu meinem Game:
1. Wenn man die Maus bewegt soll Aktion geschehen
2. Position der Maus am Anfang soll festgelegt werden
Wie geht das?
Danke für eure Hilfe
|
|
jasocul
      
Beiträge: 6395
Erhaltene Danke: 149
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Di 23.05.06 19:09
Hallo Yannis,
bitte erstelle für jede deiner Fragen ein separates Topic, da die Diskussion mehrerer Fragen in einem Topic für gewöhnlich für Verwirrung und Durcheinander sorgt. Daher:
*geschlossen*
Viele Grüße,
Peter
|
|