找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 828|回复: 4

[求助] Drag组件的拖动问题和点击旋转怎么实现

[复制链接]
发表于 2022-11-29 12:11:13 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 优瑟尔·洛格因 于 2022-11-30 10:20 编辑

Drag文档链接


(答案出现。是7.5版本变更项,默认透明可拖拽,需要加遮罩)
1.拖拽范围的问题
拖拽句柄(handle)是一个子组件内的矩形。当鼠标进到拖拽句柄里的非透明像素上方时,就允许发生拖拽或点击。
文档描述鼠标会对非透明像素拖拽时,才会允许发生拖拽或点击。
实际情况是对图片非透明像素拖拽也会生效。
又有没办法让组件像文档描述的那样生效?

(答案出现,但不能使用py函数)
(另外,使用那个方法旋转图片会使一个draggable设置为False的组件重新可拖动。有函数来进行更多判断就好办了)
2.组件如何实现点击旋转
效果是每点击一次就旋转一个固定角度15°

[RenPy] 纯文本查看 复制代码
screen sc:
    draggroup:
        drag:
            drag_name "p1"
            child "p1.png"
            anchor(.5,.5)
            pos(.5,.5)
            #clicked ???


改写后的代码:
[RenPy] 纯文本查看 复制代码
default pic_1_rotate = 0
 
image pic_1:
    "gui/window_icon.png"
    rotate pic_1_rotate
 
screen sc:
    text str(pic_1_rotate)
    draggroup:
        drag:
            drag_name "p1"
            child "pic_1"
            focus_mask "pic_1"
            anchor(.5,.5)
            pos(.5,.5)
            clicked SetVariable("pic_1_rotate", (pic_1_rotate + 15) % 360)
 
label start:
    call screen sc
发表于 2022-11-30 09:43:47 | 显示全部楼层
图片透明部分可以拖拽的问题,应该是7.5/8.0版本的一个变更项:
The focus_mask style property now defaults to None for drag displayables. This improves performance, but means that the displayable can be dragged by transparent pixels.

在定义拖拽组件时,将 focus_mask 设置为显示内容相同的图片,应该就能满足楼主的需求。
回复 支持 1 抱歉 0

使用道具 举报

发表于 2022-11-29 16:29:03 | 显示全部楼层
本帖最后由 Lost 于 2022-11-29 18:21 编辑

1. 没看懂在说什么,我测试的结果是图片的透明部分是不可以drag的

2. 参考以下:
[RenPy] 纯文本查看 复制代码
default pic_1_rotate = 0

image pic_1:
    "gui/window_icon.png"
    rotate pic_1_rotate

screen sc:
    text str(pic_1_rotate)
    draggroup:
        drag:
            drag_name "p1"
            child "pic_1"
            anchor(.5,.5)
            pos(.5,.5)
            clicked SetVariable("pic_1_rotate", (pic_1_rotate + 15) % 360)

label start:
    call screen sc


不过我也有个问题,`clicked`后面跟python函数来控制`global`的变量反而不能让图片转起来,难道`SetVariable`或者说`SetField`有什么特别之处吗,确认过不是`restart_interaction`的问题,`__set_field`也只是普通的变量修改
回复 支持 1 抱歉 0

使用道具 举报

 楼主| 发表于 2022-11-29 17:32:04 | 显示全部楼层
本帖最后由 优瑟尔·洛格因 于 2022-11-29 22:35 编辑
Lost 发表于 2022-11-29 16:29
1. 没看懂在说什么,我测试的结果是图片的非透明部分是不可以drag的

2. 参考以下:

新建项目运行你的代码可用 感谢
但透明部分的拖拽问题仍然出现,使用的是renpy 7.5.3

你的问题我不能帮到,python函数今天才刚接触到
在Drag用例的一个帖子里存储变量的方法可能会有用
再次感谢
回复 支持 抱歉

使用道具 举报

 楼主| 发表于 2022-11-30 10:24:12 | 显示全部楼层
被诅咒的章鱼 发表于 2022-11-30 09:43
图片透明部分可以拖拽的问题,应该是7.5/8.0版本的一个变更项:
The focus_mask style property now defaul ...

完美!好用!
回复 支持 抱歉

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-2-28 01:18 , Processed in 0.041913 second(s), 16 queries , File On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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