首页 > 解决方案 > 按下按键后,pygame 角色不会移动

问题描述

我正在 pygame 中制作游戏,尽管当我想移动我的玩家时,pygame 并没有移动角色。它正在注册一个键已被按下,但没有任何反应。有人可以告诉我错误来自哪里并指出正确的方向。以下是我的代码。

请注意游戏尚未完全开发。

import pygame as pg, random as r, sys

pg.init()
window = pg.display.set_mode((1200, 600))
pg.display.set_caption("The Pygame Version")

White = (255, 255, 255)
Black = (0, 0, 0)
Green = (0, 255, 0)
Red = (255, 0, 0)
DarkGreen = (0, 126, 0)
def draw():
    global runner, chaser
    background = pg.draw.rect(window, Green, (0, 0, 1200, 600))
    chaser = pg.draw.rect(window, Black, (1015, 225, 150, 150))
    runner = pg.draw.rect(window, Red, (30, 225, 150, 150))
   
    track1 = pg.draw.line(window, DarkGreen, (0, 200), (1200, 200),10)
    track2 = pg.draw.line(window, DarkGreen, (0, 400), (1200, 400),10)

score = 0
font = pg.font.Font('freesansbold.ttf', 28)
scoreBoard = font.render("Score: 0", True, Black)

speed = 150
text = 0
collision = 0
draw()
while True:
    keys = pg.key.get_pressed()
    for event in pg.event.get():
        if event.type == pg.QUIT:
            pg.quit()
            sys.exit()
    if keys[pg.K_w]:
        runner.y -= 200
        runner.width = 300
        draw()
        print ("We are moving")
pg.quit()

标签: pythonpygamegame-developmentpygame-surface

解决方案


您正在以恒定位置和恒定大小绘制矩形:

chaser = pg.draw.rect(window, Black, (1015, 225, 150, 150))
runner = pg.draw.rect(window, Red, (30, 225, 150, 150))

注意,pygame.draw.rect返回一个新的矩形边界改变的像素。它实际上pygame.Rect(1015, 225, 150, 150)分别返回pygame.Rect(30, 225, 150, 150)


你必须反过来做:

创建pygame.Rect对象chaserrunner

chaser = pg.Rect(1015, 225, 150, 150)
runner = pg.Rect(30, 225, 150, 150)

并使用对象在中绘制矩形draw

def draw():
    global runner, chaser
    pg.draw.rect(window, Green, (0, 0, 1200, 600))
    
    pg.draw.rect(window, Black, chaser)
    pg.draw.rect(window, Red, runner)

    # [...]

推荐阅读