0

这有点令人困惑,但会尽力解释它。请询问您是否需要更多详细信息。

首先,我有一个名为TPlayersLike so 的课程。

TPlayers = class
   Private
      p : array[1..20] of TStringList;
      function GetPlayer(i:integer): TStringList;

    Public
      Property player[i : integer] : TStringList read GetPlayer;

           constructor Create;   virtual;
    implementation

    uses
    main;
    {constructor}
       constructor TPlayers.Create;
       begin
         p[1] := TStringList.Create;
         p[2] := TStringList.Create;
         p[3] := TStringList.Create;
         p[4] := TStringList.Create;
         p[5] := TStringList.Create;
         p[6] := TStringList.Create;
       end;

     function TPlayers.GetPlayer(i: integer): TStringList;
    begin
      Result := p[i];
    end;

我现在必须FTherePlayers := TPlayers.Create创建类。我第一次像这样添加到字符串列表

FTherePlayers.Player[strtoint(name2)].Add('posx='+inttostr(posL.x));

或取出变量

FTherePlayers.Player[1].Add('posx=15');

这似乎很好,但接下来我尝试像这样更新它

FTherePlayers.Player[strtoint(ID)].Values['posx='] := xpos;

或取出变量

FTherePlayers.Player[1].Values['posx='] := 12; 

但是然后我在更改它后检查该值,它仍然显示 15,因此当我这样做时

showmessage(fthereplayers.player[1].Values['posx']);

它返回 15 但应该是 12。知道为什么它没有改变吗?谢谢格伦

4

1 回答 1

5

您在属性Name索引值的末尾有一个额外的等号。Values您只需使用不带等号的名称值对的名称部分。因此,在您的代码中只需替换以下几行:

// here is an extra equals sign in 'posx=' index value
FTherePlayers.Player[1].Values['posx='] := 12;
FTherePlayers.Player[strtoint(ID)].Values['posx='] := xpos;

有了这个:

FTherePlayers.Player[1].Values['posx'] := 12; 
FTherePlayers.Player[strtoint(ID)].Values['posx'] := xpos;
于 2012-11-15T12:42:29.110 回答