First Time Isometric Tiling Engine Problem...
I have a 22*22 "arena" with Civ II sytle control with the mouse.
How can I *accurately* detect which tile has been clicked on? My solution is "somewhat jumbled" and is only 90% accurate.
You could just ignore my code and point me to an article/website, any help will be gratefully recieved. Be nice, this is my first try! It does work.
Cheers, Nop_90h
Here is the delphi code: -
++++++++++++++++++++++++++
function TForm1.CalcYcoord(X,Y:Integer):Integer;
var
StartY:Integer;
begin
StartY := (DX.SurfaceHeight div 2);
Result := StartY + (TileImages.Items.Items[0].Height*Y - TileImages.Items.Items[0].Height*X) div 2;
end;
function TForm1.CalcXcoord(X,Y:Integer):Integer;
var
StartX:Integer;
begin
StartX := 3 - TileImages.Items.Items[0].Width;
Result := StartX + (TileImages.Items.Items[0].Width*X + TileImages.Items.Items[0].Width *Y) div 2;
end;
procedure TForm1.DXMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
XTile,YTile:Double;
SuccessfulMove: Boolean;
Temp: TCharacter;
Str: String[32];
begin
SuccessfulMove := False;
YTile := (Y - (DX.SurfaceHeight div 2)- (TileImages.Items.Items[0].Height div 2)) / TileImages.Items.Items[0].Height;
XTile := (X - (3-TileImages.Items.Items[0].Width)) / TileImages.Items.Items[0].Width;
X := Trunc(XTile) - Trunc(YTile);
Y := Trunc(XTile) + Trunc(YTile);
If (Abs(YTile - Trunc(YTile)) < 0.70 ) AND (Abs(YTile - Trunc(YTile)) > 0.30 ) Then
begin
If (Abs(XTile - Trunc(XTile)) > 0.70 ) Then
begin
Temp.X := X;
Temp.Y := Y;
If YTile > 0 Then Temp.Y := Temp.Y + 1
else Temp.X := Temp.X + 1;
SuccessfulMove := True;
end
else If (Abs(XTile - Trunc(XTile)) < 0.30 ) Then
begin
Temp.X := X;
Temp.Y := Y;
If YTile > 0 Then Temp.X := Temp.X - 1
else Temp.Y := Temp.Y - 1;
SuccessfulMove := True;
end;
end
else IF (Abs(XTile - Trunc(XTile)) < 0.70 ) AND (Abs(XTile - Trunc(XTile)) > 0.30 ) Then
begin
Temp.X := X;
Temp.Y := Y;
SuccessfulMove := True;
end;
Try here. He (TANSTAAFL) even mentions that he got his method of tile selection from looking at how Civ II did it (don't that beat all).
[edited by - SysOp_1101 on August 5, 2003 11:39:14 PM]
[edited by - SysOp_1101 on August 5, 2003 11:39:14 PM]
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement