加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

为什么变量在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)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读