SDL中文论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 5080|回复: 1
打印 上一主题 下一主题

[animation] 实现关卡外动画

[复制链接]

21

主题

36

帖子

334

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
334
跳转到指定楼层
楼主
发表于 2020-9-3 18:20:06 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
理论上播放动画图像分三步骤:存储背景、画图像、恢复背景。但是考虑到两个原因,1)按实现动画的程序辑逻,要用map_location分割动画涉及到的背景,在关卡外那得人为造出一个gamemap,非常麻烦;2)相对来说,关卡外是不大耗CPU地方,即使叫强制次次全刷,估且可以接受。因而在播放关卡外动画时采用省略了存储背景的简化形式。
  • 窗口画向framebuffer。
  • 动画画向framebuffer(game_display::draw_outer_anim)。
  • flip。
  • 清空framebuffer、置窗口脏标志,使得1)时肯定会重画整窗口。
  • -------------------->1)。

按垂直放置到层分,关卡外动画分背景动画、前景动画。
描述渲染时机
背景动画它们高于窗口背景,但低于除背景外部分。适用于像标题屏幕。twindow::draw画完背景后(注1)
前景动画它们高于窗口。thandler::draw在flip前(注2)


  • 这种放置只能说是临时凑合用,目前不想考虑太多。标幕屏幕(title_screen)背景图像是在背景,实现它至少没问题。
  • thandler::draw是gui2渲染的入口点、结束点。flip前放置可让确保会高于窗口各控件。

回复

使用道具 举报

21

主题

36

帖子

334

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
334
沙发
 楼主| 发表于 2020-9-3 18:21:01 | 只看该作者
按基于的窗口,关卡外动画分为基于屏幕动画和基于窗口动画。
  • 基于屏幕动画:offset_x/offset_y是基于游戏屏幕计算的动画。
  • 基于窗口动画:offset_x/offset_y是基于某个窗口计算的动画。

在动画配置上,没有字段用于区分一个动画是基于屏幕还是基于窗口,这个区别是按使用场合定义。像序幕中的地图窗口是基于屏幕,那么在具体化这动画时就尊循基于窗口动画的参数规则。
基于屏幕动画基于窗口动画
offset_x/y基于尺寸游戏当前屏幕特别指定的窗口
和缩放无关偏移(注1)(0, 0)窗口对应控件左上角
如何指定图像位置x/y、offset_x/y共同指定图像中心x/y、offset_x/y共同指定图像中心


  • 和缩放系数无关的偏移值。对动画来说,它以这个偏移值被整体偏移。因为不需要缩放,所以它是“最终”用户看到的某控件偏移值。

    图中动画所在控件是地图控件,它的和缩放无关偏移就是该控件在屏幕中编移:(240, 35)。


设定基于窗口动画步骤
  • 程序会告知该动画基于的窗口尺寸。像序幕动画是800x600。
  • 基于800x600,MOD制作者设置好各动画参数。像旗帜、地名。
  • 程序要播放时,它计算两参数,1)根据控件(对应窗口)尺寸和理论尺寸(800x600)计算出缩放系数zoom;2)根据控件左上角坐标计算和缩放无关偏移。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|丽谷软件|libsdl.cn

GMT+8, 2025-5-1 22:42 , Processed in 0.048752 second(s), 22 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表