我已经写了一个for loop(见下文),以检查一个对象实例是否与其他四个对象实例相撞,如果发生碰撞,该函数应返回一个,以启动另一个反应链。for循环是四次运行 - 它只能通过一次,因此它没有检测到与三个受体的碰撞。
def spriteCollide(neurotransmitter1):
print len(receptors)
for i in range(len(receptors)):
return receptors[i].receptorObjectInstance.colliderect(neurotransmitter1.neurotransmitterObjectInstance)
您可以看到,FO循环应根据包含四个受体对象地址的列表的长度进行操作。经过一会儿,它将第一次运行&然后打破循环。
我尝试包括所有内容
谢谢,
第一次到达return
语句时,周期退出。存储结果,然后返回存储的值:
def spriteCollide(neurotransmitter1):
result = []
print len(receptors)
for i in range(len(receptors)):
result.append(receptors[i].receptorObjectInstance.colliderect(neurotransmitter1.neurotransmitterObjectInstance)
return result
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
发生了更改,将更容易弄清楚为什么。
正如已经提到的那样,循环(和函数)击中返回后立即退出。您应该将返回声明放在条件下。
例如(假设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
我们可以使它变得更好!
def spriteCollide(receptors,neurotransmitter):
return any( [True if
receptorObjectInstance.colliderect(neurotransmitter.neurotransmitterObjectInstance)
else False for receptor in receptors] )
这是根据每个受体是否与您通过的神经递质碰撞的True
S和False
S列表。如果其中任何一个碰撞,它将返回True
,如果没有碰撞,则False
。