2012-04-27 2 views
1

Моя игра - платформа. Я хочу, чтобы игрок двигался, когда он находится на расстоянии X пикселей от центра, двигаясь влево или вправо.Как я могу сделать камеру как движение в pygame

Я понимаю, что в pygame нет ничего, что сделало бы движение камеры.

Я думаю, когда игрок достиг точки, где он находится на расстоянии в X пикселей от центра. Остановите движение игрока и перемещайте рельеф в противоположном направлении, чтобы отобразить иллюзию подвижной местности, действуя как движение камеры.

У меня пока нет кода для этого, но я не уверен, как начать приближаться к этому. Просто некоторые идеи о том, как это начать, будут оценены.

+1

Вы хотите сказать, что вы хотите, чтобы камера была центрирована на проигрывателе или, возможно, была сосредоточена на коробке вокруг игрока, которую игрок «толкает», когда он добирается до края? – Darthfett

ответ

0

Очень простой способ получить камеру, сосредоточенную на проигрывателе, будет просто компенсировать все, что вы рисуете, чтобы игрок всегда находился в центре камеры. В моей собственной игре, я использую функцию, чтобы перевести координаты:

def to_pygame_coords(coords): 
    # move the coordinates so that 0, 0 is the player's position 
    # then move the origin to the center of the window 
    return coords - player.position.center + window.position.center 

Чтобы расширить это так, чтобы это не абсолютно позиционирован на игрока, вы можете вместо центра окно на коробке. Затем вы обновляете центр окна таким образом, чтобы, если игрок покидает поле, коробка будет двигаться вместе с ним (таким образом, перемещая камеру).

псевдокод (не тестировался для отрицательных координат):

BOX_WIDTH = 320 
BOX_HEIGHT = 240 
box_origin = player.position.center 
def update_box(player_coords): 
    if player_coords.x - box_origin.x > BOX_WIDTH: 
     box_origin.x = player_coords.x - BOX_WIDTH 
    elif box_origin.x - player_coords.x > BOX_WIDTH: 
     box_origin.x = player_coords.x + BOX_WIDTH 
    if player_coords.y - box_origin.y > BOX_HEIGHT: 
     box_origin.y = player_coords.y - BOX_HEIGHT 
    elif box_origin.y - player_coords.y > BOX_HEIGHT: 
     box_origin.y = player_coords.y + BOX_HEIGHT 

def to_pygame_coords(coords): 
    # move the coordinates so that 0, 0 is the box's position 
    # then move the origin to the center of the window 
    return coords - box_origin + window.position.center 
0

Вы можете просто сделать что-то под названием XSCROLL, который добавляется ко всему, что, как предполагается, для прокрутки по экрану. Затем, когда вы достигаете определенного расстояния от центра, вместо того, чтобы добавлять игроков в движение, он добавляет или вычитает скорость движения из xscroll. Это заставляет все двигаться очень плавно назад с той же скоростью, что и ваш персонаж. Я использую это во всех своих играх, и у меня никогда не было проблем с этим.

0

Визуализация:

параллакс скроллинга: http://blog.shinylittlething.com/wp-content/uploads/2009/08/parallax.png (обычно имеет несколько слоев, которые прокручивают на разных скоростях, чтобы показать расстояние.)

2d tilemap прокрутки: http://mikecann.co.uk/wp-content/uploads/2011/11/tm.png

Drawing координаты на бумаге/эти изображения помогают визуализировать проблему.

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