我正在学习pygame,并创建了一个小游戏,在这个游戏中,骑士必须在不撞到移动的地精的情况下接近公主。不过,当我尝试采用面向对象的方法,以便以后能够高效地添加更多的地精时,我能够使这项工作正常进行。地精没有移动,它是静止的。注释掉的部分是该程序在不使用OOP方法的情况下工作的格式
import pygame
pygame.init()
screen = pygame.display.set_mode((800,600))
pygame.display.set_caption("Get Princess")
icon = pygame.image.load('card-game.png')
pygame.display.set_icon(icon)
playerImg = pygame.image.load('knight.png')
playerImg = pygame.transform.scale(playerImg, (50,50))
playerX = 360
playerY = 520
playerX_change = 0
playerY_change = 0
princessImg = pygame.image.load('princess.png')
princessImg = pygame.transform.scale(princessImg, (50,50))
princessX = 360
princessY = 20
#Goblin Image
#goblinImg = pygame.image.load('goblin.png')
#goblinImg = pygame.transform.scale(goblinImg,(50,50))
#goblinX = 360
#goblinY = 250
#goblinX_change = 0.3
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):
self.goblinX = goblinX
self.goblinY = goblinY
goblinImg = pygame.image.load('goblin.png')
goblinImg = pygame.transform.scale(goblinImg,(50,50))
screen.blit(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
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
#goblinX += goblinX_change
#if goblinX <= 0:
#goblinX_change += 0.3
#elif goblinX >= 750:
#goblinX_change = -0.3
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)
#goblin(goblinX, goblinY)
g = goblin(360,250)
g.movement(0.3)
pygame.display.update()
每一帧你都在主循环中实例化地精
这意味着您正在将位置设置为每帧
(360, 250)
。简单修复,在循环外创建一个实例小妖精不会出现,因为您正在
__init__
中绘制,但只调用它一次。给你的goblin类一个叫做draw()
的新方法,然后用这个方法绘制所有的图形。然后在主循环中调用该方法相关问题 更多 >
编程相关推荐