2014-08-28 2 views
2

Кажется, что линейное гравитационное поле с векторным методом устарело в Swift. На этом новом языке есть куча нового SKFieldNode, но я не могу найти тот, который похож на линейную гравитацию. Свойство «направление» даже не доступно в Swift. Возможно, это можно сделать с помощью этого универсального метода customFieldWithEvaluationBlock, но я не уверен, как это сделать. Я новичок в SpriteKit.Создание линейного поля тяжести в Swift

Итак, как мы можем сделать тот же физический эффект в Swift?

+0

Не похоже, что это устарело, просто ... отсутствует в Swift SpriteKit API. Вы можете [сообщить об ошибке] (http://bugreport.apple.com) об этом. –

ответ

4

В Swift 2 (часть Xcode 7), SIMD векторы доступны для Swift, поэтому API, который использует их (такие как linearGravityFieldWithVector, новые GameplayKit и Model I/O рамки и т. д.) теперь импортируются в Swift, тоже ... обходных решений больше не требуется.

let field = SKFieldNode.linearGravityFieldWithVector(float3(1,0,0)) 

Ранее ... Метод SKFieldNode класс linearGravityFieldWithVector делает это, но он не доступен в Swift. В векторном параметре ObjC используется тип vector_float3 из библиотеки SIMD, в которой используется специальная маска компилятора C для создания векторов, которые используют аппаратное ускорение SSE (на OS X/x86) или NEON (на iOS/ARM) и прекрасно собираются для отправки на графические процессоры. Такой тип вуду в настоящее время не существует в Swift, поэтому любые API-интерфейсы ObjC, которые полагаются на него, не импортируются в Swift.

Теперь вы можете получить доступ к этим API-интерфейсам из ObjC - в проекте Swift, вы можете сделать себе небольшую функцию обертки ObjC и выставить ее в Swift в своем заголовочном шлейфе.

+0

Итак, у меня неправильное предположение о том, что он устарел. Хороший призыв к использованию объектной c-оболочки, я буду считать это своей работой. Благодаря! – Donn

+0

Он не распознает float3 или linearGravityFieldWithVector. И я не понимаю, как это сделать. Объективная c-оболочка? –

+0

Возможно, вы не используете Xcode 7. – rickster

0

Если вы хотите применить линейную гравитацию ко всем узлам вы можете попробовать установить physicsWorld.gravity, это CGVector

+0

Не все узлы. Я хочу, чтобы гравитация применима только к конкретному региону. – Donn

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