Подтвердить что ты не робот

2d Физика платформы

Это был долгий праздничный уик-энд, поэтому я снова получил ошибку кодирования и начал играть вокруг:

Марио http://gfilter.net/junk/tileengine.jpg

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

Для любых других авторов хобби для игры, можете ли вы указать мне на некоторые пошаговые инструкции по наилучшему способу приблизиться к этому?

Update:

Я думал, что поделился бы успехом:

http://www.youtube.com/watch?v=-RKNQ2UiiLY < - Игра в действии

Он по-прежнему на самом деле глючит, но обнаружение конфликтов в основном работает, я начал работать над некоторыми другими функциями (например, набросать блоки (заметить ошибку) и взаимодействовать с врагами).

Марио все еще ходит так, как будто он на Луне, я использую эти константы, любые советы по настройке их для большего реализма?

    const float AirDrag = 1.00f;
    const float GroundFriction = .97f;
    const float Gravity = 0.8f;
4b9b3361

Ответ 1

Загрузите движок FarseerPhysics, посмотрите, как он работает http://www.codeplex.com/FarseerPhysics Я думаю, что это лучшая вещь, доступная для XNA/Silverlight!

Ответ 2

Тяжесть легко:

const gravity = ... ; // pixels per timestep (eg. video frame) squared
// while in freefall, each timestep:
y_velocity += gravity;
y_pos += y_velocity;

Помните, что большинство игр платформы 2d, на которых я играл, не имеют, имеют реалистичную гравитацию. Просто делайте то, что делает игру забавой!

Ответ 3

jnrdev может оказать некоторую помощь. Он охватывает столкновение/реакцию плитки и склоны. Это не лучший код, который я когда-либо видел, но он выполняет свою работу.

Ответ 4

В разделе http://www.metanetsoftware.com/technique/tutorialA.html и http://www.metanetsoftware.com/technique/tutorialB.html. Я думаю, что на них ссылались другие в других местах. Они охватывают обнаружение столкновений и реакцию, raycasting, различные методы оптимизации и т.д. И имеют хорошее объяснение теории, лежащей в основе всего этого для тех (как я), которые менее математически склонны. Это не так много, как динамика твердого тела, но я не думаю, что вам понадобится это для типа игры, которую вы пишете (хотя, конечно, было бы здорово, если бы вы добавили этот материал..)

Ответ 5

Это может быть обход, но попробуйте стартерный комплект Platformer от XNA 3.0, который содержит такие вещи, как физика и базовое обнаружение столкновений. Вам нужно будет изменить материал, чтобы заставить его работать вне XNA, но это не ракетостроение.

Загрузка XNAGS 3.0

Ответ 6

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

Подводя итог, OP для вопроса хотел ускорить объект от отдыха до максимальной скорости. Я провел несколько выводов для моделирования скорости в зависимости от времени для двух разных типов сопротивления. Ваша ситуация может быть несколько иной, поэтому используемые интегралы могут иметь разные формы или должны быть решены с разными начальными условиями, но, надеюсь, мой ответ укажет вам на некоторые информационные направления.

Ответ 7

Ваша ошибка при столкновении нескольких блоков, вы можете исправить это, только набросив блок, который наиболее выровнен с помощью playerprite, или имеет наименьшее смещение. Не ограничивайте его только одним направлением. Блоки действительно могут быть удалены из любого направления в Марио. (Выше, сделав фунт в одних и тех же играх или упражнение для сверления) (Стороны с помощью оболочки)

Ответ 8

    UIGraphicsBeginImageContext(images.size);
    CGContextRef context = UIGraphicsGetCurrentContext();
    UIColor *color = [UIColor whiteColor];
    [color setFill];

    CGContextTranslateCTM(context, 1, images.size.height);
    CGContextScaleCTM(context, 1.0, -1.0);
    CGContextSetBlendMode(context, kCGBlendModeDestinationOver);
    CGRect rect = CGRectMake(0.0, 0.0, images.size.width, images.size.height);
    CGContextDrawImage(context, rect, images.CGImage);
    CGContextClipToMask(context, rect, images.CGImage);
    CGContextAddRect(context, rect);
    CGContextDrawPath(context, kCGPathFill);
    images = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

Ответ 9

Когда-либо слышал о GameMaker?