ImagineEngine 0.10.0

ImagineEngine 0.10.0

测试已测试
语言语言 SwiftSwift
许可证 未知
发布上次发布2018年4月
SPM支持 SPM

John Sundell 维护。



Imagine Engine

CocoaPods Carthage Twitter: @johnsundell

欢迎来到 Imagine Engine,这是一个旨在为 Apple 平台创建一个快速、高性能的 Swift 2D 游戏引擎的持续项目,同时也是一种令人愉快的使用体验。您现在被邀请加入这个新社区,共同打造一个具有宏伟但明确目标(使您能够轻松构建您能想象到的任何游戏)的工具。

基于快速核心动画的渲染

Imagine Engine 使用 Core Animation 作为其渲染后端 - 就像 Apple 的 UI 框架(如 UIKit 和 AppKit)一样。通过利用 Core Animation 的硬件加速 2D 渲染能力,Imagine Engine 能够同时将大量像素推送到屏幕上。这意味着在您的游戏中可以包含更多对象、更多效果,并减少设计时的限制。

易于使用的 API

除了其快速渲染和更新游戏的宗旨外,Imagine Engine 还旨在提供一个易于使用的 API,任何人都可以学习 - 不论其游戏开发经验如何。

从仅几行代码开始...

let scene = Scene(size: UIScreen.main.bounds.size)

let label = Label(text: "Hello world")
label.position = scene.center
scene.add(label)

let window = GameWindow(scene: scene)
window.makeKeyAndVisible()

...随着您的游戏在 iOS、macOS 或 tvOS 上的复杂性逐渐增加,可以平滑地扩展。

🌃 场景展示您的游戏内容

场景可以是关卡、菜单或“游戏结束”屏幕。您可以轻松切换游戏的当前场景。以下是如何创建具有蓝色背景颜色的场景的示例:

let scene = Scene(size: Size(width: 500, height: 300))
scene.backgroundColor = .blue
game.scene = scene

🎭 演员使您的游戏栩栩如生

演员将在任何游戏中占据大多数活动对象的主要部分。它们是可移动的、可动画的、可以处理碰撞等等。这里有一个创建一个渲染"跑步"动画并始终向右移动的玩家的示例

let player = Actor()
player.animation = Animation(name: "Running", frameCount: 5, frameDuration: 0.15)
player.velocity.dx = 50
scene.add(player)

📦 使用方块轻松创建平台和瓦片纹理

使用方块,您可以轻松地将纹理拼接到一起以形成可很好地扩展到任何大小的对象,而无需扩展任何纹理。这是通过将多达9种不同的纹理拼接在一起来形成一个侧边渲染的纹理块来完成的。以下是您如何从名为"Platform"的目录中创建块的示例,这个目录包含应拼接的纹理

let block = Block(size: Size(width: 300, height: 300), textureCollectionName: "Platform")
scene.add(block)

🅰️ 使用标签渲染文本

标签允许您向游戏中添加文本内容。它们会自动调整大小以适应您的文本内容(除非您不想这样做),并且可用于实现UI、得分计数器等。以下是向场景添加标签的示例

let label = Label(text: "Welcome to my game!")
label.position = scene.center
scene.add(label)

⚡️ 使用事件来驱动您的游戏逻辑

事件使您能够快速编写脚本以驱动自己的逻辑。Imagine Engine的各种对象包含内置的事件,可用于观察对象何时被移动、与某物发生碰撞等。您还可以定义自己的事件,这些事件可用于在代码的各个部分之间进行通信。以下是您如何观察两个演员何时相互碰撞的示例

let player = Actor()
let enemy = Actor()

player.events.collided(with: enemy).observe {
    // Game over
}

🏃 使用行为创建动画和效果

行为允许您使对象在一段时间内执行某些操作,例如移动、调整大小、淡入淡出等。Imagine Engine包含一系列内置的行为,同时也使您轻松定义自己的。以下是如何在3秒内移动演员的示例

let actor = Actor()
scene.add(actor)
actor.move(byX: 200, y: 100, duration: 3)

🔌 使用插件轻松扩展Imagine Engine

Imagine Engine被设计为通过插件轻松扩展,而不是依赖于子类化和覆盖方法。这使您能够在不同游戏中共享代码,并创建添加新功能到引擎的新开源项目。您可以将插件附加到Imagine Engine的大多数对象上,以下是一个每当场景被点击或轻触时创建新演员的插件的示例

class MyPlugin: Plugin {
    func activate(for scene: Scene, in game: Game) {
        scene.events.clicked.observe { scene in
            let actor = Actor()
            actor.position = scene.center
            scene.add(actor)
        }
    }
}

🕐 使用时间轴进行精确计时

在游戏开发中,管理时间和延迟事件有时可能很棘手。Imagine Engine通过其时间轴API旨在使这一点更容易,该API允许您在将来安排单个或重复的事件,而无需担心屏幕更新或游戏是否处于暂停状态。以下是您如何添加一个每5秒生成一个新敌人的事件的示例

scene.timeline.repeat(withInterval: 5) {
    let enemy = Actor()
    enemy.animation = Animation(name: "Enemy", frameCount: 5, frameDuration: 0.15)
    scene.add(enemy)
}

平台支持

  • 📱iOS 9或更高版本
  • 🖥macOS 10.12或更高版本
  • 📺tvOS 10或更高版本

Imagine Engine支持所有Apple平台,除了watchOS。API也是完全跨平台的,所以您不需要在游戏代码中到处散布#if

Xcode模板

Imagine Engine 配套了 Xcode 项目模板,使得开始一个新的项目变得超级简单。您可以在这里找到更多信息和安装说明(XcodeTemplates)

让我们开始吧!

要开始,请查看教程部分,其中包含教程,将引导您使用几行代码构建第一个Imagine Engine驱动的游戏。无需之前的游戏开发经验!

如果您需要开始的帮助或有关于Imagine Engine的问题,请随意提交一个问题!我们是一个友好的社区,希望让更多人参与进来。

Imagine Engine正处于积极开发中,新功能不断添加。需要新功能或想要帮助使引擎更加强大?请浏览和创建新问题,或提交一个Pull Request

让我们一起打造一些伟大的游戏吧!🚀