Python 海龟图形-调整要显示的形状大小

Python 海龟图形-调整要显示的形状大小,python,python-2.7,turtle-graphics,Python,Python 2.7,Turtle Graphics,我正在使用Python 2.7。我只能使用海龟模块创建一个游戏。我的1920 x 1080显示器可以完美缩放所有图像,动画播放效果也很好,但是(例如)在1280 x 720显示器上,图像无法正确缩放。我正在使用turtle.shape()处理图像。我该如何解决这个问题 我添加了一个图像 和a来进一步解释这个问题 正如您所看到的,图标重叠,图像反弹到第四个,而不是一直向前 以下是我定义屏幕大小的方式: screen_width = ctypes.windll.user32.GetSystemMe

我正在使用Python 2.7。我只能使用海龟模块创建一个游戏。我的1920 x 1080显示器可以完美缩放所有图像,动画播放效果也很好,但是(例如)在1280 x 720显示器上,图像无法正确缩放。我正在使用
turtle.shape()
处理图像。我该如何解决这个问题

我添加了一个图像

和a来进一步解释这个问题

正如您所看到的,图标重叠,图像反弹到第四个,而不是一直向前

以下是我定义屏幕大小的方式:

screen_width = ctypes.windll.user32.GetSystemMetrics(0) - ctypes.windll.user32.GetSystemMetrics(0) / 4

screen_height = ctypes.windll.user32.GetSystemMetrics(1) - ctypes.windll.user32.GetSystemMetrics(1) / 4
  • 它采用显示大小,并将自身减去4,作为窗口的最终显示

    • 没有您的代码,我无法在我的环境中完全测试这一点。其思想是使用虚拟坐标,以便在统一处理单个图形元素的级别上进行缩放:

      import turtle
      
      VIRTUAL_ASPECT_RATIO = 1.8
      VIRTUAL_WIDTH = 2000
      VIRTUAL_HEIGHT = VIRTUAL_WIDTH / VIRTUAL_ASPECT_RATIO
      
      screen_width = 3 * ctypes.windll.user32.GetSystemMetrics(0) / 4
      screen_height = 3 * ctypes.windll.user32.GetSystemMetrics(1) / 4
      
      # attempt to adjust the real window to match the virtual aspect ratio
      if screen_width / VIRTUAL_ASPECT_RATIO < screen_height:
          screen_height = screen_width / VIRTUAL_ASPECT_RATIO
      elif screen_height * VIRTUAL_ASPECT_RATIO < screen_width:
          screen_width = screen_height * VIRTUAL_ASPECT_RATIO
      else:
          pass  # probably need to do something where we adjust both
      
      screen = turtle.Screen()
      screen.setup(screen_width, screen_height)  # size the real window
      screen.setworldcoordinates(-VIRTUAL_WIDTH/2, -VIRTUAL_HEIGHT/2, VIRTUAL_WIDTH/2, VIRTUAL_HEIGHT/2)  # virtual coordinates
      
      yertle = turtle.Turtle()
      
      yertle.circle(100)
      
      turtle.mainloop()
      
      导入海龟
      虚拟纵横比=1.8
      虚拟宽度=2000
      虚拟高度=虚拟宽度/虚拟纵横比
      屏幕宽度=3*ctypes.windl.user32.GetSystemMetrics(0)/4
      屏幕高度=3*ctypes.windlel.user32.GetSystemMetrics(1)/4
      #尝试调整实际窗口以匹配虚拟纵横比
      如果屏幕宽度/虚拟屏幕纵横比<屏幕高度:
      屏幕高度=屏幕宽度/虚拟纵横比
      elif屏幕高度*虚拟纵横比<屏幕宽度:
      屏幕宽度=屏幕高度*虚拟纵横比
      其他:
      pass#可能需要做一些调整
      screen=turtle.screen()
      屏幕。设置(屏幕宽度、屏幕高度)#调整真实窗口的大小
      screen.setworldcoordinates(-VIRTUAL_-WIDTH/2,-VIRTUAL_-HEIGHT/2,VIRTUAL_-WIDTH/2,VIRTUAL_-HEIGHT/2)虚拟坐标
      yertle=海龟。海龟()
      耶特尔圆(100)
      tutle.mainloop()
      

      让我们知道以上内容对您的作用。

      没有您的代码,我无法在我的环境中对其进行全面测试。其思想是使用虚拟坐标,以便在统一处理单个图形元素的级别上进行缩放:

      import turtle
      
      VIRTUAL_ASPECT_RATIO = 1.8
      VIRTUAL_WIDTH = 2000
      VIRTUAL_HEIGHT = VIRTUAL_WIDTH / VIRTUAL_ASPECT_RATIO
      
      screen_width = 3 * ctypes.windll.user32.GetSystemMetrics(0) / 4
      screen_height = 3 * ctypes.windll.user32.GetSystemMetrics(1) / 4
      
      # attempt to adjust the real window to match the virtual aspect ratio
      if screen_width / VIRTUAL_ASPECT_RATIO < screen_height:
          screen_height = screen_width / VIRTUAL_ASPECT_RATIO
      elif screen_height * VIRTUAL_ASPECT_RATIO < screen_width:
          screen_width = screen_height * VIRTUAL_ASPECT_RATIO
      else:
          pass  # probably need to do something where we adjust both
      
      screen = turtle.Screen()
      screen.setup(screen_width, screen_height)  # size the real window
      screen.setworldcoordinates(-VIRTUAL_WIDTH/2, -VIRTUAL_HEIGHT/2, VIRTUAL_WIDTH/2, VIRTUAL_HEIGHT/2)  # virtual coordinates
      
      yertle = turtle.Turtle()
      
      yertle.circle(100)
      
      turtle.mainloop()
      
      导入海龟
      虚拟纵横比=1.8
      虚拟宽度=2000
      虚拟高度=虚拟宽度/虚拟纵横比
      屏幕宽度=3*ctypes.windl.user32.GetSystemMetrics(0)/4
      屏幕高度=3*ctypes.windlel.user32.GetSystemMetrics(1)/4
      #尝试调整实际窗口以匹配虚拟纵横比
      如果屏幕宽度/虚拟屏幕纵横比<屏幕高度:
      屏幕高度=屏幕宽度/虚拟纵横比
      elif屏幕高度*虚拟纵横比<屏幕宽度:
      屏幕宽度=屏幕高度*虚拟纵横比
      其他:
      pass#可能需要做一些调整
      screen=turtle.screen()
      屏幕。设置(屏幕宽度、屏幕高度)#调整真实窗口的大小
      screen.setworldcoordinates(-VIRTUAL_-WIDTH/2,-VIRTUAL_-HEIGHT/2,VIRTUAL_-WIDTH/2,VIRTUAL_-HEIGHT/2)虚拟坐标
      yertle=海龟。海龟()
      耶特尔圆(100)
      tutle.mainloop()
      

      让我们知道以上内容对您的作用。

      听起来您好像在对某个地方的窗口大小进行硬编码假设。这就是我定义屏幕大小的方式:(添加到帖子中)有人知道吗?听起来您好像在对某个地方的窗口大小进行硬编码假设。这就是我定义屏幕大小的方式:(添加到帖子中)有人得到什么吗?我使用了纵横比,它们工作得很好,除了1280 x 720屏幕上的动画没有完全工作。当我使用
      .setworldcoordinates
      时,图像重叠,如果没有它,它会按预期工作。谢谢。我使用了纵横比,它们工作得很好,除了1280 x 720屏幕上的动画没有完全工作。当我使用
      .setworldcoordinates
      时,图像重叠,如果没有它,它会按预期工作。谢谢