[英]Can't move an image across screen in Pygame
我是 Python 的初学者,我正在尝试想出一个 function 来绘制一个在 ZC16872077957A36F10149CB183A1 的帮助下在屏幕上水平和垂直移动的正方形。 当我们单击键盘上的箭头时,正方形应该会移动。
我的问题:虽然正方形显示在屏幕上,但它根本不动,但 Python 没有显示任何错误。
有人会知道缺少什么吗? 提前致谢!
这是我到目前为止所写的:
import pygame
altura_tela = 600
largura_tela = 800
tela = pygame.display.set_mode((largura_tela, altura_tela))
vermelho = (255, 0, 0)
altura_quadrado = 100
largura_quadrado = 100
def desenhaQuadrado(quadrado):
pygame.draw.rect(tela, vermelho, (350,250,largura_quadrado, altura_quadrado))
def posicaoquadrado(quadradoPos):
tela.blit(quadrado, (quadradoPos[0],quadradoPos[1]))
def moveQuadrado(teclas, quadradoPos):
if teclas[0] and quadradoPos[1] > 0:
quadradoPos[1] -= 20
elif teclas[2] and quadradoPos[1] < 420:
quadradoPos[1] += 20
if teclas[1] and quadradoPos[0] > 0:
quadradoPos[0] -= 20
elif teclas[3]and quadradoPos[0] < 570:
quadradoPos[0] += 20
return quadradoPos
def main():
pygame.init()
teclas = [False, False, False, False]
quadradoPos = [350,250]
pygame.display.set_caption('Movimentação do Quadrado')
terminou = False
while not terminou:
for event in pygame.event.get():
if event.type == pygame.QUIT:
terminou = True
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP:
teclas[0] = True
elif event.key == pygame.K_DOWN:
teclas[1] = True
elif event.key == pygame.K_LEFT:
teclas[2] = True
elif event.key == pygame.K_RIGHT:
teclas[3] = True
if event.type == pygame.KEYUP:
if event.key == pygame.K_UP:
teclas[0] = False
elif event.key == pygame.K_DOWN:
teclas[1] = False
elif event.key == pygame.K_LEFT:
teclas[2] = False
elif event.key == pygame.K_RIGHT:
teclas[3] = False
quadradoPos = moveQuadrado(teclas, quadradoPos)
desenhaQuadrado(quadradoPos)
pygame.display.update()
pygame.display.quit()
pygame.quit()
if __name__ == '__main__':
main()
在您的 function 中:
def desenhaQuadrado(quadrado):
pygame.draw.rect(tela, vermelho, (350,250,largura_quadrado, altura_quadrado))
您正在传递一个参数quadrado
但您从不使用它。 此外,您的坐标永远不会更新350, 250
。 所以这个 function 基本上一遍又一遍地绘制相同的矩形。
我修改了你的代码:
import pygame
clock = pygame.time.Clock()
altura_tela = 600
largura_tela = 800
tela = pygame.display.set_mode((largura_tela, altura_tela))
FPS = 30
vermelho = (255, 0, 0)
altura_quadrado = 100
largura_quadrado = 100
def redraw(quadradoPos):
tela.fill(pygame.Color("white"))
pygame.draw.rect(tela, vermelho, (quadradoPos[0], quadradoPos[1], largura_quadrado, altura_quadrado))
pygame.display.update()
def main():
pygame.init()
quadradoPos = [300,250]
pygame.display.set_caption('Movimentação do Quadrado')
terminou = False
while not terminou:
clock.tick(FPS)
for event in pygame.event.get():
if event.type == pygame.QUIT:
terminou = True
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP and quadradoPos[1] > 0:
quadradoPos[1] -= 50
elif event.key == pygame.K_DOWN and quadradoPos[1] <= altura_tela - altura_quadrado:
quadradoPos[1] += 50
elif event.key == pygame.K_LEFT and quadradoPos[0] >= 0:
quadradoPos[0] -= 50
elif event.key == pygame.K_RIGHT and quadradoPos[0] <= largura_tela - largura_quadrado:
quadradoPos[0] += 50
redraw(quadradoPos)
pygame.quit()
if __name__ == '__main__':
main()
笔记:
- 不要忘记tela.fill(pygame.Color("white"))
,否则您将获得在屏幕上绘制的所有矩形的“痕迹”。
-我添加了clock
以控制帧速率。
- 你不能像在posicaoquadrado(quadradoPos)
中那样在屏幕上对rect
进行 blit ,它会导致TypeError
。 您只能对Surface
进行 blit。
希望这能回答你的问题。
desenhaQuadrado function 中有一些 static 值
def desenhaQuadrado(quadrado):
pygame.draw.rect(tela, vermelho, (350,250,largura_quadrado, altura_quadrado))
将其更改为下面的代码,它会移动。
def desenhaQuadrado(quadrado):
pygame.draw.rect(tela, vermelho, (quadrado[0],quadrado[1],largura_quadrado, altura_quadrado))
尽管您将看到其他一些问题需要解决。 我创建了一个基本上是你想要的脚本,如果你需要一些帮助,请检查它
import pygame
from pygame.locals import *
UP = 0
DOWN = 1
LEFT = 2
RIGHT = 3
GAME_ON = True
SPEED = 20
screen = pygame.display.set_mode((400, 400))
clock = pygame.time.Clock()
square = pygame.Surface((50,50))
square.fill((255,0,0))
POS = [(200,200)]
def move_square(direction):
if UP == direction:
POS.append((POS[0][0], POS[0][1] - 20))
elif direction == DOWN:
POS.append((POS[0][0], POS[0][1] + 20))
elif direction == LEFT:
POS.append((POS[0][0] - 20, POS[0][1]))
else:
POS.append((POS[0][0] + 20, POS[0][1]))
POS.pop(0)
while GAME_ON:
for event in pygame.event.get():
if event.type == QUIT:
GAME_ON = False
if event.type == KEYDOWN:
if event.key==K_UP:
print("UP")
move_square(UP)
elif event.key==K_LEFT:
print("LEFT")
move_square(LEFT)
elif event.key==K_DOWN:
print("DOWN")
move_square(DOWN)
elif event.key==K_RIGHT:
print("RIGHT")
move_square(RIGHT)
screen.fill((0,0,0))
screen.blit(square, POS[0])
pygame.display.update()
pygame.quit()
我还有一个中等的蛇游戏教程: https://medium.com/@robsonsampaio90/snake-game-in-python-with-pygame-291f5206a35e
您可能会在此链接中找到一些帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.