RenPy中文空间

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 629|回复: 2

[已解决] 想做卡片翻转效果碰到的问题

[复制链接]
发表于 2020-2-19 17:10:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
各位大大好,这里想做一个抽卡展示的场景,想实现的功能是:
1. 卡片背面朝上,从屏幕侧边移动到中间
2. 点击卡片后,卡片翻转
3. 正面朝上显示

我知道Renpy好像没办法实现真实的3D卡片翻转,于是思路是用xzoom 0这种方式模拟翻转效果,并且在翻转中换图
目前用screen中的imagebutton来当做卡片,写了个从侧面移动到中间的transform,同时在action中通过点击改变变量来换图片
但翻转效果始终不知道该如何插入
action好像也没有能调用另一个transform做动画的函数,看文档尝试了很久都没成功
这种  移动→点击→翻转一半→换图→翻转一半  的复杂操作,是不是只能换个方式实现呢?

麻烦各位前辈分享一下经验,万分感谢!

以下是尝试的代码:
[RenPy] 纯文本查看 复制代码
transform cus_zoom(size_factor):
    zoom size_factor

transform deal_card(x, y, duration, delay, angle):
    xalign 0.0
    ycenter 0.5
    zoom 0.5
    time delay
    parallel:
        easein duration xcenter x ycenter y
    parallel:
        easein duration rotate angle

transform flip():
    xanchor 0.5
    linear 1.0 xzoom 0
    linear 1.0 xzoom 1

screen draw_card():
    python:
        poker = Poker(True)
        poker.shuffle()
    default card1 = poker.draw_one().get_pic_name()
    default card2 = poker.draw_one().get_pic_name()
    default card_pic = "PlayingCards/back.png"

    imagebutton:
        idle card_pic
        hover card_pic
        action SetScreenVariable("card_pic", "PlayingCards/" + card1 + ".png")
        at deal_card(0.5, 0.4, 1, 0, 360), cus_zoom(0.7)


label start:
    call screen draw_card
    return


发表于 2020-2-20 08:26:05 | 显示全部楼层
直接把翻的动态效果做成一个动图
在点击事件上把卡背给hide起来,show翻牌动作图,等待翻转动画完成
然后hide翻牌动图并show出翻出来的卡面图片不就可以了吗
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-20 12:59:58 | 显示全部楼层
763003211 发表于 2020-2-20 08:26
直接把翻的动态效果做成一个动图
在点击事件上把卡背给hide起来,show翻牌动作图,等待翻转动画完成
然后hi ...

感谢回复!用你的思路尝试了下解决了!简单说就是把过程分成一步步,用一个变量来控制当前过程
代码给需要的伙伴参考下:

[RenPy] 纯文本查看 复制代码
default process = 1

if process == 1:
        timer 1.0 action SetScreenVariable("process", 2)
        add card_back:
            at deal_card(zoom_factor, 0.5-card_offset, 1-0.12, 1, 0, 360)

    if process == 2:
        # 自己卡1
        imagebutton:
            xcenter 0.5-card_offset
            ycenter 1-0.12
            idle card_back
            # hover p2_card1
            action SetScreenVariable("process", 3)
            at cus_zoom(zoom_factor)

    if process == 3:
        timer 0.5 action SetScreenVariable("process", 4)
        add card_back:
            zoom zoom_factor
            xcenter 0.5-card_offset
            ycenter 1-0.12
            at rotate(0.0, 0.5)

    if process == 4:
        add p2_card1:
            xcenter 0.5-card_offset
            ycenter 1-0.12
            zoom zoom_factor
            at rotate_back(0.5)

回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|RenPy中文空间 ( 苏ICP备17067825号 | 苏公网安备 32092302000068号 )

GMT+8, 2020-11-24 17:49 , Processed in 0.031481 second(s), 12 queries , File On.

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

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