为什么变量在BGE Python中不是全局的
发布时间:2020-12-20 13:48:35 所属栏目:Python 来源:网络整理
导读:我正在尝试使用 Python控制器在Blender Game Engine中制作一个简单的游戏. 我有一个Python控制器连接到脉冲模式的Always传感器和Sphere上称为’first’的游戏属性,它也是受控对象. 我想在游戏第一次运行时运行几行代码,这样它就定义了变量,并且在下次运行时
我正在尝试使用
Python控制器在Blender Game Engine中制作一个简单的游戏.
我有一个Python控制器连接到脉冲模式的Always传感器和Sphere上称为’first’的游戏属性,它也是受控对象. 我想在游戏第一次运行时运行几行代码,这样它就定义了变量,并且在下次运行时它不会覆盖它们. 当我运行下面的代码时,我得到一个错误,即没有定义ForBack和LeftRight变量.但是我可以在if语句中访问它们. 我错过了一些明显或者什么?如果我可以压缩这段代码,请告诉我. import bge from bge import logic cont = bge.logic.getCurrentController() player = cont.owner keyboard = bge.logic.keyboard scene = logic.getCurrentScene() objs = scene.objects ACTIVE = bge.logic.KX_INPUT_ACTIVE first = objs['Sphere']['first'] if(first == True): ForBack = 0.0 LeftRight = 0.0 print('1') print(ForBack) objs['Sphere']['first'] = False if (keyboard.events[bge.events.WKEY] == ACTIVE and ForBack < 50): ForBack += 5 #forward if (keyboard.events[bge.events.SKEY] == ACTIVE and ForBack > -50): ForBack -= 5 #backward if (keyboard.events[bge.events.AKEY] == ACTIVE and LeftRight < 50): LeftRight += 5 #left if (keyboard.events[bge.events.DKEY] == ACTIVE and LeftRight > -50): LeftRight -=5 #right player.applyTorque((ForBack,LeftRight,0),False) 解决方法
只有在第一个if语句的计算结果为True时才会定义它们.您每次都在每次评估的if语句中访问,并在player.applyTorque((ForBack,False)中访问.
您应该在第一个if语句之外设置两者的初始值. ForBack = 0.0 LeftRight = 0.0 if first: ........ 发生的事情很清楚: if(first == True): # evaluates to false first time ForBack = 0.0 LeftRight = 0.0 print('1') print(ForBack) objs['Sphere']['first'] = False # then you get here and ForBack is not defined if (keyboard.events[bge.events.WKEY] == ACTIVE and ForBack < 50): ^^^^^^ 如果您只希望其他人评估初始if语句是否为True,则需要将if嵌套在初始if中. if first == True: ForBack = 0.0 LeftRight = 0.0 print('1') print(ForBack) objs['Sphere']['first'] = False if (keyboard.events[bge.events.WKEY] == ACTIVE and ForBack < 50): ForBack += 5 #forward if (keyboard.events[bge.events.SKEY] == ACTIVE and ForBack > -50): ForBack -= 5 #backward if (keyboard.events[bge.events.AKEY] == ACTIVE and LeftRight < 50): LeftRight += 5 #left if (keyboard.events[bge.events.DKEY] == ACTIVE and LeftRight > -50): LeftRight -=5 #right player.applyTorque((ForBack,False) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |