【问题标题】:How to find the logical error in this PyGame code?如何在这个 PyGame 代码中找到逻辑错误?
【发布时间】:2019-10-26 09:18:45
【问题描述】:

这是我目前正在为一个项目开发的游戏的早期原型。但是,我似乎遇到了无法显示玩家角色的障碍,正如您在我为玩家创建的类的代码中看到的那样

import pygame

pygame.init()
win = pygame.display.set_mode((500,480))#initialises the game window
pygame.display.set_caption("Hello world")
bg = pygame.image.load('bg.jpg')

#player class
class player:
    def __init__(self,x,y):
        self.x = x
        self.y = y
        self.width = 64
        self.height = 64
        self.standing = True
        self.left = False
        self.right = True
        self.vel = 5
        self.jumping = False
        self.jumpCount = 10
    def move(self,x,y):
        self.k = pygame.key.get_pressed() 
        if self.k[pygame.K_LEFT] and self.x  > 0 + self.vel + self.width:
            left = True
            right = False
            self.standing = False
            self.x -= vel
        elif self.k[pygame.K_RIGHT] and self.x  < 500-self.vel-self.width:
              self.right = True
              self.left = False
              self.standing = False
              self.x += vel
        else:
            self.standing = True       
        if self.jumping:#checks if users jumping intiating jump
            if self.k[pygame.K_SPACE]:
                if self.jumpCount >= -10:
                    neg = 1
                if self.JumpCount < 0:
                    neg = -1
                self.y -= (jumpCount ** 2) * 0.5 * neg
                self.jumpCount -= 1
            else:
                self.jumping = False
                self.jumpCount = 10

    def draw(self,win,move):
        wLeft = pygame.image.load('runningleft.png')
        wRight = pygame.image.load('running.png')
        char = pygame.image.load('idleright.png')
        if not(self.standing):
            if self.left:
                win.blit(wleft,(self.x,self.y))
            elif self.right:
                win.blit(wright,(self.x,self.y))
        else:
            win.blit(char,(self.x,self.y))

        pygame.display.update()



pygame.display.update()
wizard = player(50,450)
run = True
while run:#main game loop
   for event in pygame.event.get():#loops through a list of keyboard or mouse events
       if event.type == pygame.QUIT:
           run = False
   wizard.move(wizard.x,wizard.y)
   wizard.draw(win)
   win.blit(bg,(0,0))
   pygame.display.update()
pygame.quit()

背景会显示在游戏主窗口中,而角色则不会。如前所述,我试图将项目转换为 OOP,这是我的代码停止的地方。如何诊断代码中的问题?

【问题讨论】:

标签: python python-3.x oop pygame


【解决方案1】:

您的指令顺序错误。需要在绘制背景后更新显示之前绘制播放器(wizard):

  1. win.blit(bg,(0,0))
  2. wizard.draw(win)
  3. pygame.display.update()
wizard = player(50,450)

#main game loop
run = True
while run:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False

    wizard.move(wizard.x,wizard.y)        
    
    win.blit(bg,(0,0))
    wizard.draw(win)
    pygame.display.update()

在循环结束时更新一次显示就足够了,因此从player.draw 中删除pygame.display.update()。多次更新显示会导致闪烁。见Why is the PyGame animation is flickering

【讨论】:

    猜你喜欢
    • 2020-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-29
    • 1970-01-01
    • 2018-11-26
    • 2017-01-02
    • 1970-01-01
    相关资源
    最近更新 更多