首页 > 解决方案 > pygame,这是使用类的正确方法吗?

问题描述

我最近开始学习课程,我对课程很陌生,所以我的问题是,我是否正确使用它以及使用课程有什么好处,因为我不确定我是否需要它们,但我觉得没有我的代码会感觉冗长和凌乱,如果你能告诉我你如何使用类的例子,我将不胜感激,如果你能包括一个复杂而简单的类例子,我想这将有助于我理解,谢谢!关于此代码的快速说明,这是基于我的其他代码,但这个代码使用的是类。

import pygame
import sys
from pygame.locals import *

pygame.init()
display_w = 800
display_h = 600

window = pygame.display.set_mode((display_w, display_h), HWSURFACE | DOUBLEBUF | RESIZABLE)
pygame.display.set_icon(pygame.image.load("game_icon.png"))
pygame.display.set_caption("Work in progress")
clock = pygame.time.Clock()
background = pygame.image.load("background.png")


class Player(object):
    """The controllable player in game"""

    def __init__(self, x, y, width, height, speed):
        self.x = x
        self.y = y
        self.width = width
        self.height = height
        self.image = pygame.image.load("sprite_sheet.png")
        self.speed = speed

    def draw(self):
        self.sprite = (self.image.subsurface(pygame.Rect(0, 100, 50, 50)))
        window.blit(self.sprite, (self.x, self.y))

    def movement(self):
        self.keys = pygame.key.get_pressed()
        if self.keys[pygame.K_LEFT]:
            self.x -= self.speed
        if self.keys[pygame.K_RIGHT]:
            self.x += self.speed
        if self.keys[pygame.K_UP]:
            self.y -= self.speed
        if self.keys[pygame.K_DOWN]:
            self.y += self.speed


player = Player(400, 300, 50, 50, 5)

running = True
while running:
    window.blit(background, (0, 0))
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
        if event.type == VIDEORESIZE:
            screen = pygame.display.set_mode((event.w, event.h), RESIZABLE)

    player.draw()
    player.movement()

    clock.tick(60)
    pygame.display.flip()

标签: pythonpygame

解决方案


这似乎是一个好的开始。

如果你在 pygame 中工作,你应该看看使用 Sprites 和 Sprite Groups。你会让你的播放器成为 Sprite 的子类。

有关文档,请参见此处。学习如何使用还有一点点,您需要了解类中的继承,但值得付出努力。我会在你走远之前开始使用它。

此外,您应该使用 pygamesRect类而不是保留单独的 x、y、高度和宽度属性。该类Rect在很多方面都非常有用,并且通常可以简化代码。它还内置了碰撞例程。许多 pygame 调用也需要一个Rect参数。有关文档,请参见此处

这里有一些在 pygame 中使用 Sprites 的示例。


推荐阅读