马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
如题。懂的自然懂。
演示视频链接:
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会越用越少了,就算因为一些项目可能会时不时摸一下用一下,但心态上算是把这个引擎放下了。
希望能帮助到大家。
|