Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.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
Python Pygame运动图像不出现在运动背景上_Python_Background_Pygame_Character - Fatal编程技术网

Python Pygame运动图像不出现在运动背景上

Python Pygame运动图像不出现在运动背景上,python,background,pygame,character,Python,Background,Pygame,Character,所以,我的pygame有一个移动的背景,运行良好。现在我想添加一个障碍物(像一块石头),它将位于屏幕底部,并随着背景移动。然而,图像(障碍物)在出现几秒钟后就消失了。我想让石头一次又一次地出现,但是它没有出现。我想不出有什么问题。请帮忙,谢谢 background = pygame.image.load('background.png') backgroundX = 0 backgroundX2 = background.get_width() obstacle = pygame.image.l

所以,我的pygame有一个移动的背景,运行良好。现在我想添加一个障碍物(像一块石头),它将位于屏幕底部,并随着背景移动。然而,图像(障碍物)在出现几秒钟后就消失了。我想让石头一次又一次地出现,但是它没有出现。我想不出有什么问题。请帮忙,谢谢

background = pygame.image.load('background.png')
backgroundX = 0
backgroundX2 = background.get_width()
obstacle = pygame.image.load('obstacle.png')
obstacleX = 0
obstacleX2 = obstacle.get_width()


# use procedure for game window rather than using it within loop
def redrawGameWindow():
    # background images for right to left moving screen
    screen.blit(background, (backgroundX, 0))
    screen.blit(background, (backgroundX2, 0))
    man.draw(screen)
    screen.blit(obstacle, (obstacleX, 380))
    screen.blit(obstacle, (obstacleX2, 380))
    pygame.display.flip()
    pygame.display.update()
主回路:

while run:
    screen.fill(white)
    clock.tick(30)
    pygame.display.update()
    redrawGameWindow()  # call procedure

    obstacleX -= 1.4
    obstacleX2 -= 1.4

    if obstacleX < obstacle.get_width() * -10:
        obstacleX = obstacle.get_width

    if obstacleX2 < obstacle.get_width() * -10:
        obstacleX2 = obstacle.get_width()   
运行时:
屏幕填充(白色)
时钟滴答(30)
pygame.display.update()
重画GameWindow()#调用过程
obstacleX-=1.4
障碍2-=1.4

如果obstacleX<障碍物,则获取_width()*-10: obstacleX=障碍物。获取宽度 如果obstacleX2<障碍物,则获取_width()*-10: obstacleX2=障碍物。获取_宽度()
函数
surface.blit()
(即:screen.blit)获取图像和绘制位置的左上角坐标

在提供的代码中,
障碍物
的两个副本绘制在
obstacleX
obstacleX 2
-其中一个设置为
0
,另一个设置为图像的宽度。因此,这将导致在窗口左侧第380行,两个图像相邻绘制

如果这些图像在一段时间后不再被绘制,这可能是由于-

  • 变量
    obstacleX
    obstacleX2
    更改为屏幕外位置
  • 正在将图像
    障碍物
    更改为空白(或不可见)版本
上面的小代码示例中没有证据,但由于问题表明图像在移动,我猜测绘图位置的
obstacleX
obstacleX 2
坐标正在更改为屏幕外坐标

编辑:

很明显,您的对象从位置
0
(窗口左侧)开始,位置正在更新
obstacleX-=1.4
,这将使障碍物进一步向左移动。这就是为什么它们开始出现在屏幕上,但很快就消失了

将屏幕尺寸设置为常量,例如:

WINDOW_WIDTH  = 400
WINDOW_HEIGHT = 400
使用这些,而不是在代码中添加数字。如果您决定更改窗口大小,这将减少所需的更改数量,并且还允许基于窗口宽度进行计算

因此,从屏幕上开始设置障碍物

obstacleX  = WINDOW_WIDTH          # off-screen
obstacleX2 = WINDOW_WIDTH + 100    # Further away from first obstacle
在主更新循环中,当项目的位置发生变化时,检查是否需要将其重新循环到播放器前面:

# Move the obstacles 1-pixel to the left
obstacleX  -= 1.4
obstacleX2 -= 1.4   # probably just 1 would be better  

# has the obstacle gone off-screen (to the left)
if ( obstacleX < 0 - obstacle.get_width() ):   
    # move it back to the right (off-screen)
    obstacleX = WINDOW_WIDTH + random.randint( 10, 100 )  

# TODO - handle obstacleX2 similarly
#将障碍物向左移动1像素
obstacleX-=1.4
obstacleX2-=1.4#可能只有1会更好
#障碍物是否离开屏幕(左侧)
如果(obstacleX<0-障碍物。获取_宽度()):
#将其移回右侧(屏幕外)
obstacleX=WINDOW\u WIDTH+random.randint(10100)
#TODO-类似地处理obstacleX2
函数
surface.blit()
(即:screen.blit)获取图像和绘制位置的左上角坐标

在提供的代码中,
障碍物
的两个副本绘制在
obstacleX
obstacleX 2
-其中一个设置为
0
,另一个设置为图像的宽度。因此,这将导致在窗口左侧第380行,两个图像相邻绘制

如果这些图像在一段时间后不再被绘制,这可能是由于-

  • 变量
    obstacleX
    obstacleX2
    更改为屏幕外位置
  • 正在将图像
    障碍物
    更改为空白(或不可见)版本
上面的小代码示例中没有证据,但由于问题表明图像在移动,我猜测绘图位置的
obstacleX
obstacleX 2
坐标正在更改为屏幕外坐标

编辑:

很明显,您的对象从位置
0
(窗口左侧)开始,位置正在更新
obstacleX-=1.4
,这将使障碍物进一步向左移动。这就是为什么它们开始出现在屏幕上,但很快就消失了

将屏幕尺寸设置为常量,例如:

WINDOW_WIDTH  = 400
WINDOW_HEIGHT = 400
使用这些,而不是在代码中添加数字。如果您决定更改窗口大小,这将减少所需的更改数量,并且还允许基于窗口宽度进行计算

因此,从屏幕上开始设置障碍物

obstacleX  = WINDOW_WIDTH          # off-screen
obstacleX2 = WINDOW_WIDTH + 100    # Further away from first obstacle
在主更新循环中,当项目的位置发生变化时,检查是否需要将其重新循环到播放器前面:

# Move the obstacles 1-pixel to the left
obstacleX  -= 1.4
obstacleX2 -= 1.4   # probably just 1 would be better  

# has the obstacle gone off-screen (to the left)
if ( obstacleX < 0 - obstacle.get_width() ):   
    # move it back to the right (off-screen)
    obstacleX = WINDOW_WIDTH + random.randint( 10, 100 )  

# TODO - handle obstacleX2 similarly
#将障碍物向左移动1像素
obstacleX-=1.4
obstacleX2-=1.4#可能只有1会更好
#障碍物是否离开屏幕(左侧)
如果(obstacleX<0-障碍物。获取_宽度()):
#将其移回右侧(屏幕外)
obstacleX=WINDOW\u WIDTH+random.randint(10100)
#TODO-类似地处理obstacleX2

请详细说明,谢谢:)我试图通过重画的游戏窗口显示更新。我应该怎么做呢?谢谢:)请详细说明,谢谢:)我试图通过重画的游戏窗口显示更新。我应该怎么做呢?谢谢:)谢谢!!但我该如何改变它呢?我应该更改变量名还是将它们移动到不同的位置?是的,图像在移动:)谢谢@用户-那么,您希望它如何工作?当障碍物离开屏幕时会发生什么?他们晚点回来吗?另一个来了?一个简单的更改是当
obstacleX
变量位于大于窗口宽度的位置时(假设它向左->向右移动),将其重新设置为0。在代码更新障碍物位置的地方进行检查。我游戏的目标是让屏幕从左向右移动,然后有一个角色必须跳过障碍物。