Project1
标题:
【更新x2】鼠标优化及按钮v0.9
[打印本页]
作者:
一箭烂YiJL
时间:
2011-2-26 14:11
标题:
【更新x2】鼠标优化及按钮v0.9
本帖最后由 一箭烂YiJL 于 2011-5-15 17:11 编辑
版本前言:
这次更新是和DK的Phantom有关。
具体就是完成了Mouse.clip(x, y, width, height),
改写REG的.init,两个合并了,还有舍弃了class << Mouse用于alias update......
详细自己看工程。
几乎什么都搞定,只是那个Roll_Spriteset不愿搞了= =。
先是预览:
[attach]48673[/attach]
然后关于
仿真按钮
:
[attach]48674[/attach]
其实这样的,仿真按钮源文件:
[attach]48675[/attach]
工程(包括锁匙.rgek):
[attach]56398[/attach]
之后就是手册(直接拿了工程的来):
#==============================================================================
# ■ 鼠标优化 by 一箭烂
#------------------------------------------------------------------------------
# 为鼠标作强化及美化的工作。
#------------------------------------------------------------------------------
# 使用说明:
#
# 强化部分使用:
#
# key:
# (左键 Mouse::Left) (右键 Mouse::Right) (中键 Mouse::Middle)
#
# Mouse.x = / Mouse.y =
# 修改x坐标 / 修改y坐标
#
# Mouse.area?(rect)
# 判断鼠标是否在参数rect范围内
#
# Mouse.up?(key)
# 鼠标按键是否处在"松开"的瞬间,不输入参数,表示任意鼠标键
#
# Mouse.down?(key)
# 鼠标按键是否处在"按下"的瞬间,不输入参数,表示任意鼠标键
#
# Mouse.click?(key)
# 鼠标按键单击,按下再弹上
#
# Mouse.double_click?(key)
# 鼠标按键双击
#
# Mouse.press?(key)
# 鼠标按键是否处在"按下"的状态
#
# Mouse.scroll
# 返回鼠标滚轮的滚动值.1表示向前,-1表示向后,0表示未发生滚动
#
# Mouse.move?(frame)
# 返回鼠标某帧内的平均移动速度数字,不输入参数,表示判断是否移动(true/false)
#
# Mouse.clip(x, y, width, height)
# 锁死鼠标在指定区域范围内,省略参数时解除锁定
# (现在已经做好了)
#
# 美化部分使用:
#
# Mouse.cursor([name, x, y, width, height, no, time])
# 修改鼠标参数,对照表:
# - name => 鼠标档名
# - x => 按下位置x坐标
# - y => 按下位置y坐标
# - width => 每鼠标长度
# - height => 每鼠标高度
# - no => 动态鼠标数量
# - time => 动态时间(帧)
#
# Mouse.Aft_Img = true/false
# 残影模式:开启/关闭
#
# Mouse.Aft_Img_chage
# 残影模式:更变
#
#==============================================================================
#==============================================================================
# ■ (鼠标)按钮 by 一箭烂
#------------------------------------------------------------------------------
# 使用说明:
#
# 类方法:
#
# Button.new(image[,x , y])
# image : 处于Image\Button\下的文件名字
# x : x坐标
# y : y坐标
#
# 属性 :
#
# function : 方法,例如:"p 'string'"
#
# 其余的参数与对应的Mouse方法一样
#
# set_click(key, function)
# set_double_click(key, function)
# set_double_down(key, function)
# set_scroll(key, function)
# set_area(function)
#
# * 这两个属性谨Button类拥有
# set_move_out(function, speed, time)
# 移出当范围时返回true
# speed:返回true的速度条件 time:平均移动速度的时间(帧),默认为5
#
# set_press_out(key, function, speed, time)
# 拖出当范围时返回true key:默认为左键
# speed:返回true的速度条件 time:平均移动速度的时间(帧),默认为5
#
# 其余属性与Sprite一样
#
#==============================================================================
复制代码
作者:
david50407
时间:
2011-2-26 19:50
很NICE~
作者:
一箭烂YiJL
时间:
2011-2-26 20:07
回复
david50407
的帖子
咱感动~
Davy是DK叫的。move_out和press_out(移离和拖离)没开放的原因是:
1.使用move_out和press_out时才开始判断
2.使用实例变量/开关判断,在Mouse的update里无法更新(rect太多可能性的缘故)
3.正因为是实例变量的关系,所以不能判断多于一个范围
虽然还勉强能用于一个范围,可是还是不建议使用。
而关于clip非常粗糙的原因是:
1.因为懒的关系,没有判断窗口外也弄鼠标回来
2.做法为直接控制坐标= =(所以做得好要dll)
关于移离和拖离,david(前辈)可否提出解决办法?
顺便还有要期待一下RGE核心2.0
(的强大功能及Mouse.clip、Mouse.move_out和Mouse.press_out)
顺便给2.0的意见,发现1.01的bitmap是没有blur和射线模糊,对于写出发光字、背景等等比较困难。
作者:
david50407
时间:
2011-2-26 21:19
移离跟脱离是一样的
你可以尝试记录前几步的pos
做计算(就像你写残影一样)
或者是移到 Button 之类的控件
由他来update就不用烦恼Mouse的部分了
作者:
一箭烂YiJL
时间:
2011-2-26 22:03
回复
david50407
的帖子
残影是update把当前坐标弄Sprite。速度是update里记录(100帧内的)pos然后计算平均速度。
如果用第一个方法有几个要注意:
1.还要记录press时候的坐标
2.还有要跟移动记录同一时间,也就是需要判断时略过空的数组内容
3.要判断press时候坐标和移动记录的匹配(好高的思维操作,暂时想不到怎么判断)
4.判断移离和拖离时开始记录press坐标?如果不是,随时之前做过的,现在马上return true了
如果采用方法二,的确是没什么可以担忧的,
但是Mouse就少了两个功能了。(不过其实Button类是没什么东西的,
目前主要功能是设置指令,把""去掉为一个指令执行)
如果从Mouse下手就尽量不要改变实例变量了,唯一方法就像第一个方法一样。
之后更大挑战的是以Roll_Spriteset(可滚动的类窗口)来管理Button类,
还有就是用鼠标挪移滚轮块和鼠标滚轮达到同比例滚上下。
作者:
DeathKing
时间:
2011-2-28 22:37
我也不能评价太多了……{:nm_9:}
因为自己这方面也没有做出啥贡献{:nm_7:}
大概……大概是我太懒了吧{:nm_6:}
作者:
一箭烂YiJL
时间:
2011-3-2 22:11
仪式上顶一下。
1.如果Roll_Spriteset是在类中的数组变量管理,外界push后会有两个Sprite。
2.如果Roll_Spriteset只是负责管理xy坐标,那么怎么上层控制?
或者用1.然后可以用"."的实力变量为数组控制,如:
a = Roll_Spriteset.new
a.Sprite_Array = [Button.new(arg)]
a.Sprite_Array[0].set_click(arg)
然而这样很麻烦...
作者:
david50407
时间:
2011-3-2 23:25
学一下Viewport与Sprite的关系
class Rollable
...
end
class Button < Rollable
...
end
复制代码
然后Button#new(Roll_Spriteset)时自动向Roll_Spriteset注册
Roll_Spriteset记录并在Roll_Spriteset#Update时check stauts
set_click就还是由Button提供
作者:
一箭烂YiJL
时间:
2011-5-15 17:12
因为更新,所以顶上来,不过也没有人用的了,
这次更新主要是为了DK的Phantom需要加入。
作者:
1370528656
时间:
2011-11-26 22:03
很不错的说!顶!
作者:
认真的学
时间:
2012-6-28 11:22
在刷新的时候Mouse.area?的判断没有考虑按钮是否有viewport。
这样获得的是相对坐标,判断的却是整个窗口的坐标。
所以得加上对viewport的判断,把相对坐标变成整个窗口的坐标。
作者:
summer92
时间:
2013-1-29 08:50
能不能回复
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1