Обработка столкновений
14.06.2021, 09:06. Показов 2727. Ответов 0
Хочу в 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
| import pygame
import Engine as en
clock = pygame.time.Clock()
window = pygame.display.set_mode((en.W, en.H))
pygame.display.set_caption('Game')
WallF = False
WallB = False
WallL = False
WallR = False
en.Wall.__init__(en.Wall, en.x, en.y)
run = True
while run:
clock.tick(30)
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
window.fill((en.LightBlue))
keys = pygame.key.get_pressed()
#draw all
#pygame.draw.rect(window, en.purple, (en.x + 60, en.y + 100, 60, 400))
#pygame.draw.rect(window, en.purple, (en.x + 780, en.y + 100, 60, 400))
#pygame.draw.rect(window, en.purple, (en.x + 60, en.y + 100, 780, 60))
#pygame.draw.rect(window, en.purple, (en.x + 60, en.y + 500, 780, 60))
xP = en.Wall.draw(en.Wall, window, en.purple, en.x + 34, en.y + 48, 100, 500),\
en.Wall.draw(en.Wall, window, en.red, 84, 98, 70, 33),\
for i in xP:
if i[0] - 20 <= en.centerX and i[0] >= en.centerX:
WallF = False
WallB = False
WallL = True
WallR = False
print('True')
if i[0] + i[2] + 20 >= en.centerX and i[0] + i[2] <= en.centerX:
WallF = False
WallB = False
WallL = False
WallR = True
print('True')
if i[1] - 20 <= en.centerY and i[1] >= en.centerY:
WallF = True
WallB = False
WallL = False
WallR = False
print('True')
if i[1] + i[3] + 20 >= en.centerY and i[1] + i[3] <= en.centerY:
WallF = False
WallB = True
WallL = False
WallR = False
print('True')
else:
WallF = False
WallB = False
WallL = False
WallR = False
# move events
if WallF and keys[pygame.K_w]:
en.y += en.speed
if keys[pygame.K_s] and WallB:
en.y -= en.speed
if keys[pygame.K_a] and WallL:
en.x += en.speed
if keys[pygame.K_d] and WallR:
en.x -= en.speed
#draw person
pygame.draw.circle(window, en.green, (en.centerX, en.centerY), 20)
pygame.display.update() |
|
Скрипт Engine
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
| import pygame
#Resolution (Defalt - 900*600)
W = 900
H = 600
x = 0
y = 0
speed = 4
class Wall:
def __init__(self, x, y):
self.xOrig = x
self.yOrig = y
def draw(self, window, color, x, y, withs, heitht):
pygame.draw.rect(window, color, (x, y, withs, heitht))
XP = self.xOrig + x
YP = self.yOrig + y
return XP, YP, withs, heitht
black = 0, 0, 0
white = 255, 255, 255
red = 255, 0, 0
green = 0, 255, 0
blue = 0, 0, 255
yellow = 255, 255, 0
purple = 255, 0, 255
LightBlue = 0, 255, 255
centerX = W // 2
centerY = H // 2
ForwPort = False
BackPort = False
RightPort = False
LeftPort = False |
|
0
|