我是flatBuffers的新手,但不幸的是,Google Tutorial并不十分清楚,所以这是我的问题:
- 是否可以在不使用表的情况下在flatBuffer Union中具有多个对象实例?
- 如果是,如何检索它们?
我根据教程尝试了以下代码:
import os
import sys
sys.path.append(os.path.join(os.path.dirname(__file__),'../python'))
import flatbuffers
import MyGame.Sample.Color
import MyGame.Sample.Equipment
import MyGame.Sample.Monster
import MyGame.Sample.Vec3
import MyGame.Sample.Weapon
# Example of how to use flatBuffers to create and read binary buffers.
def main():
builder = flatbuffers.Builder(0)
# Create some weapons for our Monster ('Sword' and 'Axe').
weapon_one = builder.CreateString('Sword')
weapon_two = builder.CreateString('Axe')
MyGame.Sample.Weapon.WeaponStart(builder)
MyGame.Sample.Weapon.WeaponAddName(builder,weapon_one)
MyGame.Sample.Weapon.WeaponAddDamage(builder,3)
sword = MyGame.Sample.Weapon.WeaponEnd(builder)
MyGame.Sample.Weapon.WeaponStart(builder)
MyGame.Sample.Weapon.WeaponAddName(builder,weapon_two)
MyGame.Sample.Weapon.WeaponAddDamage(builder,5)
axe = MyGame.Sample.Weapon.WeaponEnd(builder)
# Serialize the flatBuffer data.
name = builder.CreateString('Orc')
MyGame.Sample.Monster.MonsterStartInventoryVector(builder,10)
# Note: Since we prepend the bytes,this loop iterates in reverse order.
for i in reversed(range(0,10)):
builder.PrependByte(i)
inv = builder.EndVector(10)
MyGame.Sample.Monster.MonsterStartWeaponsVector(builder,2)
# Note: Since we prepend the data,prepend the weapons in reverse order.
builder.PrependUOffsetTRelative(axe)
builder.PrependUOffsetTRelative(sword)
weapons = builder.EndVector(2)
pos = MyGame.Sample.Vec3.CreateVec3(builder,1.0,2.0,3.0)
MyGame.Sample.Monster.MonsterStart(builder)
MyGame.Sample.Monster.MonsterAddPos(builder,pos)
MyGame.Sample.Monster.MonsterAddHp(builder,300)
MyGame.Sample.Monster.MonsterAddName(builder,name)
MyGame.Sample.Monster.MonsterAddInventory(builder,inv)
MyGame.Sample.Monster.MonsterAddColor(builder,MyGame.Sample.Color.Color().Red)
MyGame.Sample.Monster.MonsterAddWeapons(builder,weapons)
# Equiping the first Weapon
MyGame.Sample.Monster.MonsterAddEquippedType(
builder,MyGame.Sample.Equipment.Equipment().Weapon)
MyGame.Sample.Monster.MonsterAddEquipped(builder,axe)
# Equiping the second Weapon
MyGame.Sample.Monster.MonsterAddEquippedType(
builder,sword)
orc = MyGame.Sample.Monster.MonsterEnd(builder)
builder.Finish(orc)
以下代码不会产生错误,但是在读取数据时,似乎只能获取最后添加的武器(该变量被覆盖)。那是预期的行为吗?
谢谢:)