Не может столкнуться в Pygame - PullRequest
       1

Не может столкнуться в Pygame

3 голосов
/ 27 сентября 2019

Я пытаюсь сделать игру «пин-пон», один прямоугольник находится справа на экране, а другой - на левой стороне экрана.Когда мяч попадает во второй прямоугольник, он должен столкнуться, но в методе обновления есть переменная hit1, которая должна сталкиваться с материалами, но в той же строке

hits1 = pg.sprite.spritecollide(self.player,self.balls,False)

pygame выдает мне эту ошибку:

AttributeError: у объекта 'pygame.math.Vector2' нет атрибута 'colliderect'

import pygame as pg
import random
from settings import *
from sprites import *
from os import path


class Game:
    def __init__(self):
        # initialize game window, etc
        pg.init()
        pg.mixer.init()
        self.screen = pg.display.set_mode((WIDTH, HEIGHT))
        pg.display.set_caption(TITLE)
        self.clock = pg.time.Clock()
        self.running = True


def new(self):
    # start a new game
    self.all_sprites = pg.sprite.Group()
    self.balls = pg.sprite.Group()
    self.player = Player(self)
    self.player2 = Player2(self)
    self.ball = Ball(self.player.pos.x + 10, self.player.pos.y + 20,self)
    self.all_sprites.add(self.player,self.player2)
    self.all_sprites.add(self.ball)
    self.balls.add(self.ball)
    self.run()

def run(self):
    # Game Loop
    self.playing = True
    while self.playing:
        self.clock.tick(FPS)
        self.events()
        self.update()
        self.draw()

def update(self):
    # Game Loop - Update
    self.all_sprites.update()
    hits1 = pg.sprite.spritecollide(self.player,self.balls,False)

    if hits1:
        self.player2.throw_back()

def events(self):
    # Game Loop - events
    for event in pg.event.get():
        # check for closing window
        if event.type == pg.QUIT:
            if self.playing:
                self.playing = False
            self.running = False



def draw(self):
    # Game Loop - draw
    self.screen.fill(BLACK)
    self.all_sprites.draw(self.screen)
    # *after* drawing everything, flip the display
    pg.display.flip()

def show_start_screen(self):
    # game splash/start screen
    pass

def show_go_screen(self):
    # game over/continue
    pass




g = Game()
g.show_start_screen()
while g.running:
    g.new()
    g.show_go_screen()

pg.quit()

1 Ответ

3 голосов
/ 27 сентября 2019

Вы не показывали весь соответствующий код, но мое образованное предположение где-то у вас есть класс Sprite (либо Player и / или Ball), где вы присваиваете экземпляр Vector2 атрибуту rectвместо Rect экземпляра.

Я не знаю, как на самом деле выглядит код, но вместо этого:

self.rect = some_vector

вместо этого измените существующий Rect:

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