.dat文件加载例程

时间:2014-01-17 23:47:42

标签: delphi delphi-2007

好的,所以我有一个旧的8位游戏,可以为不同大小的光照贴图加载6个.dat文件。

有些事情如下:

const
  MAX_LIGHT_COUNT = 5;
  LFiles : array[0..MAX_LIGHT_COUNT] of string = (
    '.\L00.dat',
    '.\L01.dat',
    '.\L02.dat',
    '.\L03.dat',
    '.\L04.dat',
    '.\L05.dat'
   );

type
  TLights = record
    Width  : Integer;
    Height : Integer;
    PDark  : PByte;
  end;

var
  LightArr: array[0..MAX_LIGHT_COUNT] of TLights;   

Procedure InitializeLight();
var
  PreviousSize: Integer;
  i: Integer;
  fHandle: Integer;
  Width, Height: Integer;
begin
  PreviousSize := 0;

  for i := 0 to MAX_LIGHT_COUNT do
  begin
    if FileExists(LFiles[i]) then
    begin
      fHandle := FileOpen(LFiles[i], fmOpenRead or fmShareDenyNone);

      FileRead(fHandle, Width,  SizeOf(Integer));
      FileRead(fHandle, Height, SizeOf(Integer));

      LightArr[i].Width  := Width;
      LightArr[i].Height := Height;
      LightArr[i].PDark  := AllocMem(Width * Height + 8);

      if PreviousSize < Width * Height then
        FileRead(fHandle, LightArr[i].PDark^, Width * Height);
      PreviousSize := Width * Height;

      FileClose(fHandle);
    end;
  end;
end;

现在我需要为一些新的.dat文件创建一个编辑器。我有一个什么去基本上逆转什么在那里,并使用FillChar填充刚刚以正方形结束的数组,而不是光照贴cirlce看起来有意义,认为我缺少一些非常重要的操纵X,Y。

有些事情:

PDark := @LightArr[i].PDark;
for Y := 0 to Height - 1 do
begin
  for X := 0 to Width - 1 do
  begin
    // Do something with PDark
  end;
end;

然后会给我那个圆圈外观。

如有必要,请下载LFiles.rar

编辑:对不起杰瑞如果遇到这种情况,我不希望别人为我编写代码,只是想确保我朝着正确的方向前进,也许会得到一点帮助和其他一些尝试出。

注意:如果人们感到困惑,附加的下载不是源文件,而是游戏加载的.dat文件。上传以防万一人们希望看到我的二进制文件与他们的文件相比。基本上比较输出,看看是否在正确的轨道等..我不知道。

这是我尝试过的,但它缺少某种圆圈的操作代码:

for i := 0 to MAX_LIGHT_COUNT do
  begin
    if FileExists(LFiles[i]) then
      fHandle := FileOpen(LFiles[i], fmOpenWrite or fmShareDenyNone)
    else fHandle := FileCreate(LFiles[i]);

    if fHandle > 0 then
    begin
      Width  := 196;
      Height := 176;

      FileWrite(fHandle, Width,  SizeOf(Integer));
      FileWrite(fHandle, Height, SizeOf(Integer));

      LightArr[i].Width  := Width;
      LightArr[i].Height := Height;

      LightArr[i].Fog    := AllocMem(Width * Height + 8);
      FillChar(LightArr[i].Fog^, LightArr[i].Width * LightArr[i].Height + 8, Width * Height);

      FileWrite(fHandle, LightArr[i].Fog^, Width * Height);

      FileClose(fHandle);
    end;
  end;

感谢阅读。

0 个答案:

没有答案