Hallo, der Ball wird sehr wohl erstellt, blos leider hinter deinen Panels, das heißt du siehst ihn nicht.
Ich würde dir raten den Ball nicht als TBitmap zu laden sondern in einer normalen Image Komponente.
Das mit den Wänden stimmt auch noch nicht so ganz, da der Ball ja an den "Panelwänden" und nicht an den
Fensterwänden abprallen soll, also musst du die Panel Werte verwenden und nicht ClientHeight/Width.
Ausserdem gehören die Zuweisungen wohl eher in das "FormCreate" Event.
Ich habe hier mal deine Version etwas abgeändert (wie oben beschrieben) und das Programm funktioniert ja so
Ansatzweise auch schon:
Delphi-Quellcode:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
jpeg, ExtCtrls;
type
TForm1 =
class(TForm)
Panel2: TPanel;
Timer1: TTimer;
Panel1: TPanel;
Keeper: TImage;
Image1: TImage;
ImageBall: TImage;
procedure FormKeyDown(Sender: TObject;
var Key: Word;
Shift: TShiftState);
procedure Timer1Timer(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
public
end;
var
Form1: TForm1;
posx,posy,speedx,speedy,breite,hoehe:Integer;
implementation
{$R *.DFM}
procedure TForm1.FormKeyDown(Sender: TObject;
var Key: Word;
Shift: TShiftState);
begin
//Torwartbewegung Hoch-Runter
If Key=vk_down
then Keeper.Top:=Keeper.Top+5;
If Key=vk_up
then Keeper.Top:=Keeper.Top-5;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
//Aprallen von Wänden
if posy >= hoehe-60
then speedy:= - speedy ;
if posy <= -40
then speedy:= - speedy ;
//Ball
ImageBall.Top:=posy+30;
ImageBall.Left:=posx+30;
//Bewegung
posx:= posx + speedx;
posy:= posy + speedy;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
breite:=Panel1.Width;
hoehe:=Panel1.Height;
//Ball create
ImageBall.Picture.LoadFromFile('
ball1.bmp');
//Geschwindigkeit des Balls
speedx:=2;
speedy:=2;
end;
End.