Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Bild immer in der Mitte
UniversalNoob - Fr 19.06.09 19:43
Titel: Bild immer in der Mitte
Hi,
ich bin grad dabei ein kleines Autorennspiel zu programmieren. Die Strecke geht nun über den Bildschirm hinaus.
Wie kann ich es hinbekommen, dass das Auto immer in der Mitte des Bildschirms zu sehen ist, der Ausschnitt vom Programm also immer mit dem Auto mitwandert? So wie es momentan ist, verschwindet es ja nämlich irgendwann am rechten oder am unteren Rand.
Hoffe ihr könnt mir weiterhelfen.
lg
jakobwenzel - Fr 19.06.09 19:48
Um was genaues zu sagen musst du mehr ins Detail gehen, aber generell lässt sich sagen dass nicht das Auto verschoben wird sondern der Hintergrund.
UniversalNoob - So 21.06.09 15:42
Ja, hab es jetzt so gemacht, dass immer der Hintergrund verschoben wird. Jetzt is nur folgendes Problem aufgetreten:
Ich hab ja 4 Bilder vom Auto (je eins für oben, unten, rechts und links). Das "rumfahren" klappt auch wunderbar, nur bewegen sich die anderen 3 Bilder bei den Richtungen links und rechts nicht richtig mit. Eigentlich müssten die immer alle an der selben Stelle sein, jedoch entfernt sich links und rechts immer ein wenig von den anderen Bildern. Hab die Bewegung mit OnKeyDown und 4 Timern (einen für jede Richtung) gemacht. Quelltext sieht folgendermaßen aus:
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: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90:
| procedure TAutorennen.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); var iTimer, iAuto: Integer; begin if key = vk_right then begin for iAuto := 1 to 4 do begin Auto[iAuto].Visible := False; end; for iTimer := 1 to 4 do begin Timer[iTimer].Enabled := False; end; Auto[2].Visible := True; Timer[2].Enabled := True; end
else if key = vk_up then begin for iAuto := 2 to 4 do begin Auto[iAuto].Visible := False; end; for iTimer := 2 to 4 do begin Timer[iTimer].Enabled := False; end; Auto[1].Visible := True; Timer[1].Enabled := True; end
else if key = vk_space then begin for iTimer := 1 to 4 do begin Timer[iTimer].Enabled := False; end; end
else if key = vk_down then begin for iAuto := 1 to 4 do begin Auto[iAuto].Visible := False; end; for iTimer := 1 to 4 do begin Timer[iTimer].Enabled := False; end; Auto[3].Visible := True; Timer[3].Enabled := True; end
else if key = vk_left then begin for iAuto := 1 to 3 do begin Auto[iAuto].Visible := False; end; for iTimer := 1 to 3 do begin Timer[iTimer].Enabled := False; Auto[4].Visible := True; Timer[4].Enabled := True; end;
end; end;
procedure TAutorennen.Timer_HochTimer(Sender: TObject); var iStrecke: Integer; begin for iStrecke := 1 to 18 do begin Strecke[iStrecke].top := Strecke[iStrecke].top + 10; end; end;
procedure TAutorennen.Timer_RechtsTimer(Sender: TObject); var iStrecke: Integer; begin for iStrecke := 1 to 18 do begin Strecke[iStrecke].left := Strecke[iStrecke].left - 10; end; end;
procedure TAutorennen.Timer_LinksTimer(Sender: TObject); var iStrecke: integer; begin for iStrecke := 1 to 18 do begin Strecke[iStrecke].left := Strecke[iStrecke].left + 10; end; end;
procedure TAutorennen.Timer_RunterTimer(Sender: TObject); var iStrecke: Integer; begin for iStrecke := 1 to 18 do begin Strecke[iStrecke].top := Strecke[iStrecke].top - 10; end; end; |
Falls jemand findet, an was es liegen könnte, bitte sagen, ich hab nämlich nichts gefunden.
Moderiert von
Narses: Code- durch Delphi-Tags ersetzt
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!