重置后世界崩溃
The world crashes after reset
我有这个 PyBox2D 函数,我希望所有物体在汽车撞到建筑物时销毁然后重置。
碰撞检测效果很好,世界的破坏也很好,当我尝试重置世界时出现问题。
世界要么崩溃,要么汽车不受控制地移动,要么根本不动。
def _reset():
if len(box2world.bodies) == 0:
for building in skyscrapers:
building.destroy_flag = False
for wheel in cars[0].tires:
wheel.destroy_flag = False
cars[0].destroy_flag = False
create_buildings()
create_car()
cars[0].control()
box2world = world(contactListener=myContactListener(), gravity=(0.0, 0.0), doSleep=True)
您控制的汽车似乎只有列表中的第一辆汽车[0]。
当您撞到建筑物和 _step() 时,您将 cars[0] 的 destroy_flag 设置为 True,然后销毁它们,然后在 _reset 中将其设置回 false。
此外,当您创建汽车时,您将附加到汽车上。您需要将 cars 重置为空列表:您在创建新车时也没有更新 car[0] 的位置,只有列表中的新车。除了不清空摩天大楼列表外,在同一位置还有摩天大楼,在同一位置还有汽车[0]。
这导致了一个永久的 destroy/_reset 场景,它反过来无限地创造汽车和摩天大楼,然后导致它崩溃你的世界。
def _reset():
if len(box2world.bodies) == 0:
for building in skyscrapers:
building.destroy_flag = False
for wheel in cars[0].tires:
wheel.destroy_flag = False
cars[0].destroy_flag = False
skyscrapers=[]
cars = []
#or you could keep your old car and just increase the index
# to do this, instead of calling car[0], your may want to call car[carnum]
#before creating your first car you could set the carnum to 0
#just before creating the new car during reset you would do carnum += 1
#another way would be instead of appending your car to a list you could do cars=[Car()]
create_buildings()
create_car()
cars[0].control()
我有这个 PyBox2D 函数,我希望所有物体在汽车撞到建筑物时销毁然后重置。 碰撞检测效果很好,世界的破坏也很好,当我尝试重置世界时出现问题。 世界要么崩溃,要么汽车不受控制地移动,要么根本不动。
def _reset():
if len(box2world.bodies) == 0:
for building in skyscrapers:
building.destroy_flag = False
for wheel in cars[0].tires:
wheel.destroy_flag = False
cars[0].destroy_flag = False
create_buildings()
create_car()
cars[0].control()
box2world = world(contactListener=myContactListener(), gravity=(0.0, 0.0), doSleep=True)
您控制的汽车似乎只有列表中的第一辆汽车[0]。 当您撞到建筑物和 _step() 时,您将 cars[0] 的 destroy_flag 设置为 True,然后销毁它们,然后在 _reset 中将其设置回 false。 此外,当您创建汽车时,您将附加到汽车上。您需要将 cars 重置为空列表:您在创建新车时也没有更新 car[0] 的位置,只有列表中的新车。除了不清空摩天大楼列表外,在同一位置还有摩天大楼,在同一位置还有汽车[0]。 这导致了一个永久的 destroy/_reset 场景,它反过来无限地创造汽车和摩天大楼,然后导致它崩溃你的世界。
def _reset():
if len(box2world.bodies) == 0:
for building in skyscrapers:
building.destroy_flag = False
for wheel in cars[0].tires:
wheel.destroy_flag = False
cars[0].destroy_flag = False
skyscrapers=[]
cars = []
#or you could keep your old car and just increase the index
# to do this, instead of calling car[0], your may want to call car[carnum]
#before creating your first car you could set the carnum to 0
#just before creating the new car during reset you would do carnum += 1
#another way would be instead of appending your car to a list you could do cars=[Car()]
create_buildings()
create_car()
cars[0].control()