2010-09-06 6 views
1

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

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

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

ответ

0

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

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

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

+0

В этом проблема. Я не знаю координат каждой точки от пути. Есть ли способ автоматизировать это? – Marconi

+0

Понятно, что теперь очевидным маршрутом является обновление вашего ответа с тем, как создается путь. Как вы нарисуете линию, которая указывает, что вы не знаете? Вы используете библиотеку? – Mizipzor

+0

pygame - единственная зависимость, но вот что я сделал: я редактирую изображение и рисую трассировку по пути, который я хочу, с красной линией, а затем в pygame. Я просматривал пиксели слева направо, а затем сверху вниз. каждый раз, когда я нажимаю красный пиксель, я записываю его координаты. – Marconi

1

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

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

если вы используете разрешение 640х480, это будет приблизительно описать свой путь

другой путь был бы сделать некоторые Pygame код для рисования пути и сохранения его в виде списка, который мы можем назвать «путь», например. то вы можете получить любые координаты х, соответствующие координату говоря

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 

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

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

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

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

=)

Смежные вопросы