Aseprite简介

aseprite是当前最为流行的像素艺术创作工具之一。aseprite有一套完整的像素制作流程,包括图层/帧/动画等特性,可为像素游戏创建2D动画,精灵和任何类型的图形。

https://www.aseprite.org/

不过,aseprite的价格还是有点小贵的。

  1. 官网:19.99$,试用版免费,但无法保存文件。
  2. Steam:国区70¥,有能力的情况下推荐购买Steam版。

由于aseprite是一个开源项目,我们可以手动拉取源码进行编译,目前网上也有一些教程。

大部分现有教程都专注于如何用自己的电脑进行本地编译。使用者需要下载Visual Studio以及C++编译器,配置CMake以及各种SDK才能完成,对于不了解这些技术的小白来说,没有七八个小时是很难搞定的。

这里我分享一个利用官方仓库自带的Github Actions进行构建的方法。这种方法无需配置任何本地环境,只需要一个Github账号,半小时即可得到一个可运行版本

原理介绍

像aseprite这样的大型工程一般会有持续集成的配置。所谓持续集成,是指每天或每次提交代码时,会有一个系统自动构建源码和运行测试等。持续集成可以节省开发人员不少的精力。

aseprite的开发者们也不例外,打开aseprite的Github仓库,点击Github Actions,可以看到这个仓库配有许多自动化的工作流,这些就是用于持续集成的工作流配置。

添加图片注释,不超过 140 字(可选)

这些工作流的作用,是方便aseprite的开发者在提交代码时,自动运行一些日常的测试工作。

通过阅读、分析这些工作流,我们可以知道如何从源码去构建一个可执行的aseprite程序。

我们点进build查看一个工作流的详情。

添加图片注释,不超过 140 字(可选)

可以看到,在左边有一些build开头的条目,后面括号里是各种操作系统的名字,有的是debug(调试)有的是Rel(发布)版本。

于是,我们基本可以确定,这些工作流实际是在为各种不同的操作系统执行构建。

本文介绍一个利用这一原理来快速构建aseprite的方法。

第一步:Fork仓库以进行编辑

首先,你需要有一个Github账户,打开aseprite的仓库页面,然后Fork!

添加图片注释,不超过 140 字(可选)

Fork会把官方的仓库完整地拷贝一份,变成你自己的,这样你才可以编辑它。

第二步:启用Github Actions

添加图片注释,不超过 140 字(可选)

默认情况下,Fork来的仓库其中的Github Actions是关闭的,点击Actions标签,启用仓库的Github Actions。

接着,我们就要魔改官方的工作流,让它在构建aseprite后进行打包,并供我们下载。

熟悉Github Actions的同学会知道,工作流的定义文件位于仓库目录下的.github/workflows ,我们在文件列表找到这个目录,里面有一个build.yml。接下来我们就要魔改它!

定义工作流的YAML文件

第三步:魔改build.yml文件

点击右上角的小铅笔图标,进入编辑模式。

由于我的操作系统是Windows,下面我将修改这个文件,让它构建Windows版本的aseprite。

首先我在matrix里面删掉其他操作系统,只保留Windows(你可以根据自己的系统来)

同时,build_type这一项我改成了Release, 因为我不需要构建调试版本,enable_ui改成on。

改完这一段大概是这样的。

配置Windows构建

接着,我要删除Running C++ Tests和Running CLI Tests两个脚本块,因为不需要执行测试。不过,你也可以不删,只是会浪费点时间。

删除不需要的测试流程

经过这番操作,这个build.yml现在能构建一份Windows版本的aseprite了。但是怎么让我们可以进行下载呢,我们需要用到Github Actions的【打包制品】功能。在build.yml的最后加上下面的代码(注意缩进对齐):

1
2
3
4
5
6
- uses: actions/upload-artifact@v3
with:
name: aseprite
path: |
D:/a/aseprite/aseprite/build/bin/data
D:/a/aseprite/aseprite/build/bin/aseprite.exe

这几行代码所做的事情,是在工作流结束之后,把构建出来的aseprite打包,之后我们便可以在Github页面上下载。

第四步:配置skia引擎

如果仅完成上面的修改,那么你得到的是一个命令行版本的aseprite。

要构建具有图形界面的aseprite,我们需要把skia加入仓库中。skia是一个图形引擎,aseprite要基于它来绘制图形界面。

为了防止你找不到skia,我把skia的依赖也放到Github Release上了。

下面两行代码用于下载我打包好的skia以及解压到当前目录。

1
2
curl -L https://github.com/blueloveTH/aseprite/releases/download/v0.01/skia.zip --output skia.zip
7z x skia.zip

同时,修改cmake部分,配置skia路径:

1
2
3
4
5
6
7
8
cmake -S . -B build -G Ninja \
-DCMAKE_BUILD_TYPE=${{ matrix.build_type }} \
-DENABLE_UI=${{ matrix.enable_ui }} \
-DENABLE_CCACHE=$enable_ccache \
-DLAF_BACKEND=skia \
-DSKIA_DIR=./skia \
-DSKIA_LIBRARY_DIR=./skia/out/Release-x64 \
-DSKIA_LIBRARY=./skia/out/Release-x64/skia.lib

skia部分的修改

最后一步:提交commit

点击右上角的绿色按钮,保存修改的build.yml文件,提交commit。

添加图片注释,不超过 140 字(可选)

接着,回到Actions标签,你会发现你刚刚提交的commit触发了工作流。

提交commit触发了工作流

等待工作流完成(大约需要15分钟),出现下图这样就算完成了。

工作流执行成功

点Summary,在最下面找到Artifacts。然后就可以下载aseprite了。

制品成功生成

解压aseprite.zip,点击.exe文件,成功打开!

Yeah!!

完整的build.yml(更新于2023-11-26)

划重点:你直接把这个文件覆盖掉默认的build.yml,点提交就可以了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
name: build
on: [push, pull_request]
jobs:
build:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [windows-latest]
build_type: [Release]
enable_ui: [on]
include:
- os: windows-latest
build_type: Release
enable_ui: on
steps:
- uses: actions/checkout@v3
with:
submodules: 'recursive'
- name: ccache
uses: hendrikmuhs/ccache-action@v1
if: runner.os == 'Linux'
with:
key: ${{ matrix.os }}-${{ matrix.enable_ui }}
- uses: seanmiddleditch/gha-setup-ninja@master
- uses: ilammy/msvc-dev-cmd@v1
if: runner.os == 'Windows'
- name: Generating Makefiles
shell: bash
run: |
export enable_ccache=off
curl -L https://github.com/blueloveTH/aseprite/releases/download/v0.01/skia.zip --output skia.zip
curl -L https://github.com/blueloveTH/aseprite/releases/download/v0.01/libcrypto-1_1-x64.dll --output libcrypto-1_1-x64.dll
7z x skia.zip
cmake -S . -B build -G Ninja \
-DCMAKE_BUILD_TYPE=${{ matrix.build_type }} \
-DENABLE_UI=${{ matrix.enable_ui }} \
-DENABLE_CCACHE=$enable_ccache \
-DLAF_BACKEND=skia \
-DSKIA_DIR=./skia \
-DSKIA_LIBRARY_DIR=./skia/out/Release-x64 \
-DSKIA_LIBRARY=./skia/out/Release-x64/skia.lib
- name: Compiling
shell: bash
run: |
cd build && ninja
- uses: actions/upload-artifact@v3
with:
name: aseprite
path: |
libcrypto-1_1-x64.dll
D:/a/aseprite/aseprite/build/bin/data
D:/a/aseprite/aseprite/build/bin/aseprite.exe