Autor Beitrag
Yannis
Hält's aus hier
Beiträge: 15


Delphi 2005
BeitragVerfasst: 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 user profile iconChristian S.: Topic aus VisualCLX (Component Library for Cross Platform) verschoben am Di 23.05.2006 um 20:13
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mi 26.04.06 22:36 
Moin und :welcome: im Forum!

user profile iconYannis 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 Threadstarter
Hält's aus hier
Beiträge: 15


Delphi 2005
BeitragVerfasst: 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 :lol:

Yannis
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Mo 08.05.06 21:28 
Sehen die Shapes alle gleich aus? Oder hast du vielleicht sogar nur Rechtecke?
Yannis Threadstarter
Hält's aus hier
Beiträge: 15


Delphi 2005
BeitragVerfasst: Di 16.05.06 07:08 
Ich habe nur Rechtecke, aber verschieden große...
DaKirsche
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
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
BeitragVerfasst: 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..
ausblenden 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
//Bewegung der Shapes
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;

//Aufruf des Prüfvorgangs
PruefeUeberlappung(Shape1,Shape2);
end;
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Mi 17.05.06 18:23 
Alternativ zu den vielen ifs geht auch folgendes:
ausblenden Delphi-Quelltext
1:
2:
 if (abs((X1-X2)*2+W1-W2)<W1+W2) and
    (abs((Y1-Y2)*2+H1-H2)<H1+H2) then // falls Kollision
Yannis Threadstarter
Hält's aus hier
Beiträge: 15


Delphi 2005
BeitragVerfasst: Mo 22.05.06 11:50 
user profile icondelfiphan hat folgendes geschrieben:
Alternativ zu den vielen ifs geht auch folgendes:
ausblenden Delphi-Quelltext
1:
2:
 if (abs((X1-X2)*2+W1-W2)<W1+W2) and
    (abs((Y1-Y2)*2+H1-H2)<H1+H2) then // falls Kollision


Wo muss man das jetzt einfügen?
Weil in diesem code ja keine bezeichnungen wie "shape1" oder "shape2" stehen.

user profile iconDaKirsche 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..
ausblenden 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
//Bewegung der Shapes
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;

//Aufruf des Prüfvorgangs
PruefeUeberlappung(Shape1,Shape2);
end;


Und hierzu:
Ich habe 4 Shapes :lol:

Vielleicht geht ihr einfach mal dadrauf ->www.yazi.de/linkdump...MultitaskingTest.htm
Stoney
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
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)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Mo 22.05.06 17:50 
user profile iconYannis hat folgendes geschrieben:
user profile icondelfiphan hat folgendes geschrieben:
Alternativ zu den vielen ifs geht auch folgendes:
ausblenden Delphi-Quelltext
1:
2:
 if (abs((X1-X2)*2+W1-W2)<W1+W2) and
    (abs((Y1-Y2)*2+H1-H2)<H1+H2) then // falls Kollision


Wo muss man das jetzt einfügen?
Weil in diesem code ja keine bezeichnungen wie "shape1" oder "shape2" stehen.

Das war so gemeint:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
X1 := Shape1.Left
Y1 := Shape1.Top
W1 := Shape1.Width
H1 := Shape1.Height

X2 := Shape2.Left
Y2 := Shape2.Top
W2 := Shape2.Width
H2 := Shape2.Height
Yannis Threadstarter
Hält's aus hier
Beiträge: 15


Delphi 2005
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 15


Delphi 2005
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6395
Erhaltene Danke: 149

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: 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
Dieses Thema ist gesperrt, Du kannst keine Beiträge editieren oder beantworten.

Das Thema wurde von einem Team-Mitglied geschlossen. Wenn du mit der Schließung des Themas nicht einverstanden bist, kontaktiere bitte das Team.