Опитвам се да създам игра, в която когато играчът щракне, играчът изстрелва снаряд по същия път на щракнатата точка. Моят код работи добре досега, с изключение на това, че колкото по-далеч играчът щракне, толкова по-бързо се движи. Ето кода:
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