Найти - Пользователи
Полная версия: Спрайты. При столкновении, группа исчезает а не движется
Начало » Python для новичков » Спрайты. При столкновении, группа исчезает а не движется
1
rudm
if pygame.sprite.groupcollide(bpoint_sprites, rpoint_sprites, 0, True):
rmoving() # запускаем функцию движения.
pygame.display.update() # обновляем окно
В результате столкновения bpoint_sprites и rpoint_sprites группа rpoint_sprites должна двигатся согласно функции движения rmoving()
def rmoving():
rpoint_sprites.clear(window, bground)
rpoint.x_dist = random.randint(10,50)
rpoint.y_dist = random.randint(10,50)
rpoint.move()
rpoint_sprites.draw(window)
pygame.display.update()
определенной для нее, но вместо этого rpoint_sprites исчезает. Сам разобратся не могу. Если нужно, могу привести полный код.
meticulos.slacker
выкладывайте полный код
rudm
Вот, пожалуйста. Он совершенно неоптимизированный, мне просто надо разобратся, поэтому за кривость кода прошу не ругать )

import os, sys 
import pygame
from pygame.locals import *
import random
from helpers import *

pygame.init()
pygame.key.set_repeat(300, 20)
window = pygame.display.set_mode((640, 480))
pygame.display.flip()
bground = pygame.Surface(window.get_size())
bground = bground.convert()
bground.fill((0,0,0))

class Rpoint(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image, self.rect = load_image('rpoint.png', -1)
self.rect.move_ip(200, 200)
self.x_dist = 0
self.y_dist = 0

def move(self):
xMove = 0
yMove = 0
if event.type == KEYDOWN:
if event.key == K_UP:

yMove = -self.y_dist
if event.key == K_DOWN:

yMove = self.y_dist
if event.key == K_LEFT:
xMove = -self.x_dist

if event.key == K_RIGHT:
xMove = self.x_dist

self.rect.move_ip(xMove, yMove)

class Bpoint(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image, self.rect = load_image('bpoint.png', -1)
self.rect.move_ip(40, 100)
self.x_dist = 0
self.y_dist = 0

def move(self):
xMove = 0
yMove = 0
if event.type == KEYDOWN:
if event.key == K_UP:

yMove = -self.y_dist
if event.key == K_DOWN:

yMove = self.y_dist
if event.key == K_LEFT:
xMove = -self.x_dist

if event.key == K_RIGHT:
xMove = self.x_dist

self.rect.move_ip(xMove, yMove)


bpoint = Bpoint()
bpoint_sprites = pygame.sprite.RenderPlain((bpoint))
bpoint_sprites.draw(window)
pygame.display.flip()

rpoint = Rpoint()
rpoint_sprites = pygame.sprite.RenderPlain((rpoint))
rpoint_sprites.draw(window)
pygame.display.flip()

def bmoving():
bpoint_sprites.clear(window, bground)
bpoint.x_dist = random.randint(10,50)
bpoint.y_dist = random.randint(10,50)
bpoint.move()
bpoint_sprites.draw(window)
pygame.display.update()

def rmoving():
rpoint_sprites.clear(window, bground)
rpoint.x_dist = random.randint(10,50)
rpoint.y_dist = random.randint(10,50)
rpoint.move()
rpoint_sprites.draw(window)
pygame.display.update()

while 1:
for event in pygame.event.get():
if event.type == QUIT:
sys.exit()
if event.type == KEYDOWN:
if event.key == K_UP:
bmoving()
#rmoving()
if event.key == K_DOWN:
bmoving()
#rmoving()
if event.key == K_LEFT:
bmoving()
#rmoving()
if event.key == K_RIGHT:
bmoving()
#rmoving()
if pygame.sprite.groupcollide(bpoint_sprites, rpoint_sprites, 0, True):
rmoving()
pygame.display.update()
meticulos.slacker
rudm
if pygame.sprite.groupcollide(bpoint_sprites, rpoint_sprites, 0, True):
Последний параметр(True) говорит функции убить спрайты
http://www.pygame.org/docs/ref/sprite.html#pygame.sprite.groupcollide
rudm
большое спасибо. Проверил с False - все работает нормально(хотя мне казалось что с false я уже проверял).
Но при движении, rect одного спрайта чуть наезжает на другой и тот частично исчезает, но я думаю это как то можно пофиксить.
meticulos.slacker
если я правильно понял то Вам нужна группа pygame.sprite.LayeredDirty
rudm
Спасибо! А есть ли интересно способ просчитывать столкновение самих спрайтов, а не объектов rect внутри которых спрайты находятся?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB