Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我的函数gameloop()可以';在python中是否将我的游戏和player.rect.x和player.rect.y位置重置为?_Python_Python 3.x_Pygame - Fatal编程技术网

为什么我的函数gameloop()可以';在python中是否将我的游戏和player.rect.x和player.rect.y位置重置为?

为什么我的函数gameloop()可以';在python中是否将我的游戏和player.rect.x和player.rect.y位置重置为?,python,python-3.x,pygame,Python,Python 3.x,Pygame,我在学习pygame(一种小蛇游戏)。当玩家结束游戏时,玩家可以选择退出或重置游戏。在后一种情况下,我再次调用函数gameloop(),这就是我遇到的问题 代码 #创建一个播放器 player=player() #创建所有级别 级别列表=[] 级别列表。附加(级别01。级别01(玩家)) #设置当前级别 当前\u级别\u否=0 当前级别=级别列表[当前级别编号] active\u sprite\u list=pygame.sprite.Group() player.level=当前水平 #球员位

我在学习pygame(一种小蛇游戏)。当玩家结束游戏时,玩家可以选择退出或重置游戏。在后一种情况下,我再次调用函数
gameloop()
,这就是我遇到的问题

代码
#创建一个播放器
player=player()
#创建所有级别
级别列表=[]
级别列表。附加(级别01。级别01(玩家))
#设置当前级别
当前\u级别\u否=0
当前级别=级别列表[当前级别编号]
active\u sprite\u list=pygame.sprite.Group()
player.level=当前水平
#球员位置
player.rect.x=70
player.rect.y=360
活动精灵列表。添加(玩家)
clock=pygame.time.clock()
def gameloop():
#设置布尔值默认值为false
gameExit=False
gameOver=False
不退出游戏时:
#循环游戏结束
如果gameOver==True:
msg_to_屏幕(“您丢失了”,constants.RED,y_displace=-50,size=“large”)
msg_to_屏幕(“按Q退出,按C再次播放”,constants.BLACK,50,size=“中”)
pygame.display.update()
当gameOver==True时:
#循环键退出游戏丹重复游戏
对于pygame.event.get()中的事件:
#活动游戏退出
如果event.type==pygame.QUIT:
gameExit=True
gameOver=False
#事件键或tombol pada saat ditekan
如果event.type==pygame.KEYDOWN:
#退出游戏的配置键Q
如果event.key==pygame.K_q:
gameExit=True
gameOver=False
#配置键C以重试
如果event.key==pygame.K_c:
#gameloop()#调用此函数无效
#怎么做?
通过
#配置播放器控件
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
gameExit=True
如果event.type==pygame.KEYDOWN:
如果event.key==pygame.K_左:
玩家。向左走()
elif event.key==pygame.K_RIGHT:
玩家。向右走()
elif event.key==pygame.K_UP:
player.jump()
#更新播放器。
活动的精灵列表。更新()
#更新级别中的项目
当前_级别。更新()
#如果玩家靠近右侧,将世界向左移动(-x)
如果player.rect.right>=500:
diff=player.rect.right-500
player.rect.right=500
当前级别。移位世界(-diff)
#如果玩家靠近左侧,将世界移动到右侧(+x)
如果player.rect.left=constants.SCREEN_HEIGHT或player.rect.bottom<0:
gameOver=True

在这段代码中,我创建了
gameloop()
函数,就像在教程中一样,如果玩家失败并希望重试,我会调用该函数,但当这种情况发生时,该函数不起作用。玩家无法回到起始位置。

该位置不会重置,因为
gameloop
不会重置该位置。在编程中,更改不是凭空发生的——您必须编写代码来进行这些更改
gameloop
清除两个布尔变量,不执行其他操作

要使这项工作正常进行,您必须确定哪些初始化只需要执行一次(例如创建棋盘级别),以及每个新游戏需要执行哪些初始化。您需要移动
gameloop
中的“每一个游戏”项目,如下所示:

def gameloop():

    # set the current level
    current_level_no = 0
    current_level = level_list[current_level_no]

    active_sprite_list = pygame.sprite.Group()
    player.level = current_level

    # player position
    player.rect.x = 70
    player.rect.y = 360
    active_sprite_list.add(player)

    clock = pygame.time.Clock()

    # set boolean default is false
    gameExit = False
    gameOver = False
我不确定我把它们弄对了;该级别的详细信息和审查超出了堆栈溢出的范围。我希望这一变化将有助于你在游戏编程方面取得进展

def gameloop():

    # set the current level
    current_level_no = 0
    current_level = level_list[current_level_no]

    active_sprite_list = pygame.sprite.Group()
    player.level = current_level

    # player position
    player.rect.x = 70
    player.rect.y = 360
    active_sprite_list.add(player)

    clock = pygame.time.Clock()

    # set boolean default is false
    gameExit = False
    gameOver = False