В своей игре я пытаюсь создать 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()
Я ожидаю, что персонаж сможет двигаться внутри черной, но не средней пиксельной части.Мне бы хотелось, чтобы после того, как вы дотронетесь до края или края пикселей в середине экрана, оно либо остановит ваше движение, либо отскочит вас в направлении, противоположном направлению которого оно отскочило в середину.Проблема, которая на самом деле происходит, заключается в том, что она вынуждена двигаться только вверх, когда она находится в левой части экрана, а когда находится в углу и пытается добраться до верха или низа, она переходит в перевернутый треугольник назад.туда, где это было раньше.Вот диаграмма:
, если вам нужно увидеть больше моего кода, оставьте комментарий ниже.