Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Пуля с само наводкой летит будто косинус и в правую часть экрана, python

Kot Kotovich Ученик (151), на голосовании 1 неделю назад
Делаю игру и начал писать механику пуль, сделал само наводку, но появился странный баг. В какой-то момент пуля разворачивается направо и начинает лететь и рисовать синус (в смысле лететь по траектории как синус). Уже час мучаюсь не что не помогает, может кто-то знает в чём проблема ? Могу отправить доп. материалы если необходимо
 class Bullet:  

def __init__(self, x=0, y=0, settings={}):

"""

Инициализирует пулю.
Args:

x (int, optional): Координата x пули. Defaults to 0.

y (int, optional): Координата y пули. Defaults to 0.

settings (dict): Словарь с настройками пули:

- "color": Цвет пули.

- "strength": Сила урона пули.

- "speed": Скорость пули.

- "target": Цель пули (объект с атрибутом rect).

- "parent": Объект, который выстрелил пулей.

- "follow_type": Тип движения пули:

- 0: Прямая траектория.

- 1: Преследование цели (ракета).

"""

global bullets

self.image = pygame.Surface((10, 10))

self.image.fill(settings["color"])

self.rect = self.image.get_rect(center=(x, y))

self.damage = settings["strength"]

self.speed = settings["speed"]

self.target = settings["target"]

self.parent = settings["parent"]

self.follow_type = settings["follow_type"]

self.target_change = settings["target_change"]

self.angle = math.atan2(self.target.rect.centery - self.parent.position[1],

self.target.rect.centerx - self.parent.position[0])



bullets.append(self)



def update(self):

global enemies, bullets

if self.target_change == 1 and self.target not in enemies and len(enemies) > 0:

self.target = min(enemies, key=lambda enemy: math.hypot(enemy.rect.centerx - self.rect.centerx, enemy.rect.centery - self.rect.centery))

if self.follow_type == 0:

self.rect.x += self.speed * math.cos(self.angle)

self.rect.y += self.speed * math.sin(self.angle)

elif self.follow_type == 1:

if len(enemies) > 0 and self.target in enemies:

target_angle = math.atan2(self.target.rect.centery - self.rect.centery,

self.target.rect.centerx - self.rect.centerx)



self.angle = self.angle + 0.1 * (target_angle - self.angle)



self.rect.x += self.speed * math.cos(self.angle)

self.rect.y += self.speed * math.sin(self.angle)



def draw(self, screen):

screen.blit(self.image, self.rect)
Голосование за лучший ответ
- Ученик (102) 1 месяц назад
чё за отстой код (⊙_⊙)?
Похожие вопросы