Я пытаюсь создать игру, в которой, когда игрок щелкает, игрок стреляет снарядом по тому же пути, что и точка, на которую нажали. Мой код пока работает нормально, за исключением того, что чем дальше игрок щелкает, тем быстрее он движется. Вот код:
class Projectile(pygame.sprite.Sprite):
x2 = 0
y2 = 0
slope_x = 0
slope_y = 0
attack_location = ()
slope = 0
def __init__(self,image):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load(image)
self.rect = self.image.get_rect()
self.rect.x = 390
self.rect.y = 289
self.attack_location = (mouse_x,mouse_y)
self.mask = pygame.mask.from_surface(self.image)
self.x2 = self.attack_location[0]
self.y2 = self.attack_location[1]
self.slope_y = self.y2 - 300
self.slope_x = self.x2 - 400
def update(self):
self.rect.x += (self.slope_x) / 15
self.rect.y += (self.slope_y) / 15
Мой код немного неаккуратный и простой, но я хотел бы знать, есть ли способ установить постоянную скорость или, может быть, даже использовать тригонометрию для движения снаряда под углом.
На самом деле мне удалось нормализовать вектор, но снаряд выходит как будто из (0,0), а позиция персонажа (400,300). Мне интересно, есть ли способ сделать так, чтобы вектор начинался с (400 300), или есть другое решение моей исходной проблемы. Спасибо! Вот код:
def __init__(self,image):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load(image)
self.rect = self.image.get_rect()
self.rect.x = 0
self.rect.y = 0
self.attack_location = (mouse_x,mouse_y)
self.mask = pygame.mask.from_surface(self.image)
self.x2 = self.attack_location[0]
self.y2 = self.attack_location[1]
self.d = math.sqrt(((self.x2)**2) + ((self.y2)**2))
self.slope_x = self.x2 / self.d
self.slope_y = self.y2 / self.d
def update(self):
self.rect.x += (self.slope_x) * 10
self.rect.y += (self.slope_y) * 10
x2, y2
становится больше (или меньше). Это означает, чтоslope_y, slope_x
становится больше. Это означает, что приращение, которое вы увеличиваетеrect.x, rect.y
, больше. Поэтому каждый раз, когда вы обновляете позицию ракеты, она увеличивается на меньшую или большую величину в зависимости от того, где вы щелкнули. - person JGerulskis   schedule 06.04.2015