1:FGroupNumber没有任何地方赋值的,因此,对FGroupNumber进行赋值,最佳位置是:TSprite.SetGroupNumber过程,因此,下面代码是修改后的代码:
procedure
TSprite.SetGroupNumber(AGroupNumber: Integer);
begin
if (AGroupNumber <> GroupNumber) and
(Engine <> nil ) then
begin
if Groupnumber >= 0 then
Engine.Groups[GroupNumber].Remove(self);
if AGroupNumber >= 0 then
begin
Engine.Groups[AGroupNumber].Add(self);
// add by zhaogw :Update FGroupNumber is no way
FGroupNumber: = AGroupNumber;
end ;
end ;
end ; { SetGroupNumber }
begin
if (AGroupNumber <> GroupNumber) and
(Engine <> nil ) then
begin
if Groupnumber >= 0 then
Engine.Groups[GroupNumber].Remove(self);
if AGroupNumber >= 0 then
begin
Engine.Groups[AGroupNumber].Add(self);
// add by zhaogw :Update FGroupNumber is no way
FGroupNumber: = AGroupNumber;
end ;
end ;
end ; { SetGroupNumber }
2:有Bug的地方:TSpriteEngine.GetGroup过程,错误原因是判断条件有误,修改后的代码如下:
function
TSpriteEngine.GetGroup(Index: Integer): Tlist;
begin
// if (index >= 0 ) or (index < fGroupCount) then edit by zhaogw ,This is old
if (index >= 0 ) and (index < fGroupCount) then
result : = fGroups[index]
else
result : = nil ;
end ; { GetGroup }
begin
// if (index >= 0 ) or (index < fGroupCount) then edit by zhaogw ,This is old
if (index >= 0 ) and (index < fGroupCount) then
result : = fGroups[index]
else
result : = nil ;
end ; { GetGroup }
这里原来是or的判断条件,用了or后,很明显是无限值来的。因此,这里很明显应该把or改为and。