Closed flw-cn closed 2 years ago
比如实体销毁报文 pkid.EntityDestroy,它的结构是这样的:
pkid.EntityDestroy
"packet_entity_destroy": [ "container", [ { "name": "entityIds", "type": [ "array", { "countType": "varint", "type": "varint" } ] } ] ],
p.Data 开始是一个 VarInt 类型的数量值,然后是销毁的实体 IDs。 当我用 packet.Scan 来解析它的时候,我需要先 p.Scan 取到数量,然后再循环取每个 ID,就像这样:
p.Data
VarInt
packet.Scan
p.Scan(&count) for i := pk.VarInt(0); i < count; i++ { var id pk.VarInt p.Scan(&id) log.Printf("ID: %v", id) }
但是这样每次取到的 ID 实际上都是 count。为此我看了 Scan 的源代码,发现它并没有修改 p.Data,所以每次 Scan 实际上都是重新开始。这样感觉有些不太合理。
哦,我明白了,也许我应该用 pk.Ary。
pk.Ary
比如实体销毁报文
pkid.EntityDestroy
,它的结构是这样的:p.Data
开始是一个VarInt
类型的数量值,然后是销毁的实体 IDs。 当我用packet.Scan
来解析它的时候,我需要先 p.Scan 取到数量,然后再循环取每个 ID,就像这样:但是这样每次取到的 ID 实际上都是 count。为此我看了 Scan 的源代码,发现它并没有修改
p.Data
,所以每次 Scan 实际上都是重新开始。这样感觉有些不太合理。