【问题标题】:Pygame used in VS Code with Pygame Snippets [duplicate]Pygame 在 VS Code 中使用 Pygame Snippets [重复]
【发布时间】:2018-03-26 21:04:41
【问题描述】:

我已经安装了 vs 代码并添加了 pygame sn-ps 以使用 pygame 库。我的大问题是,每次我尝试使用 pygame 的任何关键选项时,例如 pygame.KEYDOWNpygame.QUIT 它都会告诉我 QUIT 不是 pygame 的功能。有人可以帮我吗?

其他一切似乎都可以正常工作,例如显示或表面 即使pygame.key.get_pressed() 也不要出问题。

import pygame, random, sys
from pygame.locals import *
from pygame.key import *

def set_Background():
    screen = pygame.display.set_mode((500,500))
    surface = pygame.image.load('Background.png')
    surface = pygame.transform.scale(surface, (500, 500))
    screen.blit(surface, (0,0))
    pygame.display.update()
    return screen

def set_Enemy():
    enemy = pygame.image.load('Enemy.png')
    enemy = pygame.transform.scale(enemy, (50, 50))
    return enemy

def set_Player():
    player = pygame.image.load('Player.png')
    player = pygame.transform.scale(player, (70, 70))
    return player

RUNNING = True

while RUNNING:
    background = set_Background()
    enemy = set_Enemy()
    player = set_Player()
    enemy_rect = enemy.get_rect()
    player_rect = player.get_rect()

    e_x = random.randint(10,450)
    e_y = random.randint(10,450)
    background.blit(enemy, (e_x, e_y))
    pygame.display.update()

    for event in pygame.event.get():
        key = pygame.key.get_pressed()
        if event.type == key[pygame.K_ESCAPE]: 
        #module pygame has no K_ESCAPE member
            sys.exit()
        if event.type == pygame.QUIT: 
        #says module pygame has no QUIT member
            sys.exit()

【问题讨论】:

  • 请发布您的代码以获取上下文
  • 我相信pygame.quit() 区分大小写
  • 我添加了代码,有两个注释导致问题
  • 我认为问题在于我不能以某种方式调用 pygame.init(),它还告诉我 pygame 没有 init 成员...

标签: python pygame visual-studio-code


【解决方案1】:

pygame.key.get_pressed() 不应该在事件循环中,而应该在主 while 循环中。在事件循环中,您需要检查事件类型是否为pygame.QUIT,然后将running 标志设置为False

这是一个固定版本:

import pygame


pygame.init()
screen = pygame.display.set_mode((500,500))
clock = pygame.time.Clock()
running = True  # Uppercase names are for constants not variables.

while running:
    # The event loop.
    for event in pygame.event.get():
        # If a pygame.QUIT event is in the queue.
        if event.type == pygame.QUIT:
            running = False
        # To check if it was a `KEYDOWN` event.
        elif event.type == pygame.KEYDOWN:
            # If the escape key was pressed.
            if event.key == pygame.K_ESCAPE:
                running = False

    # Use pygame.key.get_pressed to see if a key is held down.
    # This should not be in the event loop.
    key = pygame.key.get_pressed()
    if key[pygame.K_UP]:
        print('up arrow pressed')

    screen.fill((30, 30, 30))
    pygame.display.flip()
    clock.tick(60)

【讨论】:

  • PS:使用pygame.time.Clock限制帧率。
  • 文件:'file:///c%3A/Users/AW/Desktop/VCode_Projects/Snake.py' 严重性:'Fehler'消息:'E1101:模块'pygame'没有'init 'member' at: '5,1' source: 'pylint' 代码: 'E1101'
  • QUIT、KEYDOWN、K_UP、K_ESCAPE 等所有其他东西都有同样的问题
  • 我已经编辑了示例以使其可运行。检查此版本是否有效。
  • 我看到我试过了,还是和我贴的一样,他们都不是pygame的成员
【解决方案2】:

在代码顶部添加from pygame.locals import *

【讨论】:

  • 之前已经这样做了,但还是同样的问题,我添加了代码。
【解决方案3】:

您一次性混合了两种类型的按键。您应该改为

for event in pygame.event.get():
    if event.type == pygame.KEYDOWN:
        if event.key == pygame.K_SOMEKEY:
            do_something()

keys = pygame.key.get_pressed()
if keys[pygame.K_somekey]:
    do_something()

所以上面带有pygame.key.get_pressed() 的代码不应该在事件循环中

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-22
    • 2011-07-14
    • 2021-02-22
    • 1970-01-01
    • 2020-05-13
    • 2021-01-24
    • 2013-10-19
    相关资源
    最近更新 更多