我如何写一个重复的运动函数不使用全局变量?



我正在用Pygame编写我的第一款游戏,我创建了一个敌人创建函数,以便在给定坐标之间调用敌人。(在while循环中调用)

def foot_function(x_1, x_2, y_foot):
global x
global rubbish_2
global rubbish_3
global rubbish_4
steps = int((x_2 - x_1) / 3)  # numbers of steps between x_1 and x_2
if rubbish_3:
rubbish_2 += 1
if not rubbish_3:
rubbish_2 -= 1
if rubbish_2 >= steps:
rubbish_3 = not rubbish_3
rubbish_4 = 'right'
if rubbish_2 < 0:
rubbish_3 = not rubbish_3
rubbish_4 = 'left'
if rubbish_4 == 'right':
window.blit(foot_right, (x_1 + 3 * rubbish_2 - x, y_foot))
if rubbish_4 == 'left':
window.blit(foot_left, (x_1 + 3 * rubbish_2 - x, y_foot))
death_function(x_1 + 3 * rubbish_2 + 5, y_foot + 5, 90, 90)

问题是因为我在这个函数内使用全局变量;如果我尝试再次调用这个函数,两个敌人会做同样的移动,尽管我给他们不同的输入。

我该如何解决这个问题?提前谢谢。

如果我理解你的问题,你正试图编写一个有状态的更新函数,而不保持全局状态。我知道有两种方法可以比较理智地做到这一点。

你基本上做了你对全局变量所做的事情,但在对象中存储的状态。例如,这允许您同时运行两个独立的FootClass对象。

class FootClass():
def __init__(self, x_1, x_2):
self.x_1 = x_1
self.x_2 = x_2
def move(self, dx_1, dx_2):
self.x_1 += dx_1
self.x_2 += dx_2
...

功能第二种方法是让正在运行的程序保持当前状态,然后编写一个更新函数。

def move_func(x_1, x_2, dx_1, dx_2):
return (x_1 + dx_1, x_2 + dx_2)
def game():
init = (1, 2)
while not_dead():
init = move_func(*init, 2, 5)

这是一个奇怪的例子,因为我真的不知道你具体想做什么,但这是一个大致的想法。

最新更新