马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
前阵子在群里一时兴起模仿博德之门实现了一个随机掷骰子的效果
代码写的很烂,最后在ZYKsslm大佬的拯救下总算让代码正常跑起来没有太大bug了
(实际上还是会有个bug,就是有一瞬间结果帧会比动画帧提前出现,这就只能想办法让结果帧延迟显示了)
简单说一下思路吧,这个骰子的逻辑是点击掷骰子之后播放一段骰子动画,最终显示骰子最终的点数
如果逐帧观看的话,会发现骰子高速旋转产生动态模糊几乎看不到骰子的点数,只有到出结果的时候唐突静止显示出精确的数字
所以就可以把动画拆分成两端,一段是高速运动的骰子,一段是展示结果
如果变成代码的话,这段的逻辑就是:
点击掷骰子→随机出骰子点数→播放掷骰子动画→播放结果动画
实现环节
各位可以通过各种方式去制作这个骰子动画,可以是手绘也可以是3D,我就简单用blender制作了六面骰的动画
然后截取结束帧作为结果显示
中间代码如下
[RenPy] 纯文本查看 复制代码 # 定义骰子动画
image d0 = Solid("#00000000")
image d1 = Movie(play="images/1.webm", loop=False)
image d2 = Movie(play="images/2.webm", loop=False)
image d3 = Movie(play="images/3.webm", loop=False)
image d4 = Movie(play="images/4.webm", loop=False)
image d5 = Movie(play="images/5.webm", loop=False)
image d6 = Movie(play="images/6.webm", loop=False)
# 定义结果
image d0p = "1.png"
image d1p = "1.png"
image d2p = "2.png"
image d3p = "3.png"
image d4p = "4.png"
image d5p = "5.png"
image d6p = "6.png"
default index = 1
default c = 0
label start:
call screen roll
return
screen roll():
$ mv = f"d{index}"
$ img = f"d{index}p"
showif c:
add img zoom 0.5 align (0.5, 0.5) # 骰子结果
add mv zoom 0.5 align (0.5, 0.5) # 骰子动画
textbutton "roll!":#骰子按钮
align (0.5, 0.85)
action [SetScreenVariable("c", c+1), SetScreenVariable("index", renpy.random.randint(1, 6))]
这只是一个简单的骰子效果,主要还是跟各位介绍分析和实现一个效果的思路
同样的思路可以做很多其他的东西,想要交作业也欢迎在这个帖子下交作业
(话说这个掷骰子花了我两个小时去实现,半小时我就做完动画了,剩下一个半小时在写bug,最后还是ZYKsslm大佬出手十几分钟解决战斗,可能我确实不适合写代码)
|