【问题标题】:Pygame Sprite unresponsive, macPygame Sprite无响应,mac
【发布时间】:2020-06-26 14:59:15
【问题描述】:

第一次在 中构建游戏,更不用说。当我启动代码时,带有所需背景的窗口会出现,我的Sprite 会加载到我想要的位置。然而,尽管付出了所有努力,Sprite 还是没有移动。我已经搜索了这个网站和其他网站的解决方案,但无济于事。

注意:我正在使用 OS X 10.11.6 的升级版 2009 年中期 mac book,并且我正在通过终端 (python boss_fight.py) 启动代码。另外,我通过自制软件下载了[tag: pygame]。

我尝试过的其他事情:

  1. elif 然后 ifif 然后 if 语句
  2. 在有关按键输入的 if 语句之后添加 print 函数以查看输入是否已注册,而不是 print
  3. 列表项在if 语句之后添加print 函数,以查看输入是否已注册,而不是print
  4. 更新中
  5. 正在更新
  6. 使用命令 pythonw boss_fight.py 启动(这会产生:ImportError: No module named pygame)这很奇怪,因为运行提示 python boss_fight.py 会运行游戏。
  7. 我尝试了其他一些方法,但记不住了

代码如下:

import pygame  # load pygame keywords
import sys     # let  python use your file system
import os      # help python identify your OS

class Player(pygame.sprite.Sprite):
    
    # Spawn a player
    
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.movex = 0
        self.movey = 0
        self.frame = 0
        self.images = []
        img = pygame.image.load(os.path.join('images','hero.png'))
        self.images.append(img)
        self.image = self.images[0]
        self.rect  = self.image.get_rect()

    def control(self,x,y):
        
        # control player movement
        
        self.movex += x
        self.movey += y

    def update(self):
        
        # Update sprite position
        

        self.rect.x = self.rect.x + self.movex
        self.rect.y = self.rect.y + self.movey

        # moving left
        if self.movex < 0:
            self.frame += 1
            if self.frame > 3 * ani:
                self.frame = 0
            self.image = self.images[self.frame//ani]

        # moving right
        if self.movex > 0:
            self.frame += 1
            if self.frame > 3 * ani:
                self.frame = 0
            self.image = self.images[(self.frame//ani)+4]



# Setup

worldx = 960
worldy = 720

fps = 40        # frame rate
ani = 4        # animation cycles
clock = pygame.time.Clock()
pygame.init()
main = True

BLUE  = (25,25,200)
BLACK = (23,23,23 )
WHITE = (254,254,254)
ALPHA = (0,255,0)

world = pygame.display.set_mode([worldx,worldy])
backdrop = pygame.image.load(os.path.join('images','stage.jpeg')).convert()
backdropbox = world.get_rect()
player = Player()   # spawn player
player.rect.x = 0
player.rect.y = 0
player_list = pygame.sprite.Group()
player_list.add(player)
steps = 10      # how fast to move


# Main loop

while main:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit(); sys.exit()
            main = False

        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                player.control(-steps,0)
                print('left')
            
            elif event.key == pygame.K_RIGHT: 
                player.control(steps,0)
                print('right')

            elif event.key == pygame.K_UP:
                print('up')

        elif event.type == pygame.KEYUP:
            if event.key == pygame.K_LEFT:
                player.control(steps,0)

            elif event.key == pygame.K_RIGHT: 
                player.control(-steps,0)

            elif event.key == pygame.K_q:
                pygame.quit()
                sys.exit()
                main = False

    world.blit(backdrop, backdropbox)
    player.update()
    player_list.draw(world)
    pygame.display.update()
    clock.tick(fps)

【问题讨论】:

  • 尝试根据stackoverflow.com/a/61766668/51685升级你的PyGame版本——这修复了我的macOS 10.15机器上的问题。
  • 除此之外,你的self.images数组只有一项,所以注释掉那些改变self.image的行,否则你的程序也会崩溃。
  • 升级 pygame 有效。谢谢!

标签: python pygame pygame python python python-3.x if-statement pygame sprite


【解决方案1】:

我认为你弄错的地方是你编写更新代码的地方

我的做法是

def update(self):
        
        # Update sprite position
        

        self.rect.x = self.rect.x + self.movex
        self.rect.y = self.rect.y + self.movey

        # moving left
        if self.movex < 0:
            self.frame += 1
            if self.frame > 3 * ani:
                self.frame = 0
            self.image = self.images[self.frame//ani]

        # moving right
        elif self.movex > 0:
            self.frame += 1
            if self.frame > 3 * ani:
                self.frame = 0
            self.image = self.images[(self.frame//ani)+4]
        self.rect.topleft = self.rect.x, self.rect.y

【讨论】:

  • 感谢您的反馈,我会进一步查看!但是,我将 pygame 更新为 2.0.0,现在我可以控制了。耶!
猜你喜欢
  • 1970-01-01
  • 2012-06-30
  • 1970-01-01
  • 1970-01-01
  • 2020-12-11
  • 1970-01-01
  • 2018-11-09
  • 2020-05-03
  • 1970-01-01
相关资源
最近更新 更多