【问题标题】:How can I teleport my snake through the wall with Vector2 in python pygame如何在 python pygame 中使用 Vector2 将我的蛇传送穿过墙壁
【发布时间】:2022-09-25 16:43:50
【问题描述】:

我希望它从蛇穿过墙壁的坐标的同一方向的另一侧返回。

这是我定义蛇及其方向的部分

    def __init__(self):
    self.tail = None
    self.head = None
    self.body = [Vector2(5, 10), Vector2(4, 10), Vector2(3, 10)]
    self.direction = Vector2(1, 0)
    self.new_block = False

    self.head_up = pygame.image.load(\"head_up.png\").convert_alpha()
    self.head_down = pygame.image.load(\"head_down.png\").convert_alpha()
    self.head_right = pygame.image.load(\"head_right.png\").convert_alpha()
    self.head_left = pygame.image.load(\"head_left.png\").convert_alpha()

    self.tail_up = pygame.image.load(\"tail_up.png\").convert_alpha()
    self.tail_down = pygame.image.load(\"tail_down.png\").convert_alpha()
    self.tail_right = pygame.image.load(\"tail_right.png\").convert_alpha()
    self.tail_left = pygame.image.load(\"tail_left.png\").convert_alpha()

    self.body_vertical = pygame.image.load(\"body_vertical.png\").convert_alpha()
    self.body_horizontal = pygame.image.load(\"body_horizontal.png\").convert_alpha()

    self.body_tr = pygame.image.load(\"body_tr.png\").convert_alpha()
    self.body_tl = pygame.image.load(\"body_tl.png\").convert_alpha()
    self.body_br = pygame.image.load(\"body_br.png\").convert_alpha()
    self.body_bl = pygame.image.load(\"body_bl.png\").convert_alpha()

    self.crunch_sound = pygame.mixer.Sound(\"Sound_crunch.wav\")

这部分应该可以正常工作但不能正常工作

本节中的##WINDOW WIDTH 和WINDOW HEIGHT 显示窗口的大小

    if self.snake.body[0].x > 0 and self.snake.body[0].x != 0:
        self.snake.body[0].x += WINDOW_WIDTH
    if self.snake.body[0].y > 0 and self.snake.body[0].y != 0:
        self.snake.body[0].y += WINDOW_HEIGHT
    if self.snake.body[0].x > WINDOW_WIDTH and self.snake.body[0].x != WINDOW_WIDTH:
        self.snake.body[0].x -= WINDOW_WIDTH
    if self.snake.body[0].y > WINDOW_HEIGHT and self.snake.body[0].y != WINDOW_HEIGHT:
        self.snake.body[0].y -= WINDOW_HEIGHT
    if self.snake.body[0].x == 0:
        self.snake.body[0].x += WINDOW_WIDTH
    if self.snake.body[0].y == 0:
        self.snake.body[0].y += WINDOW_HEIGHT
    if self.snake.body[0].x == WINDOW_WIDTH:
        self.snake.body[0].x = 0
    if self.snake.body[0].y == WINDOW_HEIGHT:
        self.snake.body[0].y = 0

    def move_snake(self):
    if self.new_block:
        body_copy = self.body[:]
        body_copy.insert(0, body_copy[0] + self.direction)
        self.body = body_copy[:]
        self.new_block = False
    else:
        body_copy = self.body[:-1]
        body_copy.insert(0, body_copy[0] + self.direction)
        self.body = body_copy[:]

    标签: python python-3.x pygame


    【解决方案1】:
    1. 您必须测试 self.snake.body[0].x < 0self.snake.body[0].y < 0 而不是 self.snake.body[0].x > 0self.snake.body[0].y > 0

    2. 考虑以下代码:

      if x == 0:
          x += WINDOW_WIDTH
      if x == WINDOW_WIDTH:
           x = 0
      

      如果x 为0,则满足第一个条件并且x 变为WINDOW_WIDTH。但现在满足第二个条件,x 再次变为 0。

      所以你的代码应该是这样的:

      if self.snake.body[0].x < 0:
          self.snake.body[0].x += WINDOW_WIDTH
      else if self.snake.body[0].x >= WINDOW_WIDTH:
          self.snake.body[0].x -= WINDOW_WIDTH
      
      if self.snake.body[0].y < 0:
          self.snake.body[0].y += WINDOW_HEIGHT
      else if self.snake.body[0].y >= WINDOW_HEIGHT:
          self.snake.body[0].y -= WINDOW_HEIGHT
      

      可以使用%(模)运算符进一步简化此代码:

      replit.com/@Rabbid76/PyGame-ContinuousMovement

      self.snake.body[0].x %= WINDOW_WIDTH
      self.snake.body[0].y %= WINDOW_HEIGHT
      

    【讨论】:

      猜你喜欢
      • 2015-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多