微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

(Pygame) 玩家不动

如何解决(Pygame) 玩家不动

我是初学者,如果这是一个愚蠢的错误,很抱歉,但我的游戏中的玩家没有移动。 我很确定这是正确的,因为这是我在我的计算机编程训练营使用的游戏中学到的东西(训练营的游戏运行得非常好),但这个游戏不起作用。

# 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()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。