Pygame中的窗口边界不起作用

问题描述

我最近优化了我的游戏goblin()中的敌人以通过OOP方法进行工作,但是,我为movement()设置的边界不起作用。在这个简单的游戏中,我必须将骑士(也称为player()升至princess,而不必击中goblin()。当我在不使用OOP方法的情况下执行此操作时,它可以完美运行,并且妖精会在屏幕上左右摆动。现在,它就在右边,并且一直持续下去!超级沮丧,因为在我开始添加所有敌人之前,我想拥有一个功能正常的class!谢谢!

import pygame

# Initialize the pygame
pygame.init()

# Setting up the screen and background
screen = pygame.display.set_mode((800,600))

# Title and Icon of window
pygame.display.set_caption("Get Princess")

icon = pygame.image.load('icon.png')
pygame.display.set_icon(icon)

#Player Image
playerImg = pygame.image.load('knight.png')
playerImg = pygame.transform.scale(playerImg,(50,50))
playerX = 360
playerY = 520
playerX_change = 0
playerY_change = 0

#Princess Image
princessImg = pygame.image.load('princess.png')
princessImg = pygame.transform.scale(princessImg,50))
princessX = 360
princessY = 20

def player(x,y):
    screen.blit(playerImg,(x,y))

def princess(x,y):
    screen.blit(princessImg,y))


class goblin():
    def __init__(self,goblinX,goblinY):
        self.goblinX = goblinX
        self.goblinY = goblinY
        self.goblinImg = pygame.image.load('goblin.png')
        self.goblinImg = pygame.transform.scale(self.goblinImg,50))
    
    def draw(self):
        screen.blit(self.goblinImg,(self.goblinX,self.goblinY))
        
    
    def movement(self,goblinX_change):
        self.goblinX_change = goblinX_change
        self.goblinX += self.goblinX_change
        if self.goblinX <= 0:
            self.goblinX_change += 0.3
        elif self.goblinX >= 750:
            self.goblinX_change = -0.3


g = goblin(360,250)
running = True
while running:

    screen.fill((50,0))

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
                    

        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_UP:
                playerY_change = -0.4
            if event.key == pygame.K_DOWN:
                playerY_change = 0.4
            if event.key == pygame.K_LEFT:
                playerX_change = -0.4
            if event.key == pygame.K_RIGHT:
                playerX_change = 0.4
        if event.type == pygame.KEYUP:
            if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
                playerX_change = 0
            elif event.key == pygame.K_UP or event.key == pygame.K_DOWN:
                playerY_change = 0

    playerX += playerX_change
    playerY += playerY_change
    
    if playerX <= 0:
        playerX = 0
    elif playerX >= 750:
        playerX = 750
    if playerY <= 0:
        playerY = 0
    elif playerY >= 550:
        playerY = 550


    player(playerX,playerY)
    princess(princessX,princessY)
    
    
    g.movement(0.3)
    g.draw()

    pygame.display.update()

解决方法

goblinX_changegoblin的属性。 movement在应用程序循环中被连续调用。这会将属性设置为每帧中的初始值。初始值必须在构造函数中设置,而不是在movement方法中设置:

class goblin():
    def __init__(self,goblinX,goblinY,goblinX_change):
        self.goblinX = goblinX
        self.goblinY = goblinY
        self.goblinX_change = 0.3
        self.goblinImg = pygame.image.load('goblin.png')
        self.goblinImg = pygame.transform.scale(self.goblinImg,(50,50))
    
    def draw(self):
        screen.blit(self.goblinImg,(self.goblinX,self.goblinY))
         
    def movement(self):
        self.goblinX += self.goblinX_change
        if self.goblinX <= 0:
            self.goblinX_change += 0.3
        elif self.goblinX >= 750:
            self.goblinX_change = -0.3
g = goblin(360,250,0.3)
running = True
while running:
    # [...]

    g.movement()
    g.draw()
    pygame.display.update()

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...