所以我这里的代码在游戏窗口上有2goblins()
左右弹跳,我必须尝试在不接触goblin()
的情况下将player()
移动到princess()
。然而,当我创建goblin()
的实例时,如果goblinX_change
设置为0.3,它们会向右跳出窗口,但当它们位于窗口左侧时,游戏崩溃,我得到TypeError:Invalif blit的目标位置
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('knight.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,50))
princessX = 360
princessY = 20
def player(x,y):
screen.blit(playerImg, (x, y))
def princess(x,y):
screen.blit(princessImg, (x, y))
class goblin():
def __init__(self, goblinX, goblinY, goblinX_change):
self.goblinX = goblinX
self.goblinY = goblinY
self.goblinX_change = goblinX_change
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 += self.goblinX_change
elif self.goblinX >= 750:
self.goblinX_change = -self.goblinX_change
g = goblin(360,250, 0.3)
g1 = goblin(360, 280, 0.3)
running = True
while running:
screen.fill((50,0,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()
g.draw()
g1.movement()
g1.draw()
pygame.display.update()
当
goblinX
达到0时,需要反转方向:当地精位于左边界时,移动必须为正(
abs(self.goblinX_change)
),当地精位于右边界时,移动必须为负(-abs(self.goblinX_change)
):或者,如果地精位于左边界并向左移动,或者位于右边界并向右移动,则可以更改方向:
相关问题 更多 >
编程相关推荐