我在pygame中对游戏进行编码,我需要一个接受start(x1,y1)和end(x2,y2)作为参数的函数。使用pygame线条绘制功能,我可以像这样直接从一个点到下一个点绘制一条线
def make_bullet_trail(x1,y1,x2,y2):
pygame.draw.line(screen,(0,0,0),(x1,y1),(x2,y2))
但是,我希望从x1,y1开始,该行的长度不超过10个像素,因此如果这些点距离100个像素,则不会绘制90个像素的行。我怎样才能动态地写这个,这样无论这4个点在哪里,总是从一个到另一个开始绘制并在十个像素后停止?
答案 0 :(得分:2)
在调用线条绘制功能之前,您可以调整(x2,y2)点。你可能想做这样的事情:
# Get the total length of the line
start_len = ((x2 - x1) ** 2 + (y2 - y1) ** 2) ** 0.5
# The desired length of the line is a maximum of 10
final_len = min(start_len, 10)
# figure out how much of the line you want to draw as a fraction
ratio = 1.0 * final_len / start_len
# Adjust your second point
x2 = x1 + (x2 - x1) * ratio
y2 = y1 + (y2 - y1) * ratio
但是,由于您正在使用pygame,因此您可能需要整数个像素。在这种情况下,您可能希望将int(round())
用于输出x2和y2,并且还需要调整比率,以便在主要(最长)方向上获得正好10个像素。要进行此调整,您只需使用max(abs(x2-x1), abs(y2-y1))
作为长度。这不是真正的长度,但它可以确保每次都获得相同数量的像素。