Pygame Sprite Collision только дает True - PullRequest
0 голосов
/ 03 июня 2018

Я хочу, чтобы код обнаружил столкновение между камнем и игроком.Но каким-то образом программа обнаруживает столкновение ВСЁ ВРЕМЯ.Я попытался отладить его и попытался найти решение этой проблемы, но безуспешно.Это только я или это очень часто встречается.

Может быть, это размер прямоугольника?Когда я пытаюсь сделать все возможное, проблема только продолжается.Попробуйте код самостоятельно.Помогите мне!

Пожалуйста, ответьте!

Код:

from random import *
import time
import pygame
from pygame.locals import *
import sys
pygame.init()

class character(pygame.sprite.Sprite):
    def __init__(self, x, y, image):
        self.x = x
        self.y = y
        self.image = image
        self.rect = self.image.get_rect();

    def checkCollision(sprite1, sprite2):
        if pygame.sprite.collide_rect(sprite1, sprite2):
            print(pygame.sprite.collide_rect(sprite1, sprite2))

pressed_left = False
pressed_right = False
pressed_up = False
pressed_down = False
x_speed = 1
y_speed = 1
clock = pygame.time.Clock()

screen = pygame.display.set_mode((640, 480))

playerskin = pygame.image.load('Player1_Skin.png').convert_alpha()
rockskin = pygame.image.load('Player2_Skin.png').convert_alpha()

player = character(20, 20, playerskin)
rock = character(400, 400, rockskin)

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT: 
            sys.exit()        
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                pressed_left = True
            elif event.key == pygame.K_RIGHT:
                pressed_right = True
            elif event.key == pygame.K_UP:
                pressed_up = True
            elif event.key == pygame.K_DOWN:
                pressed_down = True
        elif event.type == pygame.KEYUP:
            if event.key == pygame.K_LEFT:
                pressed_left = False
            elif event.key == pygame.K_RIGHT:
                pressed_right = False
            elif event.key == pygame.K_UP:
                pressed_up = False
            elif event.key == pygame.K_DOWN:
                pressed_down = False

    if pressed_left:
        player.x -= x_speed
    if pressed_right:
        player.x += x_speed
    if pressed_up:
        player.y -= y_speed
    if pressed_down:
        player.y += y_speed

    screen.fill((0, 255, 0))

    screen.blit(player.image, (player.x, player.y))
    screen.blit(rock.image, (rock.x, rock.y))

    print(bool(pygame.sprite.collide_rect(rock, player)))
    #rock.checkCollision(player)

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

1 Ответ

0 голосов
/ 03 июня 2018

Ваши ректы не движутся, так как они основаны на изображении, которое вы компенсируете, когда перетаскиваете их на экран.

Вам нужно скопировать прямоугольник изображения при инициализации (вы уже делаетеthis), а затем используйте rect.move для представления ограничивающего прямоугольника в позиции каждого объекта.

...