下载 App

开发心得接力:用一张图做动态背景和点击即进入游戏的丝滑过渡

精华03/3194 浏览开发交流 包含 AI 合成内容
作者:浠涫
开发引擎:TapTap Maker (UrhoX)
项目:方格屋(半成品)
一、为什么做这种效果
方格屋的标题页是一扇门。
我想让玩家打开游戏的第一眼就看到一扇微微呼吸的门——不是一张静态截图,而是一段循环播放的短视频。门缝里透出暖光,光影在动,像真的有人在里面。
TapTap
然后点击继续游戏等,门缓缓打开,白光涌出——无缝过渡到游戏。
这个效果用一张静态图也能做,但视频的呼吸感和光影变化是静态图给不了的。问题是:TapTap Maker 的视频播放只在 WASM(网页端)支持,手机端完全不支持。所以必须做 fallback——视频加载失败时自动降级为静态图片,不能让游戏卡在标题页。
二、技术方案:一张图 → 两段视频
整个方案只需要 一张 AI 生成的图片,然后基于这张图生成两段视频:
TapTap
核心思路:两段视频共享同一帧画面作为衔接点。循环视频的最后一帧 = 开门视频的第一帧。点击开始时,从循环视频无缝切到开门视频,玩家感知不到切换。
2.1 生成标题图
先用 AI 画图机生成一张标题页背景图:
治愈系动画风格,一扇老旧的木门,门缝透出暖黄色光芒,门前有斑驳的台阶和落叶,
周围是温暖的午后光线,竖屏 9:16,水彩质感
这张图就是整个标题页的视觉基调。
2.2 生成循环视频(title_loop.mp4)
用 create_video_task
的 first_frame
模式,以标题图作为首帧:
模式:first_frame
首帧图片:[标题图]
提示词:门缝中透出的暖光微微呼吸般明暗变化,光影在门板上缓慢流动,
       阶梯上的落叶被微风轻轻吹动,整体氛围安静而温暖
时长:10-15 秒
循环:是
关键点:
动作幅度要小——这是背景,不能抢按钮的风头
光影变化用 sin 曲线控制呼吸感,不要突变
循环播放时首尾要能衔接(让 AI 生成时注意这一点)
2.3 生成开门视频(title_door.mp4)
同样用 first_last_frame
模式,首帧 = 标题图,尾帧 = 纯白光:
模式:first_last_frame
首帧图片:[标题图](和循环视频的最后一帧一致)
尾帧图片:[一张纯白/暖白光的图片]
提示词:木门缓缓向内打开,门缝中涌出温暖的白色光芒,光芒逐渐充满整个画面,
       门打开的过程中可以看到门内模糊的温暖空间
时长:3-5 秒
关键点:
首帧必须和循环视频的最后一帧一致——这是无缝衔接的前提
尾帧是纯白光,方便后续接网格转场(GridTransition)
开门速度不要太快,2-3 秒比较舒服
三、代码实现
3.1 标题页视频播放
在 BuildTitleUI()
中,用 Video.VideoPlayer
组件做循环背景:
```lua
-- 视频背景(WASM 支持 + 加载成功时使用)
if Video.isSupported and titleVideoWorks_ then
    titleVideoPlayer_ = Video.VideoPlayer {
        id = "titleVideo",
        src = Config.TITLEVIDEOLOOP,     -- "video/title_loop.mp4"
        width = "100%",
        height = "100%",
        textureWidth = 1080,
        textureHeight = 1920,
        autoPlay = true,
        loop = true,          -- 循环播放
        muted = true,         -- 静音
        objectFit = "cover",  -- 填满屏幕
        pointerEvents = "none", -- 禁用视频自身的点击暂停
    onReady = function(self)
        titleVideoLoadTimer_ = -1  -- 加载成功,停止超时计时
    end,
}
else
    -- fallback:静态图片背景
    titleVideoPlayer_ = nil
    uiRoot_ = UI.Panel {
        width = "100%", height = "100%",
        backgroundImage = Config.TITLEBGIMAGE,  -- 静态 fallback 图
        backgroundSize = "cover",
    }
end
```
几个细节:
pointerEvents = "none"
+ 覆写 OnPointerUp
——彻底禁用视频的点击暂停行为,否则玩家点按钮时会误触发视频暂停
objectFit = "cover"
——视频填满整个屏幕,不留黑边
textureWidth/Height
设为 1080×1920——匹配竖屏分辨率
3.2 点击开始 → 开门过渡
点击"推开门"按钮后,切换视频源并播放开门动画:
```lua
function TitleStartDoorTransition(startGameFn)
    if titleTransitioning_ then return end
    titleTransitioning_ = true
FadeBGMOut(2.0)
PlaySFX("door_open", 0.6)
if titleVideoPlayer_ and Video.isSupported and titleVideoWorks_ then
    -- 隐藏 UI 叠加层
    local overlay = uiRoot_ and uiRoot_:FindById("titleOverlay")
    if overlay then overlay:SetVisible(false) end
    -- 切换到开门视频
    titleVideoPlayer_.props.loop = false
    titleVideoPlayer_:SetSrc(Config.TITLE_VIDEO_DOOR)
    titleVideoPlayer_:Play()
    -- 开门视频播完 → 网格转场 → 进入游戏
    titleVideoPlayer_.props.onEnded = function(self)
        titleVideoPlayer_ = nil
        GridTransition.Start({
            colorA = { 255, 255, 255, 255 },  -- 白(承接视频结尾的白光)
            colorB = { 0, 0, 0, 255 },        -- 黑
            onMiddle = function()
                startGameFn()  -- 全黑时切换游戏状态
            end,
        })
    end
else
    -- 无视频支持:直接用网格转场
    GridTransition.Start({ ... })
end
end
```
核心逻辑:
1. SetSrc()
切换视频源——从循环视频切到开门视频
2. 开门视频播完触发 onEnded
→ 启动网格翻转转场
3. 转场进行到一半(全黑时)切换游戏状态——玩家看不到切换过程
4. 如果视频不可用,直接走网格转场——降级方案
3.3 超时保护
视频加载可能失败,必须加超时:
lua
-- 标题视频:3 秒内必须 onReady,否则 fallback 到静态图
-- 开门视频:5 秒内必须播完,否则强制转场
四、踩坑记录
坑 1:点击按钮时视频被暂停
Video.VideoPlayer
默认支持点击暂停。标题页的按钮浮在视频上方,点击按钮时事件会冒泡到视频组件。
解法:pointerEvents = "none"
+ 覆写 OnPointerUp
吞掉事件。
坑 2:视频加载失败时白屏
Video.isSupported
返回 true 但视频文件加载失败时,页面会卡白屏。
解法:3 秒超时计时器。onReady
没触发就自动 fallback 到静态图片。
坑 3:两段视频衔接不自然
分别生成导致首帧不完全一致。
解法:开门视频的 first_frame
直接用循环视频的最后一帧截图,而不是原始标题图。
坑 4:手机端完全不支持视频
Video.isSupported
在手机端返回 false。
解法:fallback 静态图也要选好看的那张,保证两端体验一致(只是手机端没有动态效果)。
五、成本和效果
| 项目 | 数据 |
|------|------|
| AI 生图(标题图) | 1 次 |
| AI 生成视频(循环 + 开门) | 2 次 |
| 总积分消耗 | 约 3000-5000 |
| 代码量 | 约 80 行 |
| 效果 | 桌面端动态呼吸背景 + 丝滑开门;手机端静态图 + 网格转场 |
一句话总结:用一张图做种子,生成两段首尾帧衔接的视频,配合 fallback 机制,就能用很低的成本实现标题页的动态背景和丝滑过渡。
猜你想搜
taptap 制造ai生成视频
别再烧积分了!从每次 2000 到每次 50 的血泪经验截图
别再烧积分了!从每次 2000 到每次 50 的血泪经验
适用场景:所有在用 TapTap Code 开发游戏的小白 难度:★☆☆☆☆ 背景最近群里总有人"炫耀"一次操作花了几千积分,说实话这不是值得高兴的事——这是在告诉所有人你的开发方式有根本性问题。我也走过这条弯路,所以来说说怎么改。 积分消耗的本质是什么积分 = AI 处理的 token 数量 = 你发给 AI 的内容 + AI 回给你的内容所以烧积分的本质只有两种: 你让 AI 做了大量无效/重
精华
82 赞
23 回复
如何提升你游戏中的UI美术水平截图
如何提升你游戏中的UI美术水平
一、请为你的游戏挑选一款合适的字体 很多开发者没有注意到其实UI界面中最重要的元素是字体,一款合适的字体能给整个游戏的界面感官带来蜕变。 请看案例 那么如何挑选适合自己的字体呢? 我总结出了一些小经验可供参考: 黑体:通用 宋体:古风、武侠、修仙 楷体:古风、武侠、修仙 圆体:卡通、动漫、Q版 科技:科幻、未来、电子 顺手分享一个免费可商用字体网站: 当然 如果你不知道自己的游戏适合什么风格
精华
126 赞
44 回复
01:29
官方阅,申请积分计划2,希望官方继续支持我完成这款游戏,截图
官方阅,申请积分计划2,希望官方继续支持我完成这款游戏,
视频内容只是一部分, 本游戏耗时3个月,目前完成进度百分之80, 是生存游戏,进入修仙界,走剧情找到宗门加入, 这时游戏才是真正开始, 提升实力境界后就可以变强,获取功法法术法宝, @视频内是游戏里挑战妖族入侵一种主流玩法,游戏就是围绕着这个来进行, 还有很多地方可以战斗,获得资源修炼变强,比如去藏书阁学习功法, 去法宝楼抽法宝,每一个宗门数十个法宝抽取 去修仙界探索,获得各自的资源,可能遇见妖兽
1 赞
3 回复
本地部署 AI 对接 TapMaker 指南 —— 以 CodeBuddy 为例V1.1截图
本地部署 AI 对接 TapMaker 指南 —— 以 CodeBuddy 为例V1.1
写在前面 大家好,我是橘猫,和你一样也是TapMaker的萌新玩家。在"全能神"天哥的悉心指导下,我顺利完成了本地开发环境的部署。经过这段时间的实战测试,已经成功打通了「本地开发 → 同步至TapMaker」的完整流程。 以下内容全部来自我的个人实操经验,旨在为同样在探索本地部署的朋友提供一个参考。每个人的电脑环境、网络情况、AI工具版本都不尽相同,文中的步骤仅供交流学习。如果你照着操作后遇到问题
37 赞
21 回复
永恒虚空持续开发日记1——关于游戏中的新名词:场频截图
永恒虚空持续开发日记1——关于游戏中的新名词:场频
写在前边:首先感谢TapTap制造版主大大@汪崽 对于作品潜力的肯定,给与了我积分计划二的权限[表情_不好意思]。这边也在加紧开发改进各种功能中,期望尽快给大家带来成熟的版本。[表情_猫咪举手] 大家好,我是永恒虚空的制作人黑猫不详,大家叫我黑猫就好。从今天开始我将以后置开发日记的形式给大家分享我在TapTap制造中制作的游戏永恒虚空的开发过程,新人希望大家多多关照! 今天先给大家介绍我作品中最重
投票
3 赞
00:54
等距场景编辑器——自行编辑2D瓦片场景地图截图
等距场景编辑器——自行编辑2D瓦片场景地图
一个可嵌入任何 UrhoX 项目的完整等距瓦片地图编辑器,适用于 RPG、策略、模拟经营等类型游戏的关卡设计。 SKILL审核已通过,各位创作者可以根据自己的需要对工具进行调整修改 声明:该工具仅作为场景编辑以及序列化,交互等功能需要用户自行在项目中定义 后续会根据实际情况补充rule tile相关逻辑,实现tile map编辑自由 目录 1. 界面总览 2. 六种编辑工具 3. 双视图模式 4.
精华
21 赞
11 回复
浅记《阿方的旅程》开发历程截图
浅记《阿方的旅程》开发历程
预计阅读时长10分钟,欢迎您先品鉴游戏,再回来看这篇“流水账” 这是我第一次实际接触“用自然语言制作游戏”,也是我第一次接触游戏开发工作,所以一切都是从零开始,跌跌撞撞,懵懵懂懂。[表情_豹哭] 我是通过获得的本次开发资格,6月22日晚,在微信公众号收到了测试资格的消息,最开始公布主题“跳跃”的时候,脑子里最先想到的就是几款非常经典的游戏「马里奥」「Flappy Bird」「Doodle Jump
10 赞
1 回复
01:07
我给制造开发了一个半自动的开发工作流截图
我给制造开发了一个半自动的开发工作流
随着多模态模型识图能力增强,尝试一下AI 是否能自己修复bug,自己检查。 1,基于画面修复代码 2,点击TapTap制造 菜单,切换屏幕显示 3,截图验证 刚跑通一个小闭环,给大家分享一下 随着模型能力增强,Token费用走低,这种半自动开发是未来常态了
1 赞
2 回复
游戏自荐《少女终焉契约》截图
游戏自荐《少女终焉契约》
之前玩放置类型的rpg游戏的时候我就在想,现在游戏的操作有的太过于繁琐了,有没有一款休闲一点的,想上线就上线,离线的时候角色能自动行动的游戏呢?感谢TapTap制造,我按照我的想法开发出了现在这款游戏。 一、故事背景和UI 游戏的故事背景是传统的异世界穿越故事,玩家被女神召唤到异世界,随后组建工会,招募美少女,打怪升级探索世界。所以我选择了更加二次元萌系画风的UI风格,主页为各个主要的功能,点开来
8 赞
3 回复
00:15
绕过沙箱实现配置游戏数据并且保存截图
绕过沙箱实现配置游戏数据并且保存
TapTap制造目前是将代码打包至沙盒运行环境中 “开发环境”——“运行环境”相隔离 这就导致一个问题,如果我需要在游戏中详细的配置游戏数值设计,关卡场景设计,UI摆放只能通过与AI交流实现。 [表情_惊恐]这会浪费大量的积分用于反复做细小的改动并且修改过程中无法直观的看到效果。 为了解决绕开开发环境与运行环境无法交流的问题,我制作了场景编辑器,用本机环境作为一个中转站,绕过沙箱限制,实现关卡的详
4 赞
5 回复