如何解决如何在不使用全局变量的情况下编写重复移动函数?
我正在 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,y_foot))
death_function(x_1 + 3 * rubbish_2 + 5,y_foot + 5,90,90)
问题是因为我在这个函数中使用了全局变量;如果我再次尝试调用此函数,尽管我给了他们不同的输入,但 2 个敌人会做相同的动作。
我该如何解决这个问题?提前致谢。
解决方法
如果我理解你的问题,你正在尝试编写一个有状态的更新函数而不保持全局状态。我知道有两种方法可以稍微理智地做到这一点。
类
您基本上可以对全局变量执行相同的操作,但处于存储在对象中的状态。例如,这允许您同时运行两个独立的 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_2):
return (x_1 + dx_1,x_2 + dx_2)
def game():
init = (1,2)
while not_dead():
init = move_func(*init,2,5)
这是一个奇怪的例子,因为我不太了解您具体要做什么,但这是总体思路。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。