好的,所以我有一个旧的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;
感谢阅读。