В моей игре я создаю турель (тип пулемета, который вы используете на земле).Проблема в том, что я использую джойстик для перемещения персонажа, когда джойстик направлен вниз, скорость у положительна (так что он может двигаться вниз), противоположное, если вы двигаетесь вверх.Затем if проверяет ваш текущий угол и видит, в каком направлении вы указываете, если произойдет одно из операторов if, тогда оно позволит вам двигаться.Главная проблема заключается в том, что когда я перемещаю джойстик вверх, стрелы указывают вниз.
Я уже пытался создать переменную, которая сохраняет направление, но приводит к той же проблеме, поэтому я отказался от этой идеи и вернулся ктот, который у меня был раньше.Существует также подставка для револьвера, на которой надевается револьверная головка
joystick = pygame.joystick.Joystick(0)
joystick.init()
turret_stand_pic = pygame.image.load("C:/knuckles_pictures/turret_stand.png").convert_alpha()
class Turret_stand():
def __init__(self, x, y, picture, picture_tag):
self.xpos = x
self.ypos = y
self.picture = picture
super().__init__()
self.picture = pygame.transform.scale(self.picture, (200, 200))
self.rect = self.picture.get_rect()
self.rect.x = self.xpos
self.rect.y = self.ypos
self.tag = picture_tag
def draw(self):
screen.blit(self.picture, (self.xpos, self.ypos))
turret_gun_pic = pygame.image.load("C:/knuckles_pictures/turret_gun.png").convert_alpha()
class Turret_gun():
def __init__(self, x, y, picture, picture_tag):
self.xpos = x
self.ypos = y
self.picture = picture
super().__init__()
self.picture = pygame.transform.scale(self.picture, (200, 80))
self.rect = self.picture.get_rect()
self.rect.x = self.xpos
self.rect.y = self.ypos
self.tag = picture_tag
self.previous_angle = 0
self.angle = -90
self.speed_x = 0
self.speed_y = 0
self.facing = "left"
def rotate(self, angle):
if angle != self.angle:
self.picture = pygame.transform.rotate(self.picture, angle)
"""self.angle += angle
self.previous_angle = self.angle"""
def draw(self):
if self.angle == 0:
screen.blit(self.picture, (self.xpos+70, self.ypos-70))
elif self.angle == -90:
screen.blit(self.picture, (self.xpos, self.ypos))
turret = Turret_gun(500, 370, turret_gun_pic, "turret")
turret_stand = Turret_stand(500, 400, turret_stand_pic, "turret stand")
while True:
[...]
if joystick:
move = 3
axis_x_two, axis_y_two = (joystick.get_axis(3), joystick.get_axis(2))
if abs(axis_x_two) > 0.1:
turret.speed_x = move * axis_x_two
turret.speed_y = move * axis_y_two
turret.speed_y = round(int(turret.speed_y))
turret.speed_x = round(int(turret.speed_x))
if turret.angle == -90 and turret.speed_y == -3 and turret.speed_x <= 1 and turret.speed_x >= -1:
turret.rotate(90)
if turret.angle == 0 and turret.speed_x == -3 and turret.speed_y <= 1 and turret.speed_y >= -1:
turret.rotate(-90)
turret.update()
turret.draw()
. Фактические результаты состоят в том, что при нажатии джойстика вверх пулемет направлен вниз.Вот что я имею в виду:
В этом случае револьверная головка направлена вниз:
Что я должен ожидать, так это то, что когда я перемещаю джойстик вверх, турель указывает вверх.
Иногда пистолет не показывает, когда джойстик направлен вправо: