pygame почему мои барьеры заставляют игрока сходить с ума от pygame - PullRequest
0 голосов
/ 15 марта 2019

В своей игре я пытаюсь создать Mario Kart (в основном, гоночную игру) отдельно от 2D-версии, и я пытаюсь добавить барьеры, чтобы вы не могли попасть в середину экрана.

class Player:
    def __init__(self, x, y, wah):
        self.xpos = x
        self.ypos = y
        self.picture = wah
        self.speed_x = 0
        self.speed_y = 0
        self.rect = self.picture.get_rect()
        self.rect.x = self.xpos
        self.rect.y = self.ypos
        self.picture = pygame.transform.scale(self.picture, (20, 20))

    def update(self):
        self.xpos += self.speed_x
        self.ypos += self.speed_y
        self.rect.x = self.xpos
        self.rect.y = self.ypos


    def draw(self):
        screen.blit(self.picture, (self.xpos, self.ypos))

    def is_collided_with(self, sprite):
        return self.rect.colliderect(sprite.rect)


while True:

  if joystick:
        axis_x, axis_y = (joystick.get_axis(0), joystick.get_axis(1))
        if abs(axis_x) > 0.1:
            player_one.speed_x = 2 * axis_x
        if abs(axis_y) > 0.1:
            player_one.speed_y = 2 * axis_y


   if player_one.xpos > 95 and player_one.ypos > 30 and player_one.ypos < 662:   #LEFT
        player_one.speed_x = -1

    if player_one.xpos < 1161 and player_one.ypos > 30 and player_one.ypos < 662:   #RIGHT
        player_one.speed_x = 1

    if player_one.ypos > 20 and player_one.xpos > 95 and player_one.xpos < 1161: #TOP
        player_one.speed_y = -1

    if player_one.ypos < 666 and player_one.xpos > 95 and player_one.xpos < 1161: #TOP
        player_one.speed_y = 1

    player_one.update()
    player_one.draw()

Я ожидаю, что персонаж сможет двигаться внутри черной, но не средней пиксельной части.Мне бы хотелось, чтобы после того, как вы дотронетесь до края или края пикселей в середине экрана, оно либо остановит ваше движение, либо отскочит вас в направлении, противоположном направлению которого оно отскочило в середину.Проблема, которая на самом деле происходит, заключается в том, что она вынуждена двигаться только вверх, когда она находится в левой части экрана, а когда находится в углу и пытается добраться до верха или низа, она переходит в перевернутый треугольник назад.туда, где это было раньше.Вот диаграмма: what I am asking for, если вам нужно увидеть больше моего кода, оставьте комментарий ниже.

1 Ответ

0 голосов
/ 15 марта 2019

Вы переопределяете свои значения .speed_x и .speed_y, которые вы получаете в этой части:

while True:

   if player_one.xpos > 95 and player_one.ypos > 30 and player_one.ypos < 662:   #LEFT
        player_one.speed_x = -1

    if player_one.xpos < 1161 and player_one.ypos > 30 and player_one.ypos < 662:   #RIGHT
        player_one.speed_x = 1

    if player_one.ypos > 20 and player_one.xpos > 95 and player_one.xpos < 1161: #TOP
        player_one.speed_y = -1

    if player_one.ypos < 666 and player_one.xpos > 95 and player_one.xpos < 1161: #TOP
        player_one.speed_y = 1

С новыми значениями в этой части:

if joystick:
    axis_x, axis_y = (joystick.get_axis(0), joystick.get_axis(1))
    if abs(axis_x) > 0.1:
        player_one.speed_x = 2 * axis_x
    if abs(axis_y) > 0.1:
        player_one.speed_y = 2 * axis_y

Так что сначалачасть цикла абсолютно ничего не делает, я полагаю, вы не ожидаете, что это так.Я бы посоветовал сначала выполнить подсчет джойстика и переопределить его, если вы обнаружите, что ваш персонаж окажется в барьере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...