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 user profile iconNarses: Code- durch Delphi-Tags ersetzt