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