📄 isocanvasunit.pas
字号:
unit IsoCanvasUnit;
// *****************************************
// * isoCanvas - IsoCanvas is a Isometric *
// * engine example that uses only the *
// * Windows GDI through Delphi's Canvas *
// * (c) 2000 Michael Wilson *
// *
// * DelphiX conversion done by *
// * Alexander Rosendal *
// * http://wwww.a-rosendal.com *
// *****************************************
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Menus, ImgList, ComCtrls, ToolWin, ExtCtrls, isoMath, CheckLst,
DXClass, DXDraws;
const
maxmapwidth = 512; // fairly big map at a 128x64 tile
maxmapheight = 2048; // gets a 65000 x 65000 pixel map
isoheight = 32; // defaults (don't change unless you load
isowidth = 64; // new images)
mapwidth = 25; // start with a small portion of
mapheight = 75; // what a map can be
safeedge = 0; // don't go past safe edge
tileImages = 8; //Alexander number of images used in the editor
type
TIsoTile = record
imagenr: integer; //changed image into imagenr
selected: boolean;
end;
type
TIsoMap = array[0..maxmapwidth, 0..maxmapheight] of TIsoTile;
type
TIsoTileExtended = record
x, y: integer;
enabled: boolean;
end;
type
TmainForm = class(TForm)
openDXG: TOpenDialog;
savedialogmap: TSaveDialog;
opendialogmap: TOpenDialog;
iconImageList: TImageList;
pagecontrolpanel: TPanel;
PageControl: TPageControl;
tilessheet: TTabSheet;
tilepreview: TImage;
tilelist: TCheckListBox;
leftrightsplit: TSplitter;
saveconst: TSaveDialog;
ToolBar1: TToolBar;
aboutbutton: TToolButton;
ToolButton2: TToolButton;
gridbutton: TToolButton;
dxtilelist: TImageList;
StatusBar: TStatusBar;
DXTimer1: TDXTimer;
DXImageList1: TDXImageList;
ToolButton1: TToolButton;
ToolButton3: TToolButton;
ToolButton4: TToolButton;
ToolButton5: TToolButton;
DXDraw1: TDXDraw;
procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure FormCreate(Sender: TObject);
procedure tilelistClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure aboutbuttonClick(Sender: TObject);
procedure DXTimer1Timer(Sender: TObject; LagCount: Integer);
procedure DXDraw1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure DXDraw1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure DXDraw1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure DXDraw1Initialize(Sender: TObject);
procedure ToolButton4Click(Sender: TObject);
procedure ToolButton5Click(Sender: TObject);
procedure ToolButton3Click(Sender: TObject);
private
{ Private declarations }
public
IsoMap: TIsoMap; // our map
IsoRecord : TIsoTile;
IsoRecordFile : File of TIsoTile; //Alexander: With this we can save our map to a file
xoffset, yoffset: integer; // where map begins on screen
mx, my: integer; // mouse co-ords
sx, sy, ox, oy: integer; // scroll co-ords
tilex, tiley: integer; // current tile
kup, kdown, kleft, kright: boolean; // keyboard scrolling
showgrid: boolean; // show grid
mousedraw: boolean; // drag drawing
scroll: boolean; // scroll via right mouse
images: array [0..tileImages] of TDirectDrawSurface; //Alexander: Array from images
procedure loadImagesFromImageList(nr:byte); //Alexander: a procedure which loads the picture into memory
{ Public declarations }
end;
var
mainForm: TmainForm;
implementation
{$R *.DFM}
// *** Initialization ***
procedure TmainForm.FormCreate(Sender: TObject);
var loopx, loopy: integer;
begin
tilelist.itemindex := 0; // first tile
xoffset := 0 + isowidth; // start at upper left corner
yoffset := 0 + isoheight;
for loopx := 0 to maxmapwidth do
for loopy := 0 to maxmapheight do
begin
IsoMap[loopx, loopy].imagenr := 0; // reset map to clear
end;
end;
procedure TmainForm.loadImagesFromImageList(nr:byte);
var counter : integer;
begin
//Alexander: Load images from DXimageslist into memory and set transparency
for counter := 0 to nr do
begin
images[counter] := TDirectDrawsurface.Create(DXDraw1.ddraw);
images[counter].LoadFromGraphic(DXImagelist1.items.items[counter].picture.graphic);
images[counter].TransparentColor:=dximagelist1.Items.Items[0].TransparentColor;
end;
end;
//Alexander: call the loadImagesFromImageList procedure to
procedure TmainForm.DXDraw1Initialize(Sender: TObject);
begin
loadImagesFromImageList(tileImages);
DXtimer1.Enabled:=true;
end;
procedure TmainForm.aboutbuttonClick(Sender: TObject);
begin
MessageDlg('IsoCanvas v0.01 | http://turbo.gamedev.net |
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -