В прошлом я делал это так: ждал, пока физическое тело остановится, выключал физический движок для крупье, переориентировал крупье, снова включал физический движок.
Напишите себе действие standupAction, которое анимирует переориентацию крупье, может быть, просто вращение или прыжок вверх. Затем сделайте что-то вроде следующего.
Извините, этот Objective-C не Swift, не знаю, быстрый, но его должно быть легко перевести.
if (stickman.physicsBody.resting) {
stickman.physicsBody.dynamic = NO;
[stickman runAction:[SKAction sequence:@[
standupAction,
[SKAction runBlock:^{ stickman.physicsBody.dynamic = YES;}]
]]];
}
Единственным недостатком этого подхода является то, что иногда может пройти целая секунда, пока крупье не остановится. Box2d занимает довольно много времени, чтобы успокоиться. Но выглядит очень реалистично, если подождать.
В качестве альтернативы, вы можете просто проверить ориентацию человечка и, если он потерял равновесие более чем на 45 градусов, переориентировать его с помощью импульсов. Я нахожу импульсы очень трудными, чтобы знать, сколько силы нужно приложить, когда вам нужно точное движение, подобное этому.
person
Patrick Collins
schedule
06.02.2015