Алгоритм прыгающей карты - PullRequest
0 голосов
/ 31 декабря 2008

Какой хороший алгоритм для "прыгающих карт", как те, которые вы видите в пасьянсах?

Какая самая крутая карточная анимация, которую вы видели?

Редактировать - Есть ли что-нибудь кроме игры для Windows?

Ответы [ 3 ]

5 голосов
/ 31 декабря 2008

Скорость оси х постоянна. Скорость y увеличивается на некоторое значение в каждом кадре. В каждом кадре текущие положения x и y увеличиваются на соответствующие скорости. Если карта окажется под окном, у-скорость умножается на что-то вроде -0,9. (отрицательное число> -1) Создает серию нисходящих отскоков.

2 голосов
/ 31 декабря 2008

Две части:

  1. движение в вертикальном направлении регулируется уравнением второго порядка, как d = 1 / 2at & sup2; . Для Земли, из Конечно, а = 32 фут / сек & sup2; но вам придется вертеть константы.
  2. Когда карта достигает края, как «рекурсивный» говорит, скорость вектор умножается в -1 раз компонент, нормальный к поверхности. Если Вы хотите, чтобы это хорошо отскочил к остановись, сделай -1 немного меньшее значение, например -0,9.

Анимируйте его, обновляя и перерисовывая карту несколько раз в секунду, каждый раз меняя положение карты. Самый простой способ - это вычислить что-то вроде (псевдо-Python):

vel_x = # some value, units/sec
vel_y = # some value, units/sec
acc_x = # some value in units/sec^2
acc_y = # some value in units/sec^2

while not_stopped():
    x = x+vel_x
    y = y+vel_y
    # redraw the card here at new position
    if card_collided():
       # do the bounce calculation

    vel_x = x + (0.5 * acc_x)    # 1st derivative, gives units/sec
    vel_y = y + (0.5 * acc_y)

Пока карточки остаются четырехугольными со сторонами, вы сталкиваетесь со сторонами, когда расстояние между центром карточки и стеной составляет 1/2 ширины или высоты, в зависимости от ситуации.

1 голос
/ 23 ноября 2013

После борьбы с кодом, предоставленным Чарли в течение часа или около того, я придумал правильный алгоритм (после прочтения ответа рекурсива). В реальном Python:

def bouncing_cards():
    x = 0.0
    y = 0.0
    vel_x = 3.0
    vel_y = 4.0

    while x < windowWidth:
        drawImage(img, x, y)
        x += vel_x
        y += vel_y
        vel_y += 1.0
        if y + cardHeight >= windowHeight:
            y = windowHeight - cardHeight
            vel_y *= -0.9

Дает следующее использование wxPython: http://i.imgur.com/t51SXVC.png:)

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