问题描述
我是初学者,如果这是一个愚蠢的错误,很抱歉,但我的游戏中的玩家没有移动。 我很确定这是正确的,因为这是我在我的计算机编程训练营使用的游戏中学到的东西(训练营的游戏运行得非常好),但这个游戏不起作用。
# pygame import
import pygame
from pygame import *
pygame.init()
# game window
game_window_width = 800
game_window_height = 600
# colour
red = 255,0
orange = 255,128,0
yellow = 255,255,0
green = 0,0
darkGreen = 0,0
blue = 0,255
darkBlue = 0,128
purple = 200,255
pink = 255,60,203
white = 255,255
black = 0,0
grey = 128,128
brown = 100,80,30
color = 0
# game setup
game_window = display.set_mode((game_window_width,game_window_height))
display.set_caption('gameTemplate')
print('outside game loop')
clock = pygame.time.Clock()
game_over = False
# game loop
while not game_over:
for event in pygame.event.get():
if event.type == QUIT:
game_over = True
print('inside game loop')
# game background
backgroundIMG = pygame.image.load('crossyRoadBG.png')
backgroundIMG = pygame.transform.scale(backgroundIMG,(game_window_width,game_window_height))
game_window.blit(backgroundIMG,(0,0))
#man
manR = 80
manX = 220
manY = 520
manSpeed = 30
draw.rect(game_window,brown,(manX,manY,manR,manR))
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_RIGHT:
manX += manSpeed
if event.key == pygame.K_LEFT:
manX -= manSpeed
# frame
clock.tick(30)
# update
display.update()
# game exit
pygame.quit()
有什么帮助吗?
解决方法
这不是 PyCharm 的问题,而是代码混乱。你在错误的地方有元素。您在 keys
循环外检查 for event
。您在循环内设置位置 manX = 220
,manY = 520
以便您一次又一次地将玩家移动到同一个位置 - 但它无法移动。
import pygame
from pygame import *
# --- constants ---
# game window
game_window_width = 800
game_window_height = 600
# colour
red = 255,0
orange = 255,128,0
yellow = 255,255,0
green = 0,0
darkGreen = 0,0
blue = 0,255
darkBlue = 0,128
purple = 200,255
pink = 255,60,203
white = 255,255
black = 0,0
grey = 128,128
brown = 100,80,30
color = 0
# --- classes ---
# empty
# --- functions ---
# empty
# --- main ---
print('outside game loop')
pygame.init()
# game setup
game_window = display.set_mode((game_window_width,game_window_height))
display.set_caption('gameTemplate')
# - objects -
# game background
backgroundIMG = pygame.image.load('crossyRoadBG.png')
backgroundIMG = pygame.transform.scale(backgroundIMG,(game_window_width,game_window_height))
#man
manR = 80
manX = 220
manY = 520
manSpeed = 30
# - loop -
clock = pygame.time.Clock()
game_over = False
# game loop
while not game_over:
print('inside game loop')
# - events -
for event in pygame.event.get():
if event.type == QUIT:
game_over = True
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_RIGHT:
manX += manSpeed
if event.key == pygame.K_LEFT:
manX -= manSpeed
# - moves/collisions/updates (without draws) -
# empty
# - draws (without moves/collisions/updates) -
game_window.blit(backgroundIMG,(0,0))
draw.rect(game_window,brown,(manX,manY,manR,manR))
# frame
clock.tick(30)
# update
display.update()
# - exit -
pygame.quit()
顺便说一句:下次您可以使用 print()
查看变量中的值以及执行的代码部分。它被称为 "print debuging"
,它有助于了解程序在做什么。
顺便说一句:将当前方法与事件一起使用,您将不得不一次又一次地按下才能移动对象。您可能需要pygame.key.get_pressed()