Flutter 启动图(Splash Screen)完整指南Android

从 dp / px 原理到 1024px 导出,一篇讲清楚

在 Flutter 项目中配置启动图(Splash Screen),是很多新手甚至老手都会踩坑的地方:

  • dp 和 px 到底有什么区别?
  • 为什么说 Logo 要放在 160dp 的安全区?
  • Figma 里我到底该画多大?
  • 为什么教程又说要导出 1024px?
  • flutter_native_splash 能不能用 SVG?

这篇文章我会 从原理讲到实操,一步步带你把 Flutter 启动图这件事彻底搞清楚。

省流版:

  • 品牌图片:尺寸必须为 200×80 dp。
  • 带有图标背景的应用图标:尺寸必须为 240×240 dp,并且位于直径 160 dp 的圆圈内。
  • 无图标背景的应用图标:尺寸必须为 288×288 dp,并且位于直径 192 dp 的圆圈内。

一、Flutter / Android 启动图的核心思想

先说一个最重要的结论

启动图不是“全屏海报”,而是“居中的 Logo + 背景色”

Android(以及 Flutter 使用的 Android SplashScreen API)在不同设备上,会对启动图进行 裁剪和缩放,真正安全可见的区域,是一个 圆形安全区。(这个应该是基于Android12之后的。Android 11 及以下 是直接放一张满屏的启动图。)


二、dp 和 px 的区别(人话版)

1️⃣ px 是什么?

  • px = 像素
  • 是屏幕上最小的物理点

问题是:

不同手机,像素密度完全不同
同样 160px,在不同手机上看起来大小不一样


2️⃣ dp 是什么?

  • dp = density-independent pixel(与密度无关的像素)
  • 是 Android / Flutter 用来保证 “看起来一样大” 的单位

简单理解:

dp 决定“看起来多大”,px 决定“清不清楚”


3️⃣ 关键结论(一定要记住)

在 Figma 里:1px ≈ 1dp(逻辑等价)

也就是说:

  • 你在 Figma 里画 160px
  • 在 Flutter / Android 里就是 160dp 的视觉尺寸

三、为什么是 160dp?启动图安全区解释

Android 官方对启动图图标有明确规则:

  • 启动图会被放进一个 圆形 Mask
  • 只有圆内的内容是 100% 安全的
  • 圆外内容在某些设备上一定会被裁掉

推荐安全区

  • 安全圆直径:160dp
  • 超出这个范围:有被裁风险

四、Figma 中正确的启动图画法

Step 1:创建画布

  • 新建 Frame
  • 尺寸:288 × 288
  • 单位:px(默认即可)

288dp 是 Android 启动图推荐的最大逻辑画布


Step 2:画安全圆

  • 在画布中画一个 160 × 160 的圆
  • 水平 + 垂直居中
  • 作为辅助参考(可以加描边)

所有 Logo 内容 必须完全放在圆内


Step 3:设计 Logo

  • Logo、文字、图形全部放在安全圆内
  • 圆外只作为留白或背景

五、那为什么又要“导出 1024px”?(重点)

这里是最多人迷糊的地方

1️⃣ 160dp 是什么?

  • 设计规则
  • 决定 Logo 看起来多大
  • 决定会不会被裁

2️⃣ 1024px 是什么?

  • 导出清晰度
  • 决定图片在高分屏上会不会糊

3️⃣ 二者不冲突

可以这样理解:

我按 160dp 的规则来画 再用 1024px 的分辨率来导出

就像:

  • 同一张证件照
  • 用 500 万像素拍 or 5000 万像素拍
  • 脸的比例一样,只是清晰度不同

六、Figma 导出 1024px PNG 的正确方式

⚠️ 不需要重新画 1024 的画布

正确步骤:

  1. 选中 288 × 288 的最外层 Frame
  2. 右侧找到 Export
  3. 格式选择:PNG
  4. 1x 改成:1024 ÷ 288 ≈ 3.56x (不正规)

导出后就是:

1024 × 1024 px 的启动图 PNG


推荐的省心方案(更简单)

直接用:

  • 4x
  • 导出尺寸:1152 × 1152 px

这个尺寸:

  • 更清晰
  • 无副作用
  • flutter_native_splash 完全支持

七、为什么 flutter_native_splash 不能用 SVG?

因为不支持,我导入之后 flutter pub run flutter_native_splash:create 后直接报 Your image must be in one of the following formats: [png, apng, jpg, jpeg, jpe, jfif, tga, tpic, gif, ico, bmp, dib]

最后建议大家看官方文档https://developer.android.com/develop/ui/views/launch/splash-screen?hl=zh-cn

🎨 Aseprite for Mac 快捷键使用指南|像素绘图效率秘籍

Aseprite 是一款专为像素艺术设计的专业软件,支持帧动画、图层操作、调色板等多种功能。而在 macOS 上,掌握快捷键能够极大提升你的绘图效率!

本篇文章将整理 Aseprite 在 Mac 系统下最常用的快捷键,帮助你从新手快速进阶高效创作者。

✏️ 基础绘图工具快捷键(macOS)

快捷键功能说明图标/备注
B画笔工具(Brush)🖌️ 最常用绘图工具
E橡皮擦工具(Eraser)🧽
G填充工具(Fill)🪣 一键填色
I吸管工具(Eyedropper)🎯 取色
L直线工具(Line)📏
U图形工具(矩形/椭圆)◼️ ⚪
Shift + B铅笔工具(Pencil)✏️ 像素级绘制
H拖动画布(Hand)✋ 拖动查看画布
Z缩放工具(Zoom)🔍 双击恢复100%缩放

🎞️ 动画帧操作快捷键

快捷键功能图标/说明
Return(回车)播放/暂停动画▶️ 动画预览
⌥ + N下一帧
⌥ + B上一帧
⌘ + N新建帧➕ 添加关键帧
⌘ + ⇧ + N新建图层📑
⌘ + ⇧ + D复制当前帧📄
F2重命名图层或帧✏️

⌨️ 选择、移动与编辑

快捷键功能说明图标/备注
M矩形选区工具(Marquee)
⌘ + D取消选择
⌘ + T移动选区↔️
V移动图层工具🧱 移动画布中的对象

🎨 色彩与画笔控制

快捷键功能说明图标/备注
X交换前景/背景色🔄
D重置为默认黑白色⚫⚪
[ / ]调整画笔大小🔍
⌘ + E合并图层(Merge Layer Down)🧷
数字键 1-9设置图层不透明度(10%-90%)💡 快速透明控制

🖼️ 文件与画布快捷键(macOS)

快捷键功能说明图标/备注
⌘ + N新建文件📄
⌘ + S保存文件💾
⌘ + ⇧ + S另存为📁
⌘ + Z撤销↩️
⌘ + ⇧ + Z重做↪️
⌘ + C / ⌘ + V复制 / 粘贴📋
⌘ + ⌥ + C修改画布大小(Canvas Size)🖼️
Tab隐藏/显示面板界面👀 获得纯净绘图空间

🧅 Onion Skin 快捷键

快捷键功能说明图标/备注
⌥ + O开启/关闭 Onion Skin(洋葱皮)🧅 参考前后帧内容
⌥ + 1/2/3设置 Onion Skin 显示前几帧/后几帧🔍 控制范围

📌 提高效率的小建议

  • 推荐新手设置常用快捷键为左手覆盖区域(如 B/E/G/X/⌘Z 等),操作更顺手。
  • 使用 Onion Skin 查看动画流畅性,按 Alt + O 开关即可。
  • 多用图层和帧组织动画结构,再配合 ⌘ + ⇧ + D 快速复制帧。

📎 附加资源


💬 结语

使用 Mac 版 Aseprite 时,合理利用快捷键将极大提高创作效率,让你的像素画更加流畅、直观、有节奏感。希望这份指南对你有帮助!

🔖 如果你喜欢这篇文章,欢迎收藏、点赞或分享给其他像素爱好者!
📮 更多 Aseprite 教程与开发分享,欢迎访问我的博客:www.ilovedsy.com

OnDrawGizmos()、OnDrawGizmosSelected()不调用、不执行方法

这个是真的坑,搜了半天,还看了官方技术文档,我还天真的想是不是方法被弃用了,原来是这个SceneView 关闭了Gizmos。再点击一下这个图标即可。如下图。

You can see at code lines 81,I have worte the Debug.Log,but when I use the

Unity ,the Console hasn’t print anything.

code

So, actually you must to click this button.

unity_scene

When I clicked this button ,look, It’s work.And you can see the red line and Debug.log print the string.

unity_sceneClicked
happy

游戏开发入门之像素画&Pixel Art

Pixel art is a form of digital art drawn with graphical software where images are built using pixels as the only building block.[2] It is widely associated with the low-resolution graphics from 8-bit and 16-bit era computers, arcade machines and video game consoles, in addition to other limited systems such as LED displays and graphing calculators, which have a limited number of pixels and colors available.[3] The art form is still employed to this day by pixel artists and game studios, even though the technological limitations have since been surpassed.

像素画是一种以“像素”(Pixel)为基本单位来制作的电脑绘图表现形式[1]

在电脑绘图的两大类别——位图向量图——当中,像素画以位图(bitmap)的形式,从电脑最原始的图像表现方法,演变成了一种独立的数字艺术创作风格。此风格通常被人称为“像素艺术”(pixel art),有时也被称为“点绘”(dot art)、“点图”、“点画”、“像素图”、“dot绘”等。

8Bit , 16Bit

Vg consoles 视频游戏系统

computers 计算机

什么是比特?

如果你对电脑了解不是什么多,其实就是电脑用于存储数据的最小单位,例如我们称重有公斤,比特就是电脑用于存储数据的最小单位。它就像一个桶,可以是空的,也可以是满的。

0,1

截屏2024-07-01 11.01.50

如果我们有两位

例如

00

01

10

11

我们可以同过这些定义颜色的亮度,截屏2024-07-01 11.06.25

截屏2024-07-01 11.16.10

additive colors

additive colors

8Bits 例如Nes

16Bits 就像Super Nintendo

这就是我们谈论的关键点

Low Bit History

让我们看一些例子

pong

Why does a 5431 character story about Atari's 2 KB game Pong need a 3.08 MB  download to be read? An environmental plea for readability, and for more  static web sites |

atari games

7 Forgotten Atari 2600 Classics | PCMag

Super Mario

Super Mario Bros. | NES | Games | Nintendo

Nem Games

Chrono Trigger | Games | The Guardian

Game Boy Advance

Fire Emblem for Game Boy Advance Rekindles the Flames of Battle on Nintendo  Switch Online + Expansion Pack June 22 - News - Nintendo Official Site

DS Games

Cool Nintendo DS game Lock's Quest coming to PC, PS4 and Xbox One |  Eurogamer.net

我们看一下这里有什么变化,一种颜色,几种颜色,一些非常明亮的颜色,你可以看到他们更具代表性,看超级玛丽,我们有了天空,而不是黑色;

然后我们有了很多的不同颜色,可以使用调色板,但仍然是相当低的分辨率;(Nem Games)

再到GBA,你可以选择任何你想要的颜色,仍然是非常有限的分辨率;

再到DS,一个相当高的分辨率,全色域的颜色,并且正在和3D游戏竞争;

也可以看看在playstation上的,例如ps1的游戏

Final Fantasy Tactics Game for Android - Download | Bazaar

像素与3D混合在一起,所以在这里我们可以看到一个示例,其中像素用于诸如角色的UI设计之类的东西,但3D开始用于地形,Pixel+3D

在《最终幻想战术》,我们可以看到像素艺术被涂上了,并且纹理恰到好处。

但很快,像这一类风格的游戏开始搭配非像素艺术,就如Nintendo 64 游戏所以像Mario 64 我们有足够的内存,可以用于执行动态照明或者基于几何体的照明之类的像素,反对手绘,你在屏幕上看到的一切。

Super Mario 64 gets a ray tracing makeover on PC | GamesRadar+

所以这是我们今天谈论的一切,希望你们感兴趣。

像素艺术与其他艺术不同,我想参考一个论坛帖子。

https://pixeljoint.com

这个论坛是一个关于像素艺术的论坛,推荐大家可以上去看看。

挑战100天做一款游戏🎮物理碰撞学习

game_dev_screenshot
game_dev_codes

这一节主要内容

1.给场景里的箱子、树木、还有Tilemap道具加上Box Collider 2D 组件

2.通过给Ruby添加Rigidbody 2D 组件,解决Ruby在道具周边移动时会旋转的问题

3.通过C#代码层,在FixedUpdate()函数中,合理的重新绘制Ruby的position在碰撞之前停止移动,而不必在 Ruby 已经进入箱子之后再移动 Ruby。之前一直是写在Update函数中的,这次新学的FixedUpdate()和其还是有区别的。(关于区别我放在末尾)

4.通过更改道具和Ruby Collider的大小使阻挡更合理

5.给瓦片地图添加Tilemap Collider 2D组件,通过调整Collider Type属性来完成合理的阻挡

6.通过给Tilemap添加Composite Collider 2D 自动添加 Rigidbody 2D ,优化地图碰撞

Update 和 FixedUpdate 区别

update跟当前平台的帧数有关,而FixedUpdate是真实时间,所以处理物理逻辑的时候要把代码放在FixedUpdate而不是Update.

Update是在每次渲染新的一帧的时候才会调用,也就是说,这个函数的更新频率和设备的性能有关以及被渲染的物体(可以认为是三角形的数量)。在性能好的机器上可能fps 30,差的可能小些。这会导致同一个游戏在不同的机器上效果不一致,有的快有的慢。因为Update的执行间隔不一样了。

Update需要时要进行单位转换(乘以Time.deltaTime):单位/帧*帧/秒=单位/秒。以保证按照单位时间被调用(这样从帧转换到了时间,但数值变小了,为了变回原值还要乘以Time.deltaTime的倒数的数值【注意是数值】)

FixedUpdate要乘以fixDeltaTime

Unity2D 装饰世界

接上一期,我们已经有了瓦片地图,现在我们添加更多的元素来充实我们的游戏世界。

关于瓦片的快捷键和官方的瓦片教程,可以看这里

1601b3b6-6ea0-4cae-b1b6-d8beebe01be4_3.5.png.400x0x1

这一节我们通过改变游戏对象的y坐标来绘制游戏对象。

1.选择 Edit > Project Settings

2. 在左侧类别菜单中,单击 Graphics

3.Camera Settings 中,找到 Transparency Sort Mode 字段。此字段决定了精灵的绘制顺序。使用下拉菜单将此设置从 Default 更改为 Custom Axis7892a369-ac56-4457-93a7-ee30f0f67c1c_TranspSortMode.png.2000x0x1

4.Transparency Sort Axis 中添加以下坐标:

  • x = 0
  • y = 1
  • z = 0

此设置告诉 Unityy 轴上基于精灵的位置来绘制精灵

5.关闭 Project Settings 窗口并保存你的更改。

6.Play 以进入运行模式并测试你的更改。现在,你的角色比箱子高时,角色应该会绘制在箱子的后面;而角色比箱子低时,绘制在箱子的前面。 这只是一个开始,但并不完美,因为在箱子后面(而不是前面)绘制 Ruby 的时机似乎过早。为此解决此问题,你需要调整 Sprite Renderer 组件。