这是我想要实现的目标的图像:http://bit.ly/cabifI 基本上我希望当我按下左右箭头键时,蓝色圆圈沿着曲线路径来回移动。
我知道我必须对图像进行blit,但有没有办法自动确定路径的x,y坐标,并在按下按键的同时将图像blit到那里?
或者是否需要使用一些算法/技术之王?
答案 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)
。
一个非常简单的近似;你可能会有一些交叉路口,特别是在陡坡上,但它可能会有所作为。