Python 使用pygame使图像笔直移动

Python 使用pygame使图像笔直移动,python,pygame,pygame-surface,Python,Pygame,Pygame Surface,我必须通过pygame窗口直接移动矩形对象。我用pygame尝试了一些代码。代码是 import pygame from itertools import cycle pygame.init() screen = pygame.display.set_mode((300, 300)) s_r = screen.get_rect() player = pygame.Rect((100, 100, 50, 50)) timer = pygame.time.Clock() movement

我必须通过pygame窗口直接移动矩形对象。我用pygame尝试了一些代码。代码是

import pygame
from itertools import cycle

pygame.init() 
screen = pygame.display.set_mode((300, 300)) 
s_r = screen.get_rect()
player = pygame.Rect((100, 100, 50, 50))

timer = pygame.time.Clock()

movement = "straight"

x = 0

while True:

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            raise

    if movement == 'straight':
      x += 50

    screen.fill(pygame.color.Color('Black'))
    pygame.draw.rect(screen, pygame.color.Color('Grey'), player)

    pygame.display.flip()
    timer.tick(25)

在这里,图像没有移动。我需要的是图像必须以直线方式移动。

x
正在添加,但这不会影响播放器,实际上会影响矩形的绘制

import pygame
from itertools import cycle

pygame.init() 
screen = pygame.display.set_mode((300, 300)) 
s_r = screen.get_rect()


timer = pygame.time.Clock()

movement = "straight"

x = 0
player = pygame.Rect((x, 100, 50, 50))

while True:

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            raise

    if movement == 'straight':
      x += 10
      player = pygame.Rect((x, 100, 50, 50))

    if x >= 300:
      x = 0





    screen.fill(pygame.color.Color('Black'))
    pygame.draw.rect(screen, pygame.color.Color('Grey'), player)

    pygame.display.flip()
    timer.tick(25)

每次更改
x
时,您都需要调整
player
矩形。从中,您可以看到前两个参数是“left”和“top”。因此,如果您希望矩形从左向右移动,您将需要如下内容:

player = pygame.Rect((100 + x, 100, 50, 50))
pygame.draw.rect(screen, pygame.color.Color('Grey'), player)
顺便说一句:

  • 不要使用
    raise
    退出程序
  • 使用可读变量-不是
    s\u r
    ,而是
    screen\u rect
  • 你不需要
    x
    -你有
    player.x
  • 只能创建一次矩形
  • 将代码添加到问题时删除重复的空行

您能修复压痕吗?首先,您更改了
x
,但从未使用过它。看看这个:。此外,每次通过循环时,您都需要重新绘制矩形。@MattShank,我已经回滚了您的编辑。由于python是一种缩进非常重要的语言,因此对它的任何修改都应该由OP来完成。您向他们请求澄清是正确的,只是您自己没有这样做。缩进可能是他们问题的一部分,为他们“纠正”缩进可能会使问题本身无效。我不建议在这种情况下这样做,但当涉及到python和其他语言时,如果空格有意义,请不要弄乱缩进。@不可分割,明白。@user3830347下次使用按钮
{}
关于保留缩进的代码。这不是一个有效的答案。请发布答案,用pygame使矩形移动。我只是一个初学者。所以我不知道很多。如果你知道如何将其笔直移动。请帮助我。这很有帮助。但当它笔直移动时,它会离开屏幕。我如何才能再次从中间开始。例如点击屏幕后,反复执行相同的过程。您需要将
x
与窗口的宽度进行比较。如果
x
大于窗口的宽度,您可以将
x
重置为0或100,或者重置为您希望它启动的任何位置。您可以使用
player.x+=10
。您不必每次都创建
Rect()
import pygame

BLACK = pygame.color.Color('Black')
GREY  = pygame.color.Color('Grey')

pygame.init() 

screen = pygame.display.set_mode((300, 300)) 
screen_rect = screen.get_rect()

timer = pygame.time.Clock()

movement = "straight"

player = pygame.Rect(0, 100, 50, 50) # four aguments in place of tuple (,,,)

running = True

while running:

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    if movement == 'straight':
        player.x += 10
        if player.x >= 300: # check only when `player.x` was changed 
            player.x = 0

    screen.fill(BLACK)
    pygame.draw.rect(screen, GREY, player)

    pygame.display.flip()

    timer.tick(25)