我编写了一个for循环(见下文)来检查一个对象实例是否与任何其他四个对象实例发生冲突,如果发生碰撞,该函数应返回一个,以启动另一个反应链。 for循环意味着运行四次 - 它只运行一次,因此它不会检测到与三个受体的碰撞。
def spriteCollide(neurotransmitter1):
print len(receptors)
for i in range(len(receptors)):
return receptors[i].receptorObjectInstance.colliderect(neurotransmitter1.neurotransmitterObjectInstance)
如您所见,for循环应基于包含四个受体对象的地址的列表长度来运行。经过一段时间后,它将第一次运行&然后打破循环。
我试图包含所有内容
谢谢,
答案 0 :(得分:2)
循环在第一次到达return
语句时退出。存储结果,然后返回存储的值:
def spriteCollide(neurotransmitter1):
result = []
print len(receptors)
for i in range(len(receptors)):
result.append(receptors[i].receptorObjectInstance.colliderect(neurotransmitter1.neurotransmitterObjectInstance)
return result
答案 1 :(得分:2)
return
将停止一个函数并返回该值。如果您想要所有值,请尝试将它们附加到列表/词典并返回它。
def spriteCollide(neurotransmitter1, receptors): # add receptors as a param
values = [] # create an empty list to store you processed data
print len(receptors) # I assume this was for testing
for i in range(len(receptors)):
values.append(receptors[i].receptorObjectInstance.colliderect(neurotransmitter1.neurotransmitterObjectInstance)) # appends the reulst of collideDirect() to values
return values # returns the list so you can use it.
您还应该考虑将receptors
作为函数的参数传递。将所有内容保持在正确的范围内会更容易,如果由于函数外部receptors
的更改而出现问题,则更容易找出原因。
答案 2 :(得分:0)
正如已经提到的,循环(和函数)一旦返回就退出。你应该把你的return语句置于IF条件下。
例如(假设colliderect()返回1或0 ...或True或False)如果发生任何碰撞,则应返回1:
def spriteCollide(neurotransmitter1):
print len(receptors)
for i in range(len(receptors)):
if receptors[i].receptorObjectInstance.colliderect(neurotransmitter1.neurotransmitterObjectInstance):
return 1
return 0
答案 3 :(得分:0)
我们可以做得更好!
def spriteCollide(receptors,neurotransmitter):
return any( [True if
receptorObjectInstance.colliderect(neurotransmitter.neurotransmitterObjectInstance)
else False for receptor in receptors] )
根据每个受体是否与您传递的神经递质发生碰撞,构建True
和False
的列表。如果其中任何一个发生碰撞,则返回True
,如果没有碰撞,则返回False
。