Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Grenzen? Oo (https://www.delphipraxis.net/88469-grenzen-oo.html)

Rickiwarhammer 15. Mär 2007 19:48


Grenzen? Oo
 
Liste der Anhänge anzeigen (Anzahl: 1)
hi :D
ich habe ein kleines Problem mit nem Spiel XD
Also das Spiel ist eine Art Katz und Maus Spiel man hat die Maus und muss vor der Katze flüchten! So hier mein problem: ich ahbe bis jetzt zwei shapes für Katze und Maus benutzt! man kann die Maus mit den Pfeiltasten Steuern (soweit so gut) Aber jeztztz wollte ich Grenzen ins Spiel einbauen damit nicht die katze oder die Maus einfach mal stunden durch das Spiel läuft und man einen Meter lagnen Scroll Bar hat XD hier so hatte ich das gemacht:
Delphi-Quellcode:
procedure TForm1.Timer2Timer(Sender: TObject);
begin
If Maus.Left > ClientWidth then
Maus.Left := ClientWidth;
If Katze.Left > ClientWidth then
Katze.Left := ClientWidth;
If Maus.Top > ClientHeight then
Maus.Top := ClientHeight;
If Katze.Top > ClientHeight then
Katze.Top := ClientHeight;
end;
Ich hatte das immer so geamcht um jetzt nicht tausende Rects und so zu benutzen ^-^ Es hat immer geklappt bis auf jetzt Oo sie Maus kann immer noch raus! aber wieso :( bitte brauche hilfe!

Matze 15. Mär 2007 19:53

Re: Grenzen? Oo
 
Hi,

herzlich willkommen!

Ohne den Anhang gesehen zu haben, ist mir eines aufgefallen. Du setzt die Katze und die Maus im Grenzfall genau an die Außengrenze des Formulars. Es müsste eher so aussehen:

Delphi-Quellcode:
If Maus.Left > ClientWidth then
  Maus.Left := ClientWidth - Maus.Width;
Edit: Aber das in einem Timer zu prüfen ist nichts. Führe diese Abfragen beispielsweise im "OnKeyPress" aus und reagiere darauf. So kannst du direkt feststellen, ob du die zwei Objekte neu platzieren kannst und wenn nicht, dann machst du es auch nicht. ;)

Rickiwarhammer 16. Mär 2007 15:01

Re: Grenzen? Oo
 
Danke für Die antwort aber es geht nicht :( keine ahnung wieso :((((

inherited 16. Mär 2007 15:04

Re: Grenzen? Oo
 
Bedenke, dass wenn du auf Maus.Left>ClientWidth prüfst, die Bedingung erst erfüllt ist, wenn die Maus bereits GANZ aus dem Bild raus ist. Es müsste also heißen:
Delphi-Quellcode:
If Maus.Left+Maus.Width > ClientWidth then
  Maus.Left := ClientWidth - Maus.Width;

Rickiwarhammer 16. Mär 2007 15:08

Re: Grenzen? Oo
 
:wall: es geht immer noch nicht :( ich finde irgentwie keine Logik in diesem Fehler :(

inherited 16. Mär 2007 15:10

Re: Grenzen? Oo
 
Dann musst du schon mal deinen Quellcode zeigen, sonst können wir auch nur raten :roll:

Angel4585 16. Mär 2007 15:16

Re: Grenzen? Oo
 
ich hatte mal sowas ähnliches, sollte so in etwa funktionieren:
Delphi-Quellcode:
if (Maus.Left+Maus.Width) > Spielfeld.ClientWidth then
  Maus.Left := Spielfeld.ClientWidth - Maus.Width;

If (Katze.Left+Katze.Width) > Spielfeld.ClientWidth then
  Katze.Left := Spielfeld.ClientWidth-Katze.Width;

If (Maus.Top+Maus.Height) > Spielfeld.ClientHeight then
  Maus.Top := Spielfeld.ClientHeight - Maus.Height;

If (Katze.Top+Katze.Height) > Spielfeld.ClientHeight then
  Katze.Top := Spielfeld.ClientHeight-Katze.Height;

R2D2 16. Mär 2007 15:39

Re: Grenzen? Oo
 
Du überprüfst da aber nur jeweils rechts und unten!

Angel4585 16. Mär 2007 15:41

Re: Grenzen? Oo
 
ach.. ist mir garnich aufgefallen :shock:
er überprüft ja auch nur rechts und unten, ich denke links und oben ist klar, weil man da nicht noch zusätzlich was rechnen muss.

Rickiwarhammer 16. Mär 2007 19:40

Re: Grenzen? Oo
 
Liste der Anhänge anzeigen (Anzahl: 1)
:( Hmm das ist komisch könnte es vielleicht daran liegen das ich das ganze mit ieine DXInput mache? Aber hier ist mal die neuere Version meines Spiels hoffe das klappt irgentwann :(

SirTwist 17. Mär 2007 09:39

Re: Grenzen? Oo
 
Schau dir mal aus der Math-Bibliothek die Funtion EnsureRange an:
Delphi-Quellcode:
  Maus.Left := EnsureRange(Maus.Left, 0, ClientWidth - Maus.Width);
Macht eigentlich das gleiche, find ich aber eleganter ;-)

inherited 17. Mär 2007 10:18

Re: Grenzen? Oo
 
Delphi-Quellcode:
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
if (Maus.Left+Maus.Width) > ClientWidth then
  Maus.Left := ClientWidth - Maus.Width;

If (Katze.Left+Katze.Width) > ClientWidth then
  Katze.Left := ClientWidth-Katze.Width;

If (Maus.Top+Maus.Height) > ClientHeight then
  Maus.Top := ClientHeight - Maus.Height;

If (Katze.Top+Katze.Height) > ClientHeight then
  Katze.Top := ClientHeight-Katze.Height;

end;
Pack den Code lieber nicht ins KeyPress sondern ans Ende von deinem Timer1, sodass das nach jeder Bewegungsaktion überprüft wird.
Außerdem prüfst du nicht auf <0. Ist das beabsichtigt? So können Maus und Katze nämlich nach links und oben abhauen.

R2D2 17. Mär 2007 10:19

Re: Grenzen? Oo
 
Könntest du dir bitte auch den gesammten Beitragsdablauf durchlesen? :roll:

inherited 17. Mär 2007 10:21

Re: Grenzen? Oo
 
Zitat:

Zitat von R2D2
Könntest du dir bitte auch den gesammten Beitragsdablauf durchlesen? :roll:

Stell dir vor: Das habe ich getan :roll:
Ich habe mir lediglich sein Projekt wie es jetzt ist angeschaut und bin auf das gestoßen, weshalb ich ihn noch einmal drauf hinweise.

R2D2 17. Mär 2007 10:23

Re: Grenzen? Oo
 
Zitat:

Zitat von Matze
Edit: Aber das in einem Timer zu prüfen ist nichts. Führe diese Abfragen beispielsweise im "OnKeyPress" aus und reagiere darauf. So kannst du direkt feststellen, ob du die zwei Objekte neu platzieren kannst und wenn nicht, dann machst du es auch nicht. ;)

Ich denke aber trotzdem, dass das für Newbies relativ irreführend ist, wenn sie ständig widersprüchliche Antworten bekommen.

inherited 17. Mär 2007 10:26

Re: Grenzen? Oo
 
Ich denke auch, dass es irreführend ist, wenn man als newbie keine Antworten auf die eigentliche Frage bekommt, sondern ständig am Thema vorbeiführende "Verbesserungsvorschläge" bekommt.
Wenn er es mit einem DirectInput lösen will (vielleicht soll das ganze Spiel später einmal DirectDraw und co. benutzen) ist OnIdle oder Timer (Sei es der Windows-Timer oder ein Multimedia-Timer) einfach die richtige Wahl.
Ich habe fertig.

Rickiwarhammer 19. Mär 2007 21:11

Re: Grenzen? Oo
 
>-< eehm ich bin neu im Forum aber nicht mit Delphi >-< und ja es ist bveabsiuchtigt das 0 nicht geprüft wird. Da soll dann später der Eingang und AUsgang sein (fürs nächste lvl) also bis jetzt erst mit einem Rect verspürrt Oo und irgentwie finde ichs nicht raus =( Ich könnte das ganze einfach mit einem Rect abkürzen aber OO naja ich würde gerne wissen wieso das nicht geht damit ichs nächtes mal besser weiß!


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:31 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