前言
Processing 开始使用的是 Java 语言,由于 Java 语言的跨平台,我们可以在 Windows、Mac、Linux 系统上安装 Processing 软件来进行创作。
Processing 是开源的,后面根据不同场景的需要,也诞生了其他语言的版本,比如用于浏览器端的 p5js,用于 Android 系统的 Processing Android,以及 python 语言版本的 Processing Python。
如果我想把 Processing 运行在 iOS 系统中,比如 iPhone、iPad、iMac、Apple TV 上,有啥办法么?
有其他路子吗
iOS 平台没办法运行 Java 虚拟机,Processing Java 以及 Android 版本显然不符合要求,而 Python 版还有点希望。因为 iOS 开发一个 App 应用是可以内置 python 解释器的,但是很麻烦,因为如果想完美和 iOS 系统的特性如陀螺仪、摄像头、视频等结合起来,还是会异常繁琐。
p5js 呢?
小菜之前写过一个玩具,开发了一个 demo app,使用系统的浏览器,结合 p5js,将 processing 画布内容运行在了手机 app 中。
使用 p5js 在 iOS 系统上玩转 Processing,不得不面临着一些问题:
1、p5js 需要运行在浏览器上,效率堪忧
2、p5js 如果利用 iOS 的系统特性,如重力加速计、摄像头、AR等等,需要和原生开发语言如 Objective-C 或者 Swift 进行桥接通信,成本有些大
3、p5js 的一些特性仅适用于桌面浏览器,并不适用于移动端 iOS 上的浏览器。
无解了吗?
我就想让 Processing 完美跑在 iPhone、iPad 上就没有其他好办法了么?
有。
SwiftProcessing!
Processing 的发展,开源是重要的推力,开源是科技进步的阶梯。如果 Processing 不开源,不会走到今天。也正是开源,github 社区有大牛已经开始实现 Processing 在 iOS 系统上的移植操作。
所谓移植,就是将 Processing 的全部或者关键部分用 iOS 开发的语言重新实现一遍。目前主流的是 Swift 语言。这里简单谈下 Swift 语言。Swift 是苹果开源的语言,这门语言由 LLVM 编译器作者亲自操刀并且之后开源,现在已然成为了 iOS 开发的主流语言,而之前的 Objective-C 这门语言会逐步走下历史的舞台。
开源社区的 Processing 版本,有若干个版本,如
1)https://github.com/alladinian/SwiftProcessing
2)https://github.com/jjkaufman/SwiftProcessing
3)https://github.com/Processing-iOS/Processing-Swift
小菜经过对比,从开源的活跃程度、功能移植程度、代码质量多方面来讲,jjkaufman/SwiftProcessing 胜出。
小菜斗胆预测,这个项目如果坚持下去,不烂尾,可能未来会出现在 Processing 的官网上。可能的话,小菜后续也会往这个项目中添砖加瓦,为开源出一份力。毕竟热爱。
初探SwiftProcessing
移植最重要的是使用新的语言尽可能的贴近 Processing 原本的 api,函数、变量名要能保持一致就保持一致,这对于社区来讲是非常重要的一件事,对于使用者而言,如果熟悉了其他语言如java、js、python,那么因为 api 的一致性,是非常容易上手其他平台的开发的。
SwiftProcessing 也不例外,这正是该开源项目的一大特色。下面是官方 README 中的一个例子,是不是 api 和 Processing 是一致的?
SwiftProcessing 的官网:https://swiftprocessing.org/,大家凑合着看,目前丑到爆。但这个并不能盖住项目的光芒。
需要注意的是,每一种移植的版本,如 p5js、Processing Android、Processing Python 或多或少在处理比如文件、视频、音频等都有一些不同。SwiftProcessing 也不例外。这里我们聚焦的是绘制部分。
另一个重磅功能
Swift 语言可以在开发软件 Xcode 中运行 Playground 模式,而 SwiftProcessing 恰好支持 Playground。在 Playground 中可以使用 Live View 快速测试自己想要做的动画或特效。这种形式非常适合创意图形,或者制作教程。
下面是小菜运行的官方源代码中 Playground 的一个例子。
更多的例子
上面3个图是作者使用 SwiftProcessing 联合 iOS 系统 ARKit 的 Face Tracking 特性,做出的有趣的效果。
试想一下,如果将 Processing 和 iOS 设备的线性马达、运动传感器/加速计/陀螺仪,环境光感处理器、距离传感器、磁力计、原深感摄像头、地理位置等等结合起来,能做出多少非常有趣的创意。
是不是有些摩拳擦掌了呢?
Youtube SwiftProcessing
- https://www.youtube.com/watch?v=7eVF97XwXAU&ab_channel=JonathanKaufman
- https://www.youtube.com/watch?v=JKkE8MLTOO4&ab_channel=JonathanKaufman