我们在使用pygame的时候会发现原点在奇怪的位置,会影响我们进行一些坐标和角度变换。
为此我转载了一篇改变原点和坐标系的方法。
1.PyGame 坐标系简介
在 PyGame 中,坐标系是用来确定游戏窗口中各个元素位置的方案。默认情况下,PyGame 的坐标系原点位于左上角,x 轴向右增长,y 轴向下增长。这意味着坐标系中的点的位置值(x,y)将会决定该点在窗口中的位置。
2.改变原点位置的方法
如果我们希望在编写游戏时改变原点的位置,使得坐标系的原点位于窗口的中心,我们可以采取以下方法:
使用 PyGame 的转换函数
PyGame 提供了一些转换函数,可以用来改变坐标系的原点位置。其中,pygame.transform.scale
函数可以用来缩放游戏窗口。
import pygame
pygame.init()
# 创建一个游戏窗口,大小为 800x600
window_width = 800
window_height = 600
window = pygame.display.set_mode((window_width, window_height))
# 设置坐标系的原点在窗口的中心
pygame.display.set_caption("Change Origin Position Example")
pygame.transform.scale(window, (window_width // 2, window_height // 2))
# 在坐标系中绘制一个圆形
circle_radius = 50
circle_x = window_width // 2
circle_y = window_height // 2
pygame.draw.circle(window, (255, 0, 0), (circle_x, circle_y), circle_radius)
pygame.display.flip()
# 游戏循环
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
pygame.quit()
在上述示例代码中,我们首先创建了一个大小为800×600的游戏窗口,然后通过 pygame.transform.scale
函数将窗口的大小缩放为原来的一半。接着,我们通过 pygame.draw.circle
函数在新的坐标系中绘制了一个圆形,圆心位于坐标 (窗口宽度的一半, 窗口高度的一半) 处。
自行编写坐标转换函数
除了使用 PyGame 提供的转换函数外,我们也可以自行编写坐标转换函数来实现改变原点位置的效果。下面是一个示例代码:
import pygame
pygame.init()
# 创建一个游戏窗口,大小为 800x600
window_width = 800
window_height = 600
window = pygame.display.set_mode((window_width, window_height))
# 设置坐标系的原点在窗口的中心
origin_x = window_width // 2
origin_y = window_height // 2
# 自定义坐标转换函数
def convert_coordinates(x, y):
new_x = x + origin_x
new_y = -y + origin_y
return new_x, new_y
# 在坐标系中绘制一个圆形
circle_radius = 50
circle_x = 0
circle_y = 0
new_circle_x, new_circle_y = convert_coordinates(circle_x, circle_y)
pygame.draw.circle(window, (255, 0, 0), (new_circle_x, new_circle_y), circle_radius)
pygame.display.flip()
# 游戏循环
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
pygame.quit()
在上述示例代码中,我们定义了一个 convert_coordinates
函数,用来将原始坐标转换为在新的坐标系中的位置。函数会根据原点的位置做出相应的调整,然后返回新的坐标值。在代码的主循环中,我们使用这个函数将圆心的坐标转换为新坐标系中的位置,并通过 pygame.draw.circle
函数绘制一个圆形。
3.总结
通过使用 PyGame 提供的转换函数或自行编写坐标转换函数,我们可以灵活地改变坐标系的原点位置。这样,在编写游戏时,我们可以更方便地确定各个元素的位置,并准确地控制它们的移动和显示。