Pygame - создание класса «враг», а затем импорт его в игру - PullRequest
2 голосов
/ 24 января 2020

Хорошо, так что в основном я пытаюсь сделать основной файл немного чище, и я начинаю с врага "Zomb ie", создав собственный файл, который, скорее всего, будет содержать всех врагов, и импортировать его.

Так что я не понимаю, как настроить класс для спрайта, вам не нужно рассказывать, как заставить его двигаться или что-то подобное, я просто хочу это просто появиться. Игра не прерывается, когда я запускаю ее как есть, я просто хотел задать этот вопрос, прежде чем идти спать, поэтому я могу надеяться, что многое получится с завтрашним проектом (в школе)

Код не закончен как я сказал, просто хотел спросить, пока я немного поспал, всего несколько поисков и попыток Google

В конце концов я воспользуюсь советом, приведенным здесь, для создания класса «Герой», а также для работы с импортом других факторов, если у нас будет время.

Зомб ie код:

import pygame
from pygame.locals import *

class ZombieEnemy(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.image.load('images/zombie.png')
#       self.images.append(img)
        # self.image = self.images[0]
        self.rect = self.image.get_rect()

zombieX = 100
zombieY = 340
zombieX_change = 0

Основной код:

import pygame
from pygame.locals import *
import Zombie
# Intialize the pygame
pygame.init()

# Create the screen 
screen = pygame.display.set_mode((900, 567))


#Title and Icon
pygame.display.set_caption("Fighting Game")

# Add's logo to the window 
# icon = pygame.image.load('')
# pygame.display.set_icon(icon)

# Player
playerImg = pygame.image.load('images/character.png')
playerX = 100
playerY = 340
playerX_change = 0

def player(x,y):
    screen.blit(playerImg,(x,y))

Zombie.ZombieEnemy()

def zombie(x,y):
    screen.blit()

# Background

class Background(pygame.sprite.Sprite):
    def __init__(self, image_file, location):
        pygame.sprite.Sprite.__init__(self)  #call Sprite initializer
        self.image = pygame.image.load('images/background.png')
        self.rect = self.image.get_rect()
        self.rect.left, self.rect.top = location

BackGround = Background('background.png', [0,0])

#  Game Loop
running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
    # If keystroke is pressed check right, left.
    if event.type == pygame.KEYDOWN:
        if event.key == pygame.K_LEFT:
            #playerX_change = -2.0
            BackGround.rect.left = BackGround.rect.left + 2.5
        if event.key == pygame.K_RIGHT:
            #playerX_change = 2.0
            BackGround.rect.left = BackGround.rect.left - 2.5
    # if event.type == pygame.KEYUP:
    #     if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
    #         BackGround.rect.left = 0

    screen.blit(BackGround.image, BackGround.rect)
    playerX += playerX_change
    player(playerX,playerY)
    pygame.display.flip()

Ответы [ 2 ]

2 голосов
/ 24 января 2020

Ваш спрайт-код в основном уже там. Но, как вы говорите, ему нужна функция update(), чтобы каким-то образом перемещать спрайты.

Идея использования Sprites в PyGame состоит в том, чтобы добавить их в SpriteGroup , затем используйте групповую функциональность для совместной обработки спрайтов.

Возможно, вы захотите изменить класс Zomb ie так, чтобы он занял начальное место для координат:

class ZombieEnemy(pygame.sprite.Sprite):
    def __init__( self, x=0, y=0 ):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.image.load('images/zombie.png')
        self.rect = self.image.get_rect()
        self.rect.center = ( x, y )           # NOTE: centred on the co-ords

, что позволяет игре чтобы создать Zomb ie в определенной начальной точке (возможно, даже случайной).

Итак, чтобы создать группу спрайтов, сначала вам нужно создать контейнер:

all_zombies = pygame.sprite.Group()

Затем, когда вы создаете нового зомба ie, добавьте его в группу. Скажем, вы хотели начать с 3 случайно расположенных зомби:

for i in range( 3 ):
    new_x = random.randrange( 0, WINDOW_WIDTH )       # random x-position
    new_y = random.randrange( 0, WINDOW_HEIGHT )      # random y-position
    all_zombies.add( Zombie( new_x, new_y ) )         # create, and add to group

Затем в главном l oop, позвоните .update() и .draw() в группе спрайтов . Это переместит и раскрасит все спрайты, добавленные в группу. Таким образом, вы можете иметь отдельные группы врагов, пуль, фоновых предметов и т. Д. c. Группы спрайтов позволяют легко рисовать и обнаруживать столкновения между другими группами. Подумайте о том, чтобы столкнуть сотню пуль против тысячи врагов!

while running:
    for event in pygame.event.get():
        # ... handle events

    # Move anything that needs to
    all_zombies.update()                 # call the update() of all zombie sprites
    playerX += playerX_change

    # Draw everything
    screen.blit(BackGround.image, BackGround.rect)
    player(playerX,playerY)                          
    all_zombies.draw( screen )           # paint every sprite in the group

    pygame.display.flip()

РЕДАКТИРОВАТЬ: добавлен параметр screen в all_zombies.draw ()

Вероятно, стоит определить вашего игрока как спрайта, и для него группа с одним входом .

0 голосов
/ 24 января 2020

Сначала вы можете сохранить позицию в Rect() в class. И вы бы добавили метод, который рисует / стирает его.

import pygame

class ZombieEnemy(pygame.sprite.Sprite):

    def __init__(self):
        super().__init__()
        self.image = pygame.image.load('images/zombie.png')
        self.rect = self.image.get_rect()
        self.rect.x = 100
        self.rect.y = 340
        self.x_change = 0

    def draw(self, screen):
        screen.blit(self.image, self.rect)

Затем вам нужно назначить переменную при его создании

zombie = Zombie.ZombieEnemy()

И затем вы можете использовать его для рисования

zombie.draw(screen)

in

screen.blit(BackGround.image, BackGround.rect)
player(playerX,playerY)

zombie.draw(screen)

pygame.display.flip()

Таким же образом вы можете создать класс Player и добавить метод draw() к классу Background, а затем использовать.

background.draw(screen)
player.draw(screen)

zombie.draw(screen)

pygame.display.flip()

Позже вы можете использовать pygame.sprite.Group(), чтобы сохранить все объекты в одной группе и нарисовать их все одной командой - group.draw()

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