如何在pygame中沿路径blit图像?

时间:2010-09-06 02:41:48

标签: pygame

这是我想要实现的目标的图像:http://bit.ly/cabifI 基本上我希望当我按下左右箭头键时,蓝色圆圈沿着曲线路径来回移动。

我知道我必须对图像进行blit,但有没有办法自动确定路径的x,y坐标,并在按下按键的同时将图像blit到那里?

或者是否需要使用一些算法/技术之王?

3 个答案:

答案 0 :(得分:1)

你可以很容易地获得坐标的一种方法是:

y = int( math.cos(x/70) * 30 + surface.get_height()/2 )

假设您使用640x480的分辨率,它将大致描述您的路径

另一种方法是制作一些pygame代码来绘制路径,并将其存储为我们可以称为“路径”的列表。那么你可以通过说

获得任何x坐标的相应y坐标
path[x]

您想要的代码可能如下所示:

path = list(0 for x in range(screen.get_width())) #make every y to 0 originally

while not <exit condition>:
    if pygame.mouse.get_pressed()[0]: #if lmb is pressed
        mpos = pygame.mouse.get_pos()
        x, y = mpos[0], mpos[1] #redundant, but for demonstrating
        path[x] = y #so this will map y coordinates to x coordinates

    draw_path(screen, path) #some function to draw you path, so its easier to make

当然还有一些你必须解决的问题,比如如果一个坐标没有被映射,它将是0并且你的球不会移动得非常光滑

你也可以使用'cos'函数生成列表'path',就像这样;

path = []
for x in range(len(screen.get_width())):
    y = int( math.cos(x/70) * 30 + surface.get_height()/2 )
    path.append(y)

也像mizipzor说你会调整球,所以看起来它在曲线顶部而不是通过它滚动

=)

答案 1 :(得分:1)

你可以使用BézierCurves,但这对你正在做的事情来说太过分了。以下是关于该主题的精彩教程介绍:http://devmag.org.za/2011/04/05/bzier-curves-a-tutorial/ 和Pygame示例代码:http://www.pygame.org/tags/bezier

答案 2 :(得分:0)

我假设您知道路径坐标。

在路径上给出一个点,将球放在同一个x上,但让y = y - ballRadius - (lineWidth / 2)

一个非常简单的近似;你可能会有一些交叉路口,特别是在陡坡上,但它可能会有所作为。