如何使用OOP移动图像

时间:2018-12-23 10:30:47

标签: python pygame

我是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

1 个答案:

答案 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。也许您会发现它有用。