Форум программистов, компьютерный форум, киберфорум
Python: PyGame
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/64: Рейтинг темы: голосов - 64, средняя оценка - 4.83
1 / 0 / 1
Регистрация: 01.06.2019
Сообщений: 61

Столкновения в pygame

01.06.2019, 11:59. Показов 13150. Ответов 2

Студворк — интернет-сервис помощи студентам
Добрый день, помогите разобраться со столкновениями в pygame. В коде есть анимированный персонаж и анимированный блок, по задумке когда персонаж подходит к факелу должно происходить столкновение. Почитав гайды и посмотрев несколько примеров остановился на данном примере.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
import pygame # Импорт модулей
import random
 
class Player(pygame.sprite.Sprite): # Создаю класс Player на основе класса pygame.sprite.Sprite
    def __init__(self, player_image, player_location): # создаю "экземпляр" игрока, используя 2 аргумента
        pygame.sprite.Sprite.__init__(self) # инициализирую спрайт
        self.image = player_image # изображение игрока    
        self.rect = self.image.get_rect() # Получаю рамку, в которую помещен спрайт
        self.rect.left, self.rect.top = player_location # присваиваю рамке координаты
            
class Enemy(pygame.sprite.Sprite): # Создаю класс Enemy на основе класса pygame.sprite.Sprite
    def __init__(self,enemy_image, enemy_location, enemy_speed): # создаю "экземпляр" врага
        pygame.sprite.Sprite.__init__(self) # инициализирую спрайт
        self.image = enemy_image # изображение  врага
        self.speed = enemy_speed # скорость врага
        self.rect = self.image.get_rect() # Получаю рамку, в которую помещен спрайт
        self.rect.left, self.rect.top = enemy_location # присваиваю рамке координаты
        
    def move(self): # Метод движения
        self.rect = self.rect.move(self.speed) # Двигаю рамку с помощью self.rect.move(<[x,y]>)
        if self.rect.top > 480 or self.rect.top < 0: # Если координаты рамки больше/меньше границ, то
            self.speed[1] = -self.speed[1] # реверсирую скорость
 
def animate(group): # Обнаружение столкновений
    global running # running - глобальная переменная
    screen.fill([255,255,255]) # если убрать эту строку кода то прога не робит ???
    enemy_group.remove(player) # Удаляю спрайт игрока из группы
    if pygame.sprite.spritecollide(player, enemy_group, False): # Проверяю столкновение игрока с любым из врагов
        running = False # выход из игры
    enemy_group.add(player) # добавляю спрайт игрока обратно в группу
    screen.blit(enemy.image, enemy.rect)  # копирую спрайты на поверхность
        
# Ниже будут константы
height = 480 # высота
width = 640 # Ширина
pygame.init() # Инициализация окна pygame
screen = pygame.display.set_mode([width,height]) # Размер окна и его переменная
screen.fill([255,255,255]) # Заливка заднего фона цветом
enemy_group = pygame.sprite.Group() # Создаю группу  для врагов
 
player_image = pygame.image.load ("gun.png") # загружаю изображение игрока
player_location = [width / 2, height - 64] # определяю стартовое положение
player = Player (player_image, player_location) # создаю объект player
screen.blit(player.image, player.rect) # помещаю игрока на стартовую позицию
 
enemy_image = pygame.image.load ("gun.png") # загружаю изображение врага
enemy_speed = [0,5] # Вертикальная скорость
for row in range (1,4): # создание от 1 до N объектов enemy
    enemy_location = [(row-1) * 192, 200] # расположение
    enemy = Enemy(enemy_image, enemy_location, enemy_speed) # создание объекта enemy
    enemy_group.add(enemy) # добавление врага в группу спрайтов
    
for enemy in enemy_group: # прорисовка врагов
    screen.blit(enemy.image, enemy.rect) # копирование на поверхность
enemy_group.add(player) # добавление в конец списка спрайтов игрока
pygame.display.flip() # обновление окна
 
    
pygame.key.set_repeat(1,10) # подключаю зажатие клавиш-событий
pygame.time.set_timer(pygame.USEREVENT, 1000) # создаю событие, действующее раз в N миллисекунд
clock = pygame.time.Clock() # таймер
 
 
running = True
while running:
    for event in pygame.event.get(): # отслеживание событий
        if event.type == pygame.QUIT:
            running = False
        elif event.type == pygame.KEYDOWN: # если событие - нажатие кнопки
            if event.key == pygame.K_ESCAPE: # K_ESCAPE = Esc
                running = False
            elif event.key == pygame.K_RIGHT and player.rect.right < 640:
                player.rect.left += 10 # смещаю игрока на 7 пикселей вправо
            elif event.key == pygame.K_LEFT and player.rect.left > 0:
                player.rect.left -= 10 # то же влево
        elif event.type == pygame.USEREVENT:
            print (clock.get_fps()) # Количество FPS
    animate(enemy_group) # функция обнаружения столкновений игрока с врагами
    enemy.move() # движенеи врагов
    screen.blit(player.image, player.rect) # ставлю игрока в новое положение
    pygame.display.flip()
    clock.tick(32) # количество повторений главного цикла в секунду
    
 
pygame.quit()
Насколько я из него понял мне нужно конкретно эта строчка
if pygame.sprite.spritecollide(player, enemy_group, False):

в которой есть есть класс player и группа спрайтов enemy_group (за что отвечает False я так и не понял)
Из чего я сделал вывод что мне просто нужно создать группу в которой будет мой факел, и вот тут началась проблемы как я не пытался все время выскакивают ошибки. Поэтому прошу знающих людей подсказать и помочь.
Вот мой код
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
import pygame
 
class fakel(pygame.sprite.Sprite):
    def __init__(self, position):
        self.sheet = pygame.image.load('fakel.png')
        self.sheet.set_clip(pygame.Rect(0, 0, 64, 64))
        self.image = self.sheet.subsurface(self.sheet.get_clip())
        self.rect = self.image.get_rect()
        self.rect.topleft = position
        self.frame = 0
        self.down_states = { 0: (0, 0, 64, 64), 1: (64, 0, 64, 64), 2: (128, 0, 64, 64), 3: (192, 0, 64, 64) , 4: (256, 0, 64, 64), 5: (320, 0, 64, 64), 6: (384, 0, 64, 64), 7: (448, 0, 64, 64) }
 
    def get_frame(self, frame_set):
        self.frame += 1
        if self.frame > (len(frame_set) - 1):
            self.frame = 0
        return frame_set[self.frame]
 
    def clip(self, clipped_rect):
        if type(clipped_rect) is dict:
            self.sheet.set_clip(pygame.Rect(self.get_frame(clipped_rect)))
        else:
            self.sheet.set_clip(pygame.Rect(clipped_rect))
        return clipped_rect
 
    def handle_event(self, event):
        self.clip(self.down_states)
        self.image = self.sheet.subsurface(self.sheet.get_clip())
 
class Player(pygame.sprite.Sprite):
    def __init__(self, position):
        self.sheet = pygame.image.load('player.png')
        self.sheet.set_clip(pygame.Rect(0, 0, 64, 64))
        self.image = self.sheet.subsurface(self.sheet.get_clip())
        self.rect = self.image.get_rect()
        self.rect.topleft = position
        self.frame = 0
        self.left_states = { 0: (0, 64, 64, 64), 1: (64, 64, 64, 64), 2: (128, 64, 64, 64), 3: (192, 64, 64, 64) }
        self.right_states = { 0: (0, 128, 64, 64), 1: (64, 128, 64, 64), 2: (128, 128, 64, 64), 3: (192, 128, 64, 64) }
        self.up_states = { 0: (0, 192, 64, 64), 1: (64, 192, 64, 64), 2: (128, 192, 64, 64), 3: (192, 192, 64, 64)  }
        self.down_states = { 0: (0, 0, 64, 64), 1: (64, 0, 64, 64), 2: (128, 0, 64, 64), 3: (192, 0, 64, 64) }
 
    def get_frame(self, frame_set):
        self.frame += 1
        if self.frame > (len(frame_set) - 1):
            self.frame = 0
        return frame_set[self.frame]
 
    def clip(self, clipped_rect):
        if type(clipped_rect) is dict:
            self.sheet.set_clip(pygame.Rect(self.get_frame(clipped_rect)))
        else:
            self.sheet.set_clip(pygame.Rect(clipped_rect))
        return clipped_rect
       
    def update(self, direction):
        if direction == 'left':
            self.clip(self.left_states)
            self.rect.x -= 5
        if direction == 'right':
            self.clip(self.right_states)
            self.rect.x += 5
        if direction == 'up':
            self.clip(self.up_states)
            self.rect.y -= 5
        if direction == 'down':
            self.clip(self.down_states)
            self.rect.y += 5
 
        if direction == 'stand_left':
            self.clip(self.left_states[0])
        if direction == 'stand_right':
            self.clip(self.right_states[0])
        if direction == 'stand_up':
            self.clip(self.up_states[0])
        if direction == 'stand_down':
            self.clip(self.down_states[0])
 
        self.image = self.sheet.subsurface(self.sheet.get_clip())
 
    def handle_event(self, event): 
        if event.type == pygame.KEYDOWN:
           
            if event.key == pygame.K_LEFT:
                self.update('left')
            if event.key == pygame.K_RIGHT:
                self.update('right')
            if event.key == pygame.K_UP:
                self.update('up')
            if event.key == pygame.K_DOWN:
                self.update('down')
 
        if event.type == pygame.KEYUP:  
 
            if event.key == pygame.K_LEFT:
                self.update('stand_left')            
            if event.key == pygame.K_RIGHT:
                self.update('stand_right')
            if event.key == pygame.K_UP:
                self.update('stand_up')
            if event.key == pygame.K_DOWN:
                self.update('stand_down')
 
 
 
pygame.init()
 
screen = pygame.display.set_mode((640, 480))
clock = pygame.time.Clock()
fakel = fakel((50, 50))
player = Player((150, 150))
 
fakel_test = pygame.sprite.Group() #Тут проблемы с кодом
fakel_g = fakel() #Тут проблемы с кодом
fakel_test.add(fakel_g) #Тут проблемы с кодом
 
x = 0
 
if pygame.sprite.spritecollide(player, fakel_test, False):
    x =1
 
 
 
pygame.key.set_repeat(1,10)
 
running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        if event.type == pygame.KEYDOWN:
                pass
 
 
 
    fakel.handle_event(event)                 
    screen.fill(pygame.Color(0, 180, 160))  
    screen.blit(fakel.image, fakel.rect)
    player.handle_event(event)                 
    screen.blit(player.image, player.rect)
 
                
  
 
    pygame.display.flip()              
    clock.tick(12)
 
pygame.quit ()
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.06.2019, 11:59
Ответы с готовыми решениями:

При импорте pygame пишет что нет модуля pygame.base
Устанавливаю для kivy.Всё есть (sython,gsstreamer,kivy,pyscripter,python) , а вот фраем. pygame не работает.Почему?Что ещё надо для работы...

Ошибка в pygame AttributeError: 'pygame.Rect' object has no attribute 'blit'
Создаю игру, крестики нолики Почему возникает ошибка и как ее исправить? AttributeError: 'pygame.Rect' object has no attribute 'blit' ...

Pygame ошибка module ‘pygame’ has no ‘init’ member
Всем здравствуйте. Недавно начал работать с VS code и выдает такая ошибка. Прикрепляю полностью скрин. Нашел решение перед каждой...

2
1293 / 677 / 367
Регистрация: 07.01.2019
Сообщений: 2,300
01.06.2019, 15:36
Лучший ответ Сообщение было отмечено Kxarog как решение

Решение

Тут много ошибок, вы назвали объект также как класс, поэтому python путается, при создании классов пропустили инициализацию суперкласса, потом пытаетесь обратиться к переменной event вне цикла где она используется, и наконец неправильно указали позицию для отрисовки, это я же не исправлял

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
import pygame
 
class fakel(pygame.sprite.Sprite):
    def __init__(self, position):
        pygame.sprite.Sprite.__init__(self)
        self.sheet = pygame.image.load('fakel.png')
        self.sheet.set_clip(pygame.Rect(0, 0, 64, 64))
        self.image = self.sheet.subsurface(self.sheet.get_clip())
        self.rect = self.image.get_rect()
        self.rect.topleft = position
        self.frame = 0
        self.down_states = { 0: (0, 0, 64, 64), 1: (64, 0, 64, 64), 2: (128, 0, 64, 64), 3: (192, 0, 64, 64) , 4: (256, 0, 64, 64), 5: (320, 0, 64, 64), 6: (384, 0, 64, 64), 7: (448, 0, 64, 64) }
 
    def get_frame(self, frame_set):
        self.frame += 1
        if self.frame > (len(frame_set) - 1):
            self.frame = 0
        return frame_set[self.frame]
 
    def clip(self, clipped_rect):
        if type(clipped_rect) is dict:
            self.sheet.set_clip(pygame.Rect(self.get_frame(clipped_rect)))
        else:
            self.sheet.set_clip(pygame.Rect(clipped_rect))
        return clipped_rect
 
    def handle_event(self, event):
        self.clip(self.down_states)
        self.image = self.sheet.subsurface(self.sheet.get_clip())
 
class Player(pygame.sprite.Sprite):
    def __init__(self, position):
        self.sheet = pygame.image.load('player.png')
        self.sheet.set_clip(pygame.Rect(0, 0, 64, 64))
        self.image = self.sheet.subsurface(self.sheet.get_clip())
        self.rect = self.image.get_rect()
        self.rect.topleft = position
        self.frame = 0
        self.left_states = { 0: (0, 64, 64, 64), 1: (64, 64, 64, 64), 2: (128, 64, 64, 64), 3: (192, 64, 64, 64) }
        self.right_states = { 0: (0, 128, 64, 64), 1: (64, 128, 64, 64), 2: (128, 128, 64, 64), 3: (192, 128, 64, 64) }
        self.up_states = { 0: (0, 192, 64, 64), 1: (64, 192, 64, 64), 2: (128, 192, 64, 64), 3: (192, 192, 64, 64)  }
        self.down_states = { 0: (0, 0, 64, 64), 1: (64, 0, 64, 64), 2: (128, 0, 64, 64), 3: (192, 0, 64, 64) }
 
    def get_frame(self, frame_set):
        self.frame += 1
        if self.frame > (len(frame_set) - 1):
            self.frame = 0
        return frame_set[self.frame]
 
    def clip(self, clipped_rect):
        if type(clipped_rect) is dict:
            self.sheet.set_clip(pygame.Rect(self.get_frame(clipped_rect)))
        else:
            self.sheet.set_clip(pygame.Rect(clipped_rect))
        return clipped_rect
       
    def update(self, direction):
        if direction == 'left':
            self.clip(self.left_states)
            self.rect.x -= 5
        if direction == 'right':
            self.clip(self.right_states)
            self.rect.x += 5
        if direction == 'up':
            self.clip(self.up_states)
            self.rect.y -= 5
        if direction == 'down':
            self.clip(self.down_states)
            self.rect.y += 5
 
        if direction == 'stand_left':
            self.clip(self.left_states[0])
        if direction == 'stand_right':
            self.clip(self.right_states[0])
        if direction == 'stand_up':
            self.clip(self.up_states[0])
        if direction == 'stand_down':
            self.clip(self.down_states[0])
 
        self.image = self.sheet.subsurface(self.sheet.get_clip())
 
    def handle_event(self, event): 
        if event.type == pygame.KEYDOWN:
           
            if event.key == pygame.K_LEFT:
                self.update('left')
            if event.key == pygame.K_RIGHT:
                self.update('right')
            if event.key == pygame.K_UP:
                self.update('up')
            if event.key == pygame.K_DOWN:
                self.update('down')
 
        if event.type == pygame.KEYUP:  
 
            if event.key == pygame.K_LEFT:
                self.update('stand_left')            
            if event.key == pygame.K_RIGHT:
                self.update('stand_right')
            if event.key == pygame.K_UP:
                self.update('stand_up')
            if event.key == pygame.K_DOWN:
                self.update('stand_down')
 
 
 
pygame.init()
 
screen = pygame.display.set_mode((640, 480))
clock = pygame.time.Clock()
fak = fakel((50, 50))
player = Player((150, 150))
 
fakel_test = pygame.sprite.Group() #Тут проблемы с кодом
fakel_g = fakel((150, 150)) #Тут проблемы с кодом
fakel_test.add(fakel_g) #Тут проблемы с кодом
 
x = 0
 
if pygame.sprite.spritecollide(player, fakel_test, False):
    x =1
 
 
 
pygame.key.set_repeat(1,10)
 
running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        if event.type == pygame.KEYDOWN:
                pass
        fak.handle_event(event) 
        player.handle_event(event)   
 
                 
    screen.fill(pygame.Color(0, 180, 160))  
    screen.blit(fakel.image, fakel.rect)              
    screen.blit(player.image, player.rect)
 
                
  
 
    pygame.display.flip()              
    clock.tick(12)
 
pygame.quit ()
0
1 / 0 / 1
Регистрация: 01.06.2019
Сообщений: 61
01.06.2019, 17:02  [ТС]
С классом я понял свою ошибку я ее исправил, насчет отрисовки я так понимаю вы про строчки
fak.handle_event(event)
player.handle_event(event)
как это не странно, но там нет ошибки, дело в том что если сделать как вы указали, анимация у факела, которая должна идти постоянно, идет только если шевелить мышкой или нажимать клавиши. Стало лучше (спасибо за ваши советы) окно теперь хотя бы запускается, но как бы главная проблема осталась, по идее при столкновении переменная х = 0 должна стать х = 1, но она сразу становиться 1
Кликните здесь для просмотра всего текста
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
import pygame
 
class Fakel(pygame.sprite.Sprite):
    def __init__(self, position):
        pygame.sprite.Sprite.__init__(self)
        self.sheet = pygame.image.load('fakel.png')
        self.sheet.set_clip(pygame.Rect(0, 0, 64, 64))
        self.image = self.sheet.subsurface(self.sheet.get_clip())
        self.rect = self.image.get_rect()
        self.rect.topleft = position
        self.frame = 0
        self.down_states = { 0: (0, 0, 64, 64), 1: (64, 0, 64, 64), 2: (128, 0, 64, 64), 3: (192, 0, 64, 64) , 4: (256, 0, 64, 64), 5: (320, 0, 64, 64), 6: (384, 0, 64, 64), 7: (448, 0, 64, 64) }
 
    def get_frame(self, frame_set):
        self.frame += 1
        if self.frame > (len(frame_set) - 1):
            self.frame = 0
        return frame_set[self.frame]
 
    def clip(self, clipped_rect):
        if type(clipped_rect) is dict:
            self.sheet.set_clip(pygame.Rect(self.get_frame(clipped_rect)))
        else:
            self.sheet.set_clip(pygame.Rect(clipped_rect))
        return clipped_rect
 
    def handle_event(self, event):
        self.clip(self.down_states)
        self.image = self.sheet.subsurface(self.sheet.get_clip())
 
class Player(pygame.sprite.Sprite):
    def __init__(self, position):
        self.sheet = pygame.image.load('player.png')
        self.sheet.set_clip(pygame.Rect(0, 0, 64, 64))
        self.image = self.sheet.subsurface(self.sheet.get_clip())
        self.rect = self.image.get_rect()
        self.rect.topleft = position
        self.frame = 0
        self.left_states = { 0: (0, 64, 64, 64), 1: (64, 64, 64, 64), 2: (128, 64, 64, 64), 3: (192, 64, 64, 64) }
        self.right_states = { 0: (0, 128, 64, 64), 1: (64, 128, 64, 64), 2: (128, 128, 64, 64), 3: (192, 128, 64, 64) }
        self.up_states = { 0: (0, 192, 64, 64), 1: (64, 192, 64, 64), 2: (128, 192, 64, 64), 3: (192, 192, 64, 64)  }
        self.down_states = { 0: (0, 0, 64, 64), 1: (64, 0, 64, 64), 2: (128, 0, 64, 64), 3: (192, 0, 64, 64) }
 
    def get_frame(self, frame_set):
        self.frame += 1
        if self.frame > (len(frame_set) - 1):
            self.frame = 0
        return frame_set[self.frame]
 
    def clip(self, clipped_rect):
        if type(clipped_rect) is dict:
            self.sheet.set_clip(pygame.Rect(self.get_frame(clipped_rect)))
        else:
            self.sheet.set_clip(pygame.Rect(clipped_rect))
        return clipped_rect
       
    def update(self, direction):
        if direction == 'left':
            self.clip(self.left_states)
            self.rect.x -= 5
        if direction == 'right':
            self.clip(self.right_states)
            self.rect.x += 5
        if direction == 'up':
            self.clip(self.up_states)
            self.rect.y -= 5
        if direction == 'down':
            self.clip(self.down_states)
            self.rect.y += 5
 
        if direction == 'stand_left':
            self.clip(self.left_states[0])
        if direction == 'stand_right':
            self.clip(self.right_states[0])
        if direction == 'stand_up':
            self.clip(self.up_states[0])
        if direction == 'stand_down':
            self.clip(self.down_states[0])
 
        self.image = self.sheet.subsurface(self.sheet.get_clip())
 
    def handle_event(self, event): 
        if event.type == pygame.KEYDOWN:
           
            if event.key == pygame.K_LEFT:
                self.update('left')
            if event.key == pygame.K_RIGHT:
                self.update('right')
            if event.key == pygame.K_UP:
                self.update('up')
            if event.key == pygame.K_DOWN:
                self.update('down')
 
        if event.type == pygame.KEYUP:  
 
            if event.key == pygame.K_LEFT:
                self.update('stand_left')            
            if event.key == pygame.K_RIGHT:
                self.update('stand_right')
            if event.key == pygame.K_UP:
                self.update('stand_up')
            if event.key == pygame.K_DOWN:
                self.update('stand_down')
 
 
 
pygame.init()
 
screen = pygame.display.set_mode((640, 480))
clock = pygame.time.Clock()
fakel = Fakel((50, 50))
player = Player((150, 150))
 
fakel_test = pygame.sprite.Group() #Тут проблемы с кодом
fakel_g = Fakel((150, 150)) #Тут проблемы с кодом
fakel_test.add(fakel_g) #Тут проблемы с кодом
 
x = 0
 
 
 
 
 
pygame.key.set_repeat(1,10)
 
running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        if event.type == pygame.KEYDOWN:
            pass
        if pygame.sprite.spritecollide(player, fakel_test, True):
            x = 1
    print(x)
    fakel.handle_event(event) 
    player.handle_event(event)   
 
                 
    screen.fill(pygame.Color(0, 180, 160))  
    screen.blit(fakel.image, fakel.rect)              
    screen.blit(player.image, player.rect)
 
                
  
 
    pygame.display.flip()              
    clock.tick(12)
 
pygame.quit ()


Добавлено через 4 минуты
А извините я кажется понял свой косяк, координаты колизии факела и персонажа изначально были на одной точке, пардон за тупость. Спасибо за помощь
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.06.2019, 17:02
Помогаю со студенческими работами здесь

pygame.error: cannot convert without pygame.display initialized
Только начал изучать спрайты Выдаёт ошибку: Traceback (most recent call last): File &quot;D:/project1/OCode.py&quot;, line 18, in...

Не могу реализовать столкновения двух спрайтов в Pygame
Здрасти всем. В общем битый час не могу понять что происходит когда часть кода работает а другая вроде должна но не работает. В общем...

Не могу реализовать столкновения двух спрайтов в Pygame
Здрасти всем. В общем битый час не могу понять что происходит когда часть кода работает а другая вроде должна но не работает. В общем...

Зная скорость и массу шаров до столкновения, расчитать скорости шаров после столкновения
Задача: Два шара с заданными массами и заданной скоростью (массы и скорость шаров различны) двигаются навстречу друг другу. В конце...

Pygame.mixer.music.set_pose() не меняет pygame.mixer.music.get_pose()
Доброго времени суток, друзья! Пишу что-то среднее между часами и музыкальным плеером. Решил, что музыку буду воспроизводить с помощью...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru