Как заставить изображение двигаться с помощью ООП - PullRequest
0 голосов
/ 23 декабря 2018

Я новичок в pygame и пытаюсь заставить изображение (Player1) двигаться в ООП.Сначала я использовал процедурный метод, и он работал, но когда я перевел его в формат ООП, изображение больше не работает.

Это код, который я использовал при выполнении процедурного программирования, который я получил, адаптировав код, найденный из 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 голосов
/ 02 января 2019

Вам не хватает обработки событий во втором примере.Если вы не позвоните pygame.event.get() (или poll()), ваше окно не будет отвечать (в зависимости от вашей ОС / оконного менеджера).

Так просто добавьте

for e in pygame.event.get():
    if e.type == pygame.QUIT:
        End = True

в ваш while цикл.

Кроме того, поскольку вы используете pygame, взгляните на его класс Sprite, который вы можете использовать для ООП с pygame.Что-то связанное с вашим вопросом этот .Может быть, вы найдете это полезным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...