Autor Beitrag
oneP
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 71

Win XP Professional
Turbo Delphi 2006
BeitragVerfasst: So 31.05.09 12:31 
Hallo

ich Programmiere gerade ein Spiel, das ähnlich wie Mohrhuhn sein soll. Also Vögel fliegen im Formular die man abschießen muss. Soweit habe ich das schon geschafft.
Jetzt will ich noch einen Beweglichen Hintergrund machen. Das heißt, der Hintergrund ist eigentlich viel Breiter als das Formular und sobald die Maus am Formularrand ist, soll der Hintergrund entweder nach links oder nach rechts verschoben werden.
Einen Ansatz habe ich schon, aber der Funktioniert irgendwie nicht:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
 procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
   if X >=  Form1.Width - 50 then
     Background.Left := Background.Left - 10;
   if X <= Form1.Left + 50 then
     Background.Left := Background.Left + 10
end;
ffgorcky
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 573

WIN XP/2000 & 7Prof (Familie:Win95,Win98)

BeitragVerfasst: So 31.05.09 12:59 
Möchtest Du das ganze als Vollbildspiel machen?
Dann würde ich das eher so schreiben:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
 procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
   if X >= Screen.Width-50 and Background.Left+FormSpiel.Width<Backgrond.Width then 
     //also wenn der Mauszeiger ziemlich weit rechts ist, aber die Anzeige noch nicht den rechten Rand erreicht hat...
     Background.Left := Background.Left + 10
   else if X <= 50 and Background.Left>10 then 
     //also wenn der Mauszeiger ziemlich weit links ist, aber die Anzeige noch nicht den linken Rand erreicht hat...
     Background.Left := Background.Left - 10;
end;

Das else kan ja da ohne weiteres stehen, da die Maus ja nicht gleichzeitig an zwei Stellen sein kann!
Oder arbeite ich jetzt gerade total an Deinem Thema vorbei?
Dann entschuldige bitte! (Wobei ich natürlich hoffe, dass es nicht so ist...)
Das Problem bei meiner jetzigen Lösung ist nur, dass Du den wirklichen rechten und linken Rand eigentlich nie siehst, wenn Du von derr Mitte aus anfängst.
Dann müsstest Du die X-Abfrage verkleinern.
oneP Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 71

Win XP Professional
Turbo Delphi 2006
BeitragVerfasst: So 31.05.09 13:18 
und wenn ich nicht im Vollbild Arbeite?
...dann müsste ich eigentlich nur Screen durch Form1 ändren - oder?

eigentlich ist der Code von dir fast der gleiche wie von mir oben. Aber der funktioniert immer noch nicht.... Der Hintergrund verschiebt sich nicht.

//EDIT: Doch eben hab ich gemerkt dass es Funktioniert. Aber nur wenn die Maus Außerhalb des "Backgrounds" ist. Also wenn das Background nicht dass ganze Formular ausfüllt und wenn man rechts an das Formular mit der Maus geht wo das Background nicht ist, dann verschiebt sich das Background nach links.

//EDIT 2 :) : so jetzt hab ichs raus. Bei Background musste bei Eigenschaften unter Eingabe Enabled auf false gesetzt werden.

Jetzt wird der Hintergrund bewegt wenn ich am Rand die Maus bewege. Das heißt ich muss immer die Maus bewegen (da OnMouseMove Ereignis). Wie kann ich das machen, dass sich der Hintergrund bewegt ohne dass ich die Maus bewegen muss wenn sie am Rand ist? Vielleicht mit OnMouseActivate? Wenn ja , wie?
oneP Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 71

Win XP Professional
Turbo Delphi 2006
BeitragVerfasst: Mo 01.06.09 10:48 
weiß niemand ne Lösung?
FinnO
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1331
Erhaltene Danke: 123

Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
BeitragVerfasst: Mo 01.06.09 10:58 
OnEnter glaube ich.
ffgorcky
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 573

WIN XP/2000 & 7Prof (Familie:Win95,Win98)

BeitragVerfasst: Mo 01.06.09 11:29 
Also ich würde in einer Timer-Prozedur die momentan in der MouseMove-Prozedur gemerkte Mausposition und dann die einzeln erstellte Prozedur aufrufen:
Sprich: Unter Form-Variablen:
ausblenden Delphi-Quelltext
1:
var MouseX, MouseY: Integer;					

deklarieren und dann bei FormMouseMove jeweils die beiden Koordinaten merken:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,  Y: Integer);
begin
MouseX:=X;
MouseY:=Y;
BewegenFallsNoetig(MouseX,MouseY);
end;


Diese Prozedur BewegenFallsNoetig(MouseX,MouseY:Integer); kannst Du dann jetzt ja auch per Timer aufrufen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.TimerGuckeObBewegungNottut.OnTimer(Sender:TObject)
begin
BewegenFallsNoetig(MouseX,MouseY);
end;


Dann hieße Deine Bewegungs-Prozedur dann jetzt so:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure BewegenFallsNoetig(MouseX,MouseY:Integer);
begin
   if MouseX >= Screen.Width-50 and Background.Left+FormSpiel.Width<Backgrond.Width then 
     //also wenn der Mauszeiger ziemlich weit rechts ist, aber die Anzeige noch nicht den rechten Rand erreicht hat...
     Background.Left := Background.Left + 10
   else if MouseX <= 50 and Background.Left>10 then 
     //also wenn der Mauszeiger ziemlich weit links ist, aber die Anzeige noch nicht den linken Rand erreicht hat...
     Background.Left := Background.Left - 10;
end;

Wobei mir da jetzt gerade auffällt, dass Du die Variable MouseY ja gar nicht brauchst - es sei denn, Du willst das ganze wirklich auch nach oben und unten bewgen können.
oneP Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 71

Win XP Professional
Turbo Delphi 2006
BeitragVerfasst: Mo 01.06.09 13:49 
Ah Ok, vielen Dank!

und wie/wo kann ich Einstellen, dass das Formular den ganzen Bildschirm ausfüllt (...ich weiß, bei Align..) aber das auch die Taskleiste weg ist?
ffgorcky
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 573

WIN XP/2000 & 7Prof (Familie:Win95,Win98)

BeitragVerfasst: Mo 01.06.09 13:58 
Also ich meine, dass das so geht, wie es im Thema Vollbildmodus doch auch beschrieben ist.
Oder reicht Dir das noch nicht? Ist das nicht genau das, was Du möchtest?
Ich habe in der Hinsicht noch keine Erfahrungen...
oneP Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 71

Win XP Professional
Turbo Delphi 2006
BeitragVerfasst: Mo 01.06.09 15:28 
hmm.... dort ist es beschrieben wie es mit OpenGL geht. Eigentlich kann ich damit nichts anfangen.

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

Edit: So jetzt hab ichs. Thx @ all :D