TMapBlocksのインスタンスを生成しましょう。
まだ変数が定義されてないので、
Formのpublicに追加します。
public
{ Public 宣言 }
BackScreen:TBitmap;
b_img:TBitmap;
MapBlocks:TMapBlocks;
procedure CopyBlockImageToField(x,y:integer;block:TBitmap);
end;
procedureより上です。注意してください。
では、生成、解放部分を書きましょう。
FormのonCreate/onCloseです。
procedure TForm1.FormCreate(Sender: TObject);
begin
BackScreen:=TBitmap.Create;
BackScreen.Width:=150;
BackScreen.Height:=300;
BackScreen.Canvas.Brush.Style:=bsSolid;
BackScreen.Canvas.Pen.Style:=psSolid;
BackScreen.Canvas.Pen.Mode:=pmCopy;
b_img:=TBitmap.Create;
b_img.LoadFromFile(
ExtractFilePath(Application.ExeName)+'block.bmp'
);
MapBlocks:=TMapBlocks.Create;
MapBlocks.Blocks[19,2]:=True;
MapBlocks.Blocks[19,3]:=True;
MapBlocks.Blocks[19,4]:=True;
MapBlocks.Blocks[19,5]:=True;
MapBlocks.Blocks[19,6]:=True;
MapBlocks.Blocks[18,3]:=True;
MapBlocks.Blocks[18,4]:=True;
MapBlocks.Blocks[18,5]:=True;
MapBlocks.Blocks[17,4]:=True;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
MapBlocks.Free;
b_img.Free;
BackScreen.Free;
end;
なんか、だらだらとBlocksをいじっていますが、
テストのためなので、最終的には取ります。
そしたら、いよいよ表示させましょう。
Timer1.onTimerのメインルーチンを編集します。
procedure TForm1.Timer1Timer(Sender: TObject);
begin
with BackScreen.Canvas do begin
Brush.Color:=clBlack;
FillRect(Rect(0,0,150,300));
end;
MapBlocks.Draw;
PaintBox1.Canvas.Draw(0,0,BackScreen);
end;
with の部分は、画面塗りつぶし、
PaintBoxは、裏画面転送ですから、
その間に書くわけです。
おおっと、うまくいかないと思ったらバグがあった。
function TMapBlocks.isBlock(x,y:integer):Boolean;
の最後の行を、
Result:=Blocks[x,y];//そのまま返す
↓
Result:=Blocks[y,x];//そのまま返す
いやぁ、Blocksの定義、yが先なのは絶対ミスでしたね。
どんまいどんまい。
これで実行すると、
っぽくなってきましたよ。。。
コンテンツ
最新の12件
2023-06-12
2021-02-15
2013-06-19
2012-07-14
2012-02-04
2012-01-06
2011-03-31
2010-08-26
2010-03-15
2009-10-21
2009-02-12
2008-11-18
メニュー編集
- counter: 1039
- today: 1
- yesterday: 0
- online: 2