找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 8675|回复: 2

[教程] 如何在RenPy中实现一个摸♂香蕉?

[复制链接]
发表于 2020-3-4 23:47:49 | 显示全部楼层 |阅读模式

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

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

×
如题。懂的自然懂。
演示视频链接:
https://m.weibo.cn/detail/4461778387935005


基本原理其实就是之前那篇帖子里提到的研究更生动的imagebutton时的副产物。
既然能把imagebutton的idle和hover转换为python代码,用python代码控制动画,那么自然也可以弄各种条件判断、与全局变量勾连做出更有意思的效果。


一、首先定义一些图和变换,在这些变换中使用atl中的function语句调用了一些函数,与之前那篇帖子类似
[RenPy] 纯文本查看 复制代码
image cock = "cock.png"
# 控制cock显示的trans
transform trans_cock_show():
    "cock.png"
    function func_show_cock
# 控制idle情况下cock的trans
transform trans_normal_cock():
    trans_cock_show
    0.1
    repeat
# 控制hover情况下cock的trans
transform trans_touch_cock():
    trans_cock_show
    function func_touch_cock
    0.1
    repeat


二、实现上面说的这些函数
[RenPy] 纯文本查看 复制代码
init python:
    import math
    # 设置常量
    cock_value_max = 50
    cock_pop_value = 30
    cock_unpop_value = 20

    # 运行时状态
    cock_value = 0
    cock_state = False
    cock_xzoom = 1.0
    cock_traning = False
    mouse_pos = (0,0)

    def func_show_cock(trans, st, at):
        global cock_pop_value, cock_unpop_value
        global cock_state, cock_value, cock_xzoom, cock_traning
        trans.xzoom = cock_xzoom
        if cock_state == False:
            if cock_value >= cock_pop_value or cock_traning:
                cock_traning = True
                if trans.xzoom < 2.0:
                    trans.xzoom += 0.01
                    cock_xzoom = trans.xzoom
                    return 0
                cock_traning = False
                cock_state = True
        else:
            if cock_value <= cock_unpop_value or cock_traning:
                cock_traning = True
                if trans.xzoom > 1.0:
                    trans.xzoom -= 0.01
                    cock_xzoom = trans.xzoom
                    return 0
                cock_traning = False
                cock_state = False
        return None

    def cock_calm():
        global cock_value, cock_traning
        if cock_value > 0 and not cock_traning:
            cock_value -= 1

    def func_touch_cock(trans, st, at):
        global cock_value, mouse_pos
        now_mouse = renpy.get_mouse_pos()
        dist = math.sqrt(sum([(a - b)**2 for (a,b) in zip(mouse_pos,now_mouse)]))
        if dist > 5:
            cock_value += 1
            mouse_pos = now_mouse



三、完成界面部分
[RenPy] 纯文本查看 复制代码
screen CockScreen():
    default refresh_var = 0
    bar value cock_value range cock_value_max:
        xalign 0.5
        xsize 400
    text "[cock_value]":
        xalign 0.5
    imagebutton:
        xalign 0.5
        focus_mask True
        idle trans_normal_cock
        hover trans_touch_cock
        action SetScreenVariable("refresh_var",refresh_var)
    timer 0.1:
        action SetScreenVariable("refresh_var",refresh_var)
        repeat True
    timer 0.5:
        action cock_calm
        repeat True
    if cock_value >= cock_value_max:
        timer 0.1:
            action Return()

label start:

    call screen CockScreen
    "香蕉蛇了!"

    return


OK了。

这大概是这两天疯狂发帖的最后一个了(如果我没有什么漏掉的话)(漏掉了也不想写了)。

我发过的所有技术贴是这半年多来学习并实践RenPy在踩过很多坑后的一些成果(当然这半年多我远不止学了renpy)。
虽然估计没多少人看,没多少人能看懂,不过还是发出来,避免自己以后忘记了。
绝大部分都是为《罗曼圣诞探案集》或者这个游戏的主创apoto5写的。
因为寒假时学了更符合正统程序设计的通用的godot引擎,所以以后估计renpy会越用越少了,就算因为一些项目可能会时不时摸一下用一下,但心态上算是把这个引擎放下了。
希望能帮助到大家。
发表于 2020-3-5 09:33:45 | 显示全部楼层
非常感谢分享
回复 支持 抱歉

使用道具 举报

发表于 2020-3-5 14:13:43 | 显示全部楼层
;)
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-18 09:42 , Processed in 0.069198 second(s), 13 queries , File On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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