⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 isocanvasunit.pas

📁 45度tile的一个演示
💻 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 + -