我是pygame的新手,我正在尝试使图像(Player1)在OOP中移动。最初,我使用过程式程序,但是它可以工作,但是当我将其放入OOP格式时,该图像将不再起作用。
这是我在进行过程编程时使用的代码,是通过修改从https://www.pygame.org/docs/ref/key.html#comment_pygame_key_name
中找到的代码而获得的#Moving player
import pygame
pygame.init()
ScreenSize = 1200, 600
Screen = pygame.display.set_mode(ScreenSize)
Screen.fill([255, 255, 255])
XPos = 0
YPos = 0
Plyr = []
PlyrRct = []
Background = pygame.image.load('carpet.jpg')
Player = pygame.image.load('player.jpg')
PlayerTemp = Player.subsurface(1, 0, 64, 64)
PlayerRectTemp = PlayerTemp.get_rect()
Plyr.append(PlayerTemp)
PlyrRct.append(PlayerRectTemp)
End = False
while not End:
Key = pygame.key.get_pressed()
if Key[pygame.K_a]:
XPos -= 4
if Key[pygame.K_d]:
XPos += 4
if Key[pygame.K_w]:
YPos -= 4
if Key[pygame.K_s]:
YPos += 4
Background = pygame.image.load('carpet.jpg')
Screen.blit(Background, (0, 0))
PlyrRct[0].left = XPos
PlyrRct[0].top = YPos
Screen.blit(Plyr[0], PlyrRct[0])
for event in pygame.event.get():
if event.type==pygame.QUIT:sys.exit()
pygame.display.flip()
这是我的oop程序
# Player Move test
import pygame
pygame.init()
class LoadImages(object):
def __init__(self, Image, Top, Left, Width, Height):
self.Image = pygame.image.load(Image)
self.Top = Top
self.Bottom = Top + Height
self.Left = Left
self.Right = Left + Width
class Player(LoadImages):
def __init__(self, Image, Top, Left, Width, Height):
LoadImages.__init__(self, Image, Top, Left, Width, Height)
def Move(self, A, D, W, S):
#self.CheckCollision()
if A:
self.Left -= 4
self.Right -= 4
if D:
self.Left += 4
self.Right += 4
if W:
self.Top += 4
self.Bottom += 4
if S:
self.Top -= 4
self.Bottom -= 4
#def CheckCollision(self):
#print ()
class Item(LoadImages):
def __init__(self, Image, Top, Left, Width, Height):
LoadImages.__init__(self, Image, Top, Left, Width, Height)
#def Examine(self):
#print ()
Player1 = Player("player.jpg", 0, 0, 300, 300)
Item1 = Item("player.jpg", 0, 0, 300, 300)
Background = pygame.image.load("carpet.jpg")
ScreenSize = 1200, 600
Screen = pygame.display.set_mode(ScreenSize)
Screen.fill([255, 255, 255])
End = False
while not End:
Screen.blit(Background, (0, 0))
Screen.blit(Player1.Image, (Player1.Top, Player1.Left))
pygame.display.update()
Key = pygame.key.get_pressed()
Player1.Move(Key[pygame.K_a], Key[pygame.K_d], Key[pygame.K_w], Key[pygame.K_s])
我希望图像(Player1)在屏幕上移动,但不会在任何地方移动。 该程序中的图像仅用于测试目的,将替换为.png
答案 0 :(得分:1)
在第二个示例中,您缺少事件处理。如果您不调用pygame.event.get()
(或poll()
),则窗口将不响应(取决于您的操作系统/窗口管理器)。
如此简单地添加
for e in pygame.event.get():
if e.type == pygame.QUIT:
End = True
进入您的while
循环。
此外,由于您使用的是pygame,因此请查看其Sprite类,您可以将其用于pygame的OOP。与您的问题有关的是this one。也许您会发现它有用。