Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 1, 2010 12:59:17

rudm
От:
Зарегистрирован: 2009-10-27
Сообщения: 64
Репутация: +  0  -
Профиль   Отправить e-mail  

Спрайты. При столкновении, группа исчезает а не движется

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 исчезает. Сам разобратся не могу. Если нужно, могу привести полный код.



Отредактировано (Июнь 1, 2010 13:06:23)

Офлайн

#2 Июнь 3, 2010 14:09:21

meticulos.slacker
От:
Зарегистрирован: 2010-04-15
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Спрайты. При столкновении, группа исчезает а не движется

выкладывайте полный код



Офлайн

#3 Июнь 8, 2010 14:10:49

rudm
От:
Зарегистрирован: 2009-10-27
Сообщения: 64
Репутация: +  0  -
Профиль   Отправить e-mail  

Спрайты. При столкновении, группа исчезает а не движется

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

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()



Отредактировано (Июнь 8, 2010 14:31:28)

Офлайн

#4 Июнь 8, 2010 22:16:46

meticulos.slacker
От:
Зарегистрирован: 2010-04-15
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Спрайты. При столкновении, группа исчезает а не движется

rudm
if pygame.sprite.groupcollide(bpoint_sprites, rpoint_sprites, 0, True):
Последний параметр(True) говорит функции убить спрайты
http://www.pygame.org/docs/ref/sprite.html#pygame.sprite.groupcollide



Офлайн

#5 Июнь 15, 2010 15:46:07

rudm
От:
Зарегистрирован: 2009-10-27
Сообщения: 64
Репутация: +  0  -
Профиль   Отправить e-mail  

Спрайты. При столкновении, группа исчезает а не движется

большое спасибо. Проверил с False - все работает нормально(хотя мне казалось что с false я уже проверял).
Но при движении, rect одного спрайта чуть наезжает на другой и тот частично исчезает, но я думаю это как то можно пофиксить.



Офлайн

#6 Июнь 15, 2010 15:59:33

meticulos.slacker
От:
Зарегистрирован: 2010-04-15
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Спрайты. При столкновении, группа исчезает а не движется

если я правильно понял то Вам нужна группа pygame.sprite.LayeredDirty



Офлайн

#7 Июнь 25, 2010 13:50:36

rudm
От:
Зарегистрирован: 2009-10-27
Сообщения: 64
Репутация: +  0  -
Профиль   Отправить e-mail  

Спрайты. При столкновении, группа исчезает а не движется

Спасибо! А есть ли интересно способ просчитывать столкновение самих спрайтов, а не объектов rect внутри которых спрайты находятся?



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version