-
Notifications
You must be signed in to change notification settings - Fork 5
Skinning
44 个贴图位、九宫格元数据、App 与天气图标。
界面上的每个视觉元素都能用贴图替换。放了贴图就用贴图,没放就用内置配色,功能完全不受影响——不会出现缺图变紫黑格子的情况。
把 PNG 放进资源包的 assets/mcphone/textures/,路径按下面几张表(相对该目录)。改完按 F3+T 重载资源包即可看到效果,不用重启游戏。
| 文件名 | 画的是什么 | 建议尺寸 | 没放时 |
|---|---|---|---|
phone/frame.png |
手机外壳边框 | 136×216(含边框的整机)。中间 120×200 必须透明——外壳画在最上层,不透明会糊掉整个屏幕;反过来你在中间画的内圆角、刘海都会显示 | 画纯色边框 |
phone/status_bar.png |
顶部状态栏底 | 120×10 | 纯色 |
phone/nav_bar.png |
底部导航栏底 | 120×14 | 纯色 |
phone/nav_back.png |
导航栏返回键 | 40×14 | 画 ◁ 字符 |
phone/nav_home.png |
导航栏主页键 | 40×14 | 画 ○ 字符 |
phone/nav_tasks.png |
导航栏多任务键 | 40×14 | 画 □ 字符 |
phone/drop_slot.png |
主屏拖动排序时「松手落这儿」的空槽 | 20×20 | 半透明纯色 |
phone/page_dot.png |
主屏底部的页码点(不是当前页) | 3×3 | 半透明纯色 |
phone/page_dot_active.png |
页码点(当前页) | 3×3 | 纯白 |
phone/page_edge.png |
拖着图标停在屏幕边上时的翻页提示条 | 10×176(竖条) | 半透明纯色 |
phone/toast.png |
收到消息时右上角的通知底 | 160×32(原版通知的槽位尺寸,照这个画才不会和其他模组的通知挤在一起错位) | 纯色加一圈描边 |
phone/unread_badge.png |
未读条数的角标底。两处共用:会话列表里的未读数与消息通知右上角的计数是同一张图,换一次两处都变 | 12×9 | 纯色 |
| 文件名 | 画的是什么 | 建议尺寸 | 没放时 |
|---|---|---|---|
chat/bubble_self.png |
自己发出的聊天气泡底(只有文字消息用,图片不套气泡) | 随内容拉伸 | 纯色 |
chat/bubble_peer.png |
对方发来的聊天气泡底(同上) | 随内容拉伸 | 纯色 |
chat/input_bar.png |
会话界面输入栏底 | 90×14 | 纯色 |
chat/teleport.png |
会话列表里在线好友那一行右下角的「传送到他身边」小图标 | 7×7(按实际绘制尺寸画,这里不做平滑缩放) | 画 → 字符 |
chat/attach.png |
会话界面输入栏左边那个「+」(点开是图片 / 表情) | 9×9 | 画 + 字符 |
| 文件名 | 画的是什么 | 建议尺寸 | 没放时 |
|---|---|---|---|
music/prev.png |
「上一首」 | 9×9 | 画 ⏮ 字符 |
music/play.png |
「播放」 | 9×9 | 画 ▶ 字符 |
music/pause.png |
「暂停」 | 9×9 | 画 ⏸ 字符 |
music/next.png |
「下一首」 | 9×9 | 画 ⏭ 字符 |
music/eject.png |
唱片仓的「取出」 | 9×9 | 画 ⏏ 字符 |
music/backpack.png |
唱片仓的「从背包放」(只在仓是空的时候出现) | 9×9 | 画 ▤ 字符 |
music/mode_list_loop.png |
循环模式:列表循环 | 9×9 | 画 ↻ 字符 |
music/mode_single_loop.png |
循环模式:单曲循环 | 9×9 | 画 ① 字符 |
music/mode_shuffle.png |
循环模式:随机播放 | 9×9 | 画 ⇄ 字符 |
| 文件名 | 画的是什么 | 建议尺寸 | 没放时 |
|---|---|---|---|
gallery/delete.png |
相册单张查看里的「删除」键(点过一次之后变成文字「再点一次确认」,那一态不走贴图) | 9×9 | 画「删除」两个字 |
store/button.png |
应用详情页上可点的按钮底(购买 / 下载) | 100×16 | 纯色 |
store/button_disabled.png |
点不动时的按钮底(已安装 / 买不起) | 100×16 | 纯色 |
store/companion.png |
商店里「联动App」入口格的图标 | 20×20 | 纯色底加三个小方块 |
store/button_disabled.png是单独一张,而不是把可点的那张调暗——调暗是我们替美术做的决定,「不可点」该长什么样应该由画贴图的人说了算。
| 文件名 | 画的是什么 | 建议尺寸 | 没放时 |
|---|---|---|---|
browser/panel.png |
浏览器那块大面板的底 | 320×200 | 纯色 |
browser/bar.png |
浏览器工具条那一条的底 | 320×22 | 纯色 |
browser/back.png |
「后退」键 | 22×18(整个键框,不是居中的小图标) | 画 ◀ 字符 |
browser/forward.png |
「前进」键 | 22×18 | 画 ▶ 字符 |
browser/reload.png |
「刷新」键 | 22×18 | 画 ↻ 字符 |
browser/panel.png绝大部分会被网页盖住,真正看得见的只有加载中的空白期,纯色就够。browser/bar.png那一条在面板外面,浮在面板上方的留白里,不占网页高度。
| 文件名 | 画的是什么 | 建议尺寸 | 没放时 |
|---|---|---|---|
reader/book.png |
书架列表里那本兜底的书(只在书源画不出那本书自己的图标时用得上) | 16×16(按实际绘制尺寸画,这里不做平滑缩放) | 纯色 |
reader/search_bar.png |
阅读页顶上那条搜索栏的底 | 112×12 | 纯色 |
reader/shelved.png |
书已收进书架时行右端那颗星 | 9×9(按实际绘制尺寸画) | 画 ★ 字符 |
reader/unshelved.png |
书还没收进书架时那颗星 | 9×9 | 画 ☆ 字符 |
reader/tab.png |
底部「书架 / 书城」当前那一页的底 | 54×12 | 纯色(另一页不画底) |
| 文件名 | 画的是什么 | 建议尺寸 | 没放时 |
|---|---|---|---|
settings/slider_track.png |
滑条的槽(「界面大小」那一条,将来的音量条也用它) | 100×6,整张横向拉伸 | 纯色 |
settings/slider_fill.png |
滑条已填充的那一段 | 100×6 | 纯色 |
settings/slider_knob.png |
滑块 | 4×14(比槽高,压在槽上) | 纯色 |
settings/step_button.png |
滑条两端 − + 键的底 | 14×14 | 纯色,悬停时提亮 |
这四件刻意起的是通用名字:以后别的滑条(比如音量)也会用同一组,画一次就够。
App 图标单独放在 app/ 下,文件名就是 App 的短名,都是 20×20:
app/settings.png app/app_store.png app/chat.png app/camera.png
app/gallery.png app/music.png app/ender_chest.png app/notes.png
app/waystone.png app/browser.png app/clock.png app/weather.png
app/reader.png app/quests.png
附属模组的 App 图标路径由它自己决定,见附属接口文档。
天气页那张大图标在 weather/ 下,六张 32×32:clear.png、rain.png、snow.png、thunder.png、dry.png、none.png,按当前是什么天各显其一。
这六张和上面几张表不是一回事——它们没有兜底色,因为模组自带全套,资源包只是覆盖。要换就六张一起换,只换一两张会出现画风打架。
玩家头像不在换肤范围内 —— 那是玩家自己的皮肤,取自 Tab 玩家列表,资源包不该覆盖。
尺寸不必精确匹配,贴图会被拉伸到目标区域。想要不变形,按建议尺寸或其等比放大画即可。
建议尺寸是「画在屏幕上有多大」,不是「文件必须多大」。 整数倍放大的图一样能用,而且线条细、有弧度的图案这么做更清楚:模组自带的 phone/frame.png 是 2 倍(272×432),导航栏那三个键是 10 倍(400×140),书架那两颗星、浏览器那三个键、滑块与 − + 键都是 4 倍。
放大倍数取整数——非整数倍在低 GUI 缩放下会掉线条。
默认整张拉伸。 不带元数据的贴图行为和以前一样——整张被拉到实际大小,带圆角的图在宽气泡上抻长、在窄气泡上压扁,所以纯色或纵向渐变最稳妥。
想要圆角不变形,在 PNG 旁边放一份同名的 .png.mcmeta:
{"mcphone_skin": {"border": 3}}这张图就改走九宫格:四角按源图上那 3 个像素原样画,只有四条边和中间被拉伸,气泡多宽多高,四个角都一样大。
border 大于源图短边的一半时忽略,退回整张拉伸;老资源包不写这份元数据,什么都不用改。
自带图里用了九宫格的有五张:两种气泡与输入栏是 border: 3,滑条的槽与填充是 border: 2——让两端的圆头不跟着条一起抻长。
贴图改不了颜色。 悬停、点不动这类状态,在没有贴图的年代是换一个颜色画出来的;这个位上一旦有了贴图,那个颜色就再也看不见。
所以模组在有贴图时改用别的表达:
| 状态 | 表达 |
|---|---|
| 导航键、商店按钮悬停 | 整张按倍数提亮(资源包画的是什么颜色,亮起来还是那个颜色) |
| 浏览器那三个键点不动 | 整张压暗 |
| 音乐键、聊天的「+」 | 把高亮块画在贴图底下 |
画贴图时不必自己去表达这些状态。
半透明是有效的:贴图里 alpha 介于 0 与 255 之间的像素会正常混合,抗锯齿边缘、整块半透明的底(做"壁纸上压一层暗色"这种效果)都可以画。
1.7.40 之前这类像素会被当成不透明画出来,边缘发硬、半透明的底变成实心——那是模组的 bug,不是你的图有问题。
上面那些表里的 44 个位,模组现在全都自带——一个不缺。最后补上的是浏览器工具条那三个键与滑条那四件;在那之前补齐的十三张是状态栏、拖动空槽、两颗页码点、翻页提示条、商店的两个按钮底、浏览器的面板与工具条、阅读的搜索栏 / 标签 / 收藏与未收藏两颗星。
资源包放同路径的图仍然照常覆盖,只是「没放时」那一列的兜底色平时已经轮不到出场了——它还留在表里,是因为资源包塞进来一张坏 PNG 时仍然会退到那一档,而不是变成紫黑格子。
放进去的文件不是合法 PNG 时会退回纯色,并在日志里记一条警告,不会崩。
完整的贴图位清单(含每个位现有的图长什么样、缺图时退回哪个颜色)可以自己生成:
python3 docs/make_texture_manifest.py出一张 HTML。
不在文档里存一份静态清单,是因为那种清单必然过期——
PhoneTheme头部那张就是这么烂掉的。
老路径仍然认。 1.2.7 之前所有贴图平铺在 textures/gui/ 下(phone_frame.png、app_icon_chat.png 这种)。按那套做的资源包不用改也能继续用——新路径找不到时会自动回退,并在日志里提一句。新做的资源包请按上面几张表。