Как мне перетащить изображение вдоль пути в Pygame? - PullRequest
1 голос
/ 06 сентября 2010

Вот изображение того, чего я пытаюсь достичь: http://bit.ly/cabifI По сути, я хочу, чтобы синий круг двигался вдоль кривой кривой назад и вперед при нажатии клавиш со стрелками вправо и влево.

Я знаю, что нужно перетаскивать изображение, но есть ли способ автоматически определить координаты x, y пути и вставить туда изображение при нажатии клавиш?

Или есть какой-то король алгоритма/ методы, которые нужно использовать?

Ответы [ 3 ]

1 голос
/ 13 февраля 2012

один способ получить координаты довольно легко, это:

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, и ваш шар не будет двигаться очень плавно

вы можете сгенерировать список 'path', используя эту 'cos' -функцию, например,

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

также, как Мизипзор сказал, что вам нужно будет отрегулировать мяч так, чтобы он выглядел так, как будто он катится по вершине кривой, а не через него

=)

1 голос
/ 15 февраля 2012

Вы можете использовать кривые Безье, но это излишне для того, что вы делаете. Вот хорошее введение учебника по теме: http://devmag.org.za/2011/04/05/bzier-curves-a-tutorial/ И пример кода Pygame: http://www.pygame.org/tags/bezier

0 голосов
/ 06 сентября 2010

Полагаю, вы знаете координаты путей.

Учитывая одну точку вдоль пути, поместите шар на тот же x, но пусть y = y - ballRadius - (lineWidth / 2).

Очень простое приближение; у вас, вероятно, будут некоторые перекрестки, особенно на крутых склонах, но это может помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...