Autor Beitrag
Vampyrexx
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Sa 30.11.02 18:04 
Hi!
Ich will Pacman nachprogrammieren, habe aber erst seit einigen Wochen Delphi in der Schule und kenne mich deshalb nicht so wirklich damit aus.

Ich habe bisher ein Array of TImage und ein Bild das Pacman darstellt.
Ich kann auch schon den Pacman mit den Pfeiltasten steuern und über das Array laufen lassen.
Doch die einzelnen Bilder des Arrays haben einen gewissen Abstande untereinander. Kann man den irgendwie wegmachen?
Und kann man Pacman in den Vordergrund bringen (mit in den Vordergrund rücken unter Bearbeiten geht es nicht) ?

Hier ist mein Quellcode:
ausblenden volle Höhe 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:
unit PacmanSteuerung;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls;

type
  Elemente = Array [0..10, 0..10] of TImage;
  TForm1 = class(TForm)
    Timer1: TTimer;
    Image1: TImage;
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure Timer1Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  i: Integer= 1;
  BilderElemente : Elemente;
  Bild : TImage;

implementation

{$R *.dfm}



procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
 if key = vk_left then Image1.left := Image1.Left - 3;
 if key = vk_right then Image1.left := Image1.Left + 3;
 if key = vk_down then Image1.Top := Image1.Top + 3;
 if key = vk_up then Image1.Top := Image1.Top - 3;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  case i of
   1 : image1.Picture.LoadFromFile('pac2.bmp');
   2 : image1.Picture.LoadFromFile('pac3.bmp');
   3 : image1.Picture.LoadFromFile('pac4.bmp');
   4 : image1.Picture.LoadFromFile('pac1.bmp');
  end;
 inc(i);
 if i>4 then dec(i,4);
end;

procedure TForm1.FormCreate(Sender: TObject);
  var x, y : Integer;
begin
 for x := 0 to 10 do begin
  for y := 0 to 10 do begin
   BilderElemente[x, y] := TImage.Create(Self);
   BilderElemente[x, y].Picture.LoadFromFile('Mauer.bmp');
   with BilderElemente[x, y] do begin
    Parent := Self;
    SetBounds(x * 30, y * 30, 30, 30);
   end;
  end;
 end;
end;

end.

_________________
-=(Life just suxx)=-
D0P3 F!$H
Gast
Erhaltene Danke: 1



BeitragVerfasst: Sa 30.11.02 20:41 
Den Abstand machst du ganz einfach weg. Der Befehl SetBounds(x * 30, y * 30, 30, 30); bestimmt (durch die ersten beiden Variablen) an welcher x- und welcher y-Koordinate das Bild auf der Form beginnt. Die letzten beiden Variablen geben die Breite und die Höhe der Form an.
Da du Abstände zwischen den einzelnen Bildern hast, werden wohl die Zahlen (hier: immer die 30) größer als das Bild sein.

Wenn du die Zahlen (30) auf die Bildbreite in der ersten und dritten Variable und auf die Bildhöhe in der zweiten und vierten Variable stellt so dürftest du keine Lücken mehr haben.
Der Befehl sollte dann in etwas so aussehen: SetBounds(x * Bildbreite, y * Bildhöhe, Bildbreite, Bildhöhe);