【发布时间】:2014-01-07 04:44:42
【问题描述】:
我正在为游戏创建代码,当您的鼠标悬停在敌人上方并点击敌人时,您的角色会追逐敌人。因此,我将敌人创建为变量,因为如果单击的只是任意对象,我不希望角色追逐敌人。然后代码检查属性“enemy”是否在单击的对象内,如果是,则该对象追逐该对象。
if click.positive:
obj = mouse.hitObject
if 'enemy' in obj:
own['attack'] = 1
else:
own['attack'] = 0
当 own['attack'] = 1 时,玩家追逐敌人,但是编译器说 obj 不存在。但是,它在最初单击鼠标时确实存在,但之后不存在。我知道该变量仅在单击鼠标时才存在,因为如果未单击鼠标,则它永远不会分配变量。但是我怎么能纠正它,如果敌人被点击一次,玩家将继续追逐敌人,直到点击其他东西?
这是我遇到的错误
NameError: global name 'obj' is not defined
如果您想通读一遍,这就是整个代码,它也是在搅拌机中编码的,如“import bge”所示:
import bge
cont = bge.logic.getCurrentController()
own = cont.owner
scene = bge.logic.getCurrentScene()
flagEmpty = scene.objects['Flag Empty']
flag = scene.objects['Flag']
enemy = scene.objects['Enemy Physics Box']
mouse = cont.sensors[1]
click = cont.sensors[0]
track = cont.actuators[0]
message = cont.actuators[1]
blur = cont.actuators[2]
hit = mouse.hitPosition
distance = own.getDistanceTo(flagEmpty)
enemyDistance = own.getDistanceTo(enemy)
if 'init' not in own:
own['init'] = True
own['fric'] = .85
own['maxspd'] = 5
own['speed'] = 0.0
own['accel'] = .2
own['attack'] = obj
def main():
if click.positive:
global obj
obj = mouse.hitObject
if 'enemy' in obj:
own['attack'] = obj
if 'enemy' not in obj:
own['attack'] = obj
if own['attack'] == obj:
attack()
if own['attack'] == None:
free()
def free():
if own['attack'] == None:
cont.deactivate(blur)
if click.positive:
if hit.z < -.34:
if hit.z > -.36:
flagEmpty.position = hit
if distance > 1:
own['speed'] += own['accel']
cont.activate(message)
cont.activate(track)
flag.visible = True
else:
own['speed'] *= own['fric']
cont.deactivate(track)
cont.deactivate(message)
flag.visible = False
speed()
def attack():
enemyDist = own.getDistanceTo(obj)
if own['attack'] == obj:
cont.activate(blur)
blur.object = obj
if enemyDist > 1.2:
own['speed'] += own['accel']
cont.activate(message)
else:
own['speed'] *= own['fric']
cont.deactivate(message)
speed()
def speed():
if own['speed'] > own['maxspd']:
own['speed'] = own['maxspd']
own.setLinearVelocity([0,own['speed'],0], True)
main()
【问题讨论】:
-
您将不得不包含更多相关代码。可能是错误消息的实际回溯?
-
这可能是几个可能的错误中的任何一个。我们无法从显示的代码片段中分辨出来。
-
您确定编译器抱怨的是
obj,而不是own?
标签: python variables if-statement