SDL2 Swift SDL2

license Linux macOS Windows

这是一个对流行且优秀的 Simple DirectMedia Layer (简易直控媒体层) 库的轻量级 Swift 封装。
它提供了一个 Swift 风格类型安全 的 API。

Simple DirectMedia Layer 是一个跨平台开发库,旨在提供对音频、键盘、鼠标、操纵杆以及通过 OpenGL 和 Direct3D 访问图形硬件的底层访问。它被视频播放软件、模拟器和流行的游戏所使用,包括 Valve 的获奖作品和许多 Humble Bundle 游戏。 SDL 官方支持 Windows、Mac OS X、Linux、iOS 和 Android。 对其他平台的支持可以在源代码中找到。 SDL 用 C 语言编写,可以与 C++ 本机配合使用,并且有几种其他语言的绑定可用,包括 C# 和 Python。
~ www.libsdl.org

🚀 开始使用

以下说明将使您的项目副本在本地计算机上启动并运行,并提供代码示例。

📋 前提条件

💻 安装

Swift SDL2 适用于所有支持 Swift 5.6 及更高版本以及 Swift Package Manager (SPM) 的平台。

在您的 Package.swift 文件中扩展以下几行,或者使用它来创建一个新项目。

// swift-tools-version:5.6

import PackageDescription

let package = Package(
    name: "YourPackageName",
    dependencies: [
        .package(url: "https://github.com/ctreffs/SwiftSDL2.git", from: "1.4.0")
    ],
    targets: [
        .target(
            name: "YourTargetName",
            dependencies: [
                .product(name: "SDL", package: "SwiftSDL2")
            ])
    ]
)

根据您的平台,需要采取几个额外的步骤才能编译 SDL2。

Apple

对于 Apple 平台(macOS、iOS、tvOS),SDL2 使用 XCFramework 提供,因此无需额外步骤。

Linux

在 Linux 平台上,您需要使用以下命令将 SDL2 作为系统包安装

apt-get install libsdl2-dev

Windows

由于 Windows 是 Swift 开发的一个相当新的平台,因此在使用该软件包之前需要执行一些手动步骤。以下所有步骤都假定您在 Windows 机器上有一个可用的 swift 环境。如果不是,请按照 有关如何在 Windows 上安装 Swift 的说明

您可以通过运行 ./buildPackageWin.ps1 powershell 脚本来快速测试此软件包是否正常工作。

📝 代码示例

最小化

一个最小的例子位于 Sources/Demos/Minimal

import SDL

// Initialize SDL video systems
guard SDL_Init(SDL_INIT_VIDEO) == 0 else {
    fatalError("SDL could not initialize! SDL_Error: \(String(cString: SDL_GetError()))")
}

// Create a window at the center of the screen with 800x600 pixel resolution
let window = SDL_CreateWindow(
    "SDL2 Minimal Demo",
    Int32(SDL_WINDOWPOS_CENTERED_MASK), Int32(SDL_WINDOWPOS_CENTERED_MASK),
    800, 600,
    SDL_WINDOW_SHOWN.rawValue)

var quit = false
var event = SDL_Event()

// Run until app is quit
while !quit {
    // Poll for (input) events
    while SDL_PollEvent(&event) > 0 {
        // if the quit event is triggered ...
        if event.type == SDL_QUIT.rawValue {
            // ... quit the run loop
            quit = true
        }
    }

    // wait 100 ms
    SDL_Delay(100)
}

// Destroy the window
SDL_DestroyWindow(window)

// Quit all SDL systems
SDL_Quit()

Metal + macOS

Sources/Demos/MetalApp 上还有另一个显示 SDL2 演示窗口的演示。

💁 需要帮助

这个项目还处于早期阶段,需要大量的维护。如果您有兴趣做出贡献,请随时这样做!

需要完成的事情包括:

🏷️ 版本控制

我们使用 SemVer 进行版本控制。有关可用版本,请参阅 此存储库上的标签

✍️ 作者

另请参阅参与此项目的 贡献者 列表。

🔏 许可证

本项目根据 zlib 许可证获得许可 - 有关详细信息,请参阅 LICENSE 文件。

🙏 原始代码

由于 Swift SDL2 仅仅是 SDL2 的一个封装器,因此它显然依赖于它。
如果可以,请支持他们!
参见 https://www.libsdl.org/credits.php

☮️ 替代方案