So i'm trying to create an information kiosk in which you move a character around a form to different images (such as to a medical image to show where the medical booth is in the area) but i'm stuck on determining whether or not the movable character is touching any of the images in any way. This is the basic thought process behind what I've tried. The main problem is on the procedure Checkcolissions.
type
TForm1 = class(TForm)
imgsprite: TImage;
imgmed: TImage;
imgMerch: TImage;
Image2: TImage;
Image3: TImage;
Image4: TImage;
Image5: TImage;
imgmedenter: TImage;
imgFood: TImage;
img: TImage;
Panel1: TPanel;
procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure FormActivate(Sender: TObject);
procedure FormKeyPress(Sender: TObject; var Key: Char);
procedure CheckCollisions;
private
isprite, spriteleft, spritetop : integer;
bMove : boolean;
FTargets: array[0..10] of TImage;
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.CheckCollisions;
var
iCount : integer;
bValid : boolean;
begin
iCount := - 1;
bValid := false;
while (bValid = false) OR (iCount >= 10) and (bMove = true) do
begin
inc(icount);
if (imgsprite.top = FTargets[iCount].top) and (imgsprite.left = FTargets[iCount].left) then //this just doesnt work
//and i dont know what to do
begin
bValid := true;
bMove := false;
case iCount of
0 : imgmedenter.visible := true; //repeated for each thing in the array
end;
end;
end;
end;
procedure TForm1.FormActivate(Sender: TObject);
begin
iSprite := 0;
bMove := true;
Form1.DoubleBuffered := True;
windowstate := wsmaximized;
imgsprite.Top := ceil(clientheight/2);
imgsprite.Left := floor(clientwidth/2);
FTargets[0] := imgmed;
// FTargets[1] := imgmed;
//FTargets[2] := imgmed;
//FTargets[3] := imgmed;
//FTargets[4] := imgmed;
//FTargets[5] := imgmed;
end;
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
case Key of
vk_up:
begin
if bMove = true then
begin
inc(isprite);
Checkcollisions;
if (imgsprite.top >= 0) and (bMove = true) then
begin
imgsprite.top := imgsprite.top - 10;
case iSprite of
1 : imgsprite.Picture.LoadFromFile('standingback.png');
2 : imgsprite.Picture.LoadFromFile('backleft.png');
3 : begin
imgsprite.Picture.LoadFromFile('backright.png');
iSprite := 0;
end;
end;
end
else
iSprite := 0;
end;
end;
VK_DOWN:
begin
if bMove = true then
begin
Checkcollisions;
inc(isprite);
if (imgsprite.top <= clientheight - imgsprite.height) and (bMove = true) then
begin
imgsprite.top := imgsprite.top + 10;
case iSprite of
1 : imgsprite.Picture.LoadFromFile('standing.png');
2 : imgsprite.Picture.LoadFromFile('forwardsleft.png');
3 : begin
imgsprite.Picture.LoadFromFile('forwardsright.png');
iSprite := 0;
end;
end;
end
else
iSprite := 0;
end;
end;
VK_LEFT:
begin
if bMove = true then
begin
Checkcollisions;
inc(isprite);
if (imgsprite.left >= 0) and (bMove = true) then
begin
imgsprite.Left := imgsprite.Left - 10;
case iSprite of
1 : imgsprite.Picture.LoadFromFile('standingleft.png');
2 : imgsprite.Picture.LoadFromFile('leftleft.png');
3 : begin
imgsprite.Picture.LoadFromFile('leftright.png');
iSprite := 0;
end;
end;
end
else
iSprite := 0;
end;
end;
VK_RIGHT:
begin
if bMove = true then
begin
Checkcollisions;
inc(iSprite);
if (imgsprite.Left <= clientwidth - imgsprite.width ) and (bMove = true) then
begin
imgsprite.Left := imgsprite.Left + 10;
case iSprite of
1 : imgsprite.Picture.LoadFromFile('standingright.png');
2 : imgsprite.Picture.LoadFromFile('rightleft.png');
3 : begin
imgsprite.Picture.LoadFromFile('rightright.png');
iSprite := 0;
end;
end;
end
else
iSprite := 0;
end;
end;
end;
end;
any help would be greatly appreciated :D