设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 23154091|回复: 11
打印 上一主题 下一主题

【更新x2】鼠标优化及按钮v0.9

[复制链接]

Lv4.逐梦者

弓箭手?剑兰

梦石
0
星屑
5529
在线时间
833 小时
注册时间
2010-11-17
帖子
1140
跳转到指定楼层
1
发表于 2011-2-26 14:11:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 一箭烂YiJL 于 2011-5-15 17:11 编辑

版本前言:
这次更新是和DK的Phantom有关。
具体就是完成了Mouse.clip(x, y, width, height),
改写REG的.init,两个合并了,还有舍弃了class << Mouse用于alias update......
详细自己看工程。
几乎什么都搞定,只是那个Roll_Spriteset不愿搞了= =。

先是预览:


然后关于仿真按钮


其实这样的,仿真按钮源文件:


工程(包括锁匙.rgek):


之后就是手册(直接拿了工程的来):
  1. #==============================================================================
  2. # ■ 鼠标优化   by 一箭烂
  3. #------------------------------------------------------------------------------
  4. #   为鼠标作强化及美化的工作。
  5. #------------------------------------------------------------------------------
  6. # 使用说明:
  7. #
  8. #   强化部分使用:
  9. #
  10. #     key:
  11. #       (左键 Mouse::Left)   (右键 Mouse::Right)   (中键 Mouse::Middle)
  12. #
  13. #     Mouse.x = / Mouse.y =
  14. #       修改x坐标 / 修改y坐标
  15. #
  16. #     Mouse.area?(rect)
  17. #       判断鼠标是否在参数rect范围内
  18. #
  19. #     Mouse.up?(key)
  20. #       鼠标按键是否处在"松开"的瞬间,不输入参数,表示任意鼠标键
  21. #
  22. #     Mouse.down?(key)
  23. #       鼠标按键是否处在"按下"的瞬间,不输入参数,表示任意鼠标键
  24. #
  25. #     Mouse.click?(key)
  26. #       鼠标按键单击,按下再弹上
  27. #
  28. #     Mouse.double_click?(key)
  29. #       鼠标按键双击
  30. #
  31. #     Mouse.press?(key)
  32. #       鼠标按键是否处在"按下"的状态
  33. #
  34. #     Mouse.scroll
  35. #       返回鼠标滚轮的滚动值.1表示向前,-1表示向后,0表示未发生滚动
  36. #
  37. #     Mouse.move?(frame)
  38. #       返回鼠标某帧内的平均移动速度数字,不输入参数,表示判断是否移动(true/false)
  39. #
  40. #     Mouse.clip(x, y, width, height)
  41. #       锁死鼠标在指定区域范围内,省略参数时解除锁定
  42. #       (现在已经做好了)
  43. #
  44. #   美化部分使用:
  45. #
  46. #     Mouse.cursor([name, x, y, width, height, no, time])
  47. #       修改鼠标参数,对照表:
  48. #        - name        =>   鼠标档名
  49. #        - x           =>   按下位置x坐标
  50. #        - y           =>   按下位置y坐标
  51. #        - width       =>   每鼠标长度
  52. #        - height      =>   每鼠标高度
  53. #        - no          =>   动态鼠标数量
  54. #        - time        =>   动态时间(帧)
  55. #
  56. #     Mouse.Aft_Img = true/false
  57. #        残影模式:开启/关闭
  58. #
  59. #     Mouse.Aft_Img_chage
  60. #        残影模式:更变
  61. #
  62. #==============================================================================
  63. #==============================================================================
  64. # ■ (鼠标)按钮   by 一箭烂
  65. #------------------------------------------------------------------------------
  66. # 使用说明:
  67. #
  68. #   类方法:
  69. #
  70. #     Button.new(image[,x , y])
  71. #       image   : 处于Image\Button\下的文件名字
  72. #       x       : x坐标
  73. #       y       : y坐标
  74. #
  75. #   属性  :
  76. #
  77. #     function  : 方法,例如:"p 'string'"
  78. #
  79. #     其余的参数与对应的Mouse方法一样
  80. #
  81. #     set_click(key, function)
  82. #     set_double_click(key, function)
  83. #     set_double_down(key, function)
  84. #     set_scroll(key, function)
  85. #     set_area(function)
  86. #
  87. #     * 这两个属性谨Button类拥有
  88. #     set_move_out(function, speed, time)
  89. #       移出当范围时返回true
  90. #       speed:返回true的速度条件   time:平均移动速度的时间(帧),默认为5
  91. #
  92. #     set_press_out(key, function, speed, time)
  93. #       拖出当范围时返回true       key:默认为左键
  94. #       speed:返回true的速度条件   time:平均移动速度的时间(帧),默认为5
  95. #
  96. #     其余属性与Sprite一样
  97. #
  98. #==============================================================================
复制代码

本帖子中包含更多资源

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

x

点评

手快打错= =  发表于 2011-5-17 19:45
改写REG的.init,两个合并了,还有舍弃了class << Mouse用于alias update...... =》 RGE  发表于 2011-5-17 18:59
Davy(David?)  发表于 2011-2-26 19:48

评分

参与人数 3星屑 +1082 收起 理由
eve592370698 + 900 只能说辛苦了。
狐狸 + 6 表示非常神奇 又学到新思路和方法了.
DeathKing + 176 真勤快啊……我打算RGE2再完成的.

查看全部评分

Lv1.梦旅人

梦石
0
星屑
50
在线时间
462 小时
注册时间
2007-7-30
帖子
643
2
发表于 2011-2-26 19:50:27 | 只看该作者
很NICE~  
回复 支持 反对

使用道具 举报

Lv4.逐梦者

弓箭手?剑兰

梦石
0
星屑
5529
在线时间
833 小时
注册时间
2010-11-17
帖子
1140
3
 楼主| 发表于 2011-2-26 20:07:34 | 只看该作者
回复 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和射线模糊,对于写出发光字、背景等等比较困难。

评分

参与人数 1星屑 +300 收起 理由
eve592370698 + 300 我还以为是DKRM呢

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
462 小时
注册时间
2007-7-30
帖子
643
4
发表于 2011-2-26 21:19:50 | 只看该作者
移离跟脱离是一样的
你可以尝试记录前几步的pos
做计算(就像你写残影一样)

或者是移到 Button 之类的控件
由他来update就不用烦恼Mouse的部分了
RGE这万年大坑 啥时填起来@@

回复 支持 反对

使用道具 举报

Lv4.逐梦者

弓箭手?剑兰

梦石
0
星屑
5529
在线时间
833 小时
注册时间
2010-11-17
帖子
1140
5
 楼主| 发表于 2011-2-26 22:03:47 | 只看该作者
回复 david50407 的帖子

残影是update把当前坐标弄Sprite。速度是update里记录(100帧内的)pos然后计算平均速度。
如果用第一个方法有几个要注意:
1.还要记录press时候的坐标
2.还有要跟移动记录同一时间,也就是需要判断时略过空的数组内容
3.要判断press时候坐标和移动记录的匹配(好高的思维操作,暂时想不到怎么判断)
4.判断移离和拖离时开始记录press坐标?如果不是,随时之前做过的,现在马上return true了

如果采用方法二,的确是没什么可以担忧的,
但是Mouse就少了两个功能了。(不过其实Button类是没什么东西的,
目前主要功能是设置指令,把""去掉为一个指令执行)

如果从Mouse下手就尽量不要改变实例变量了,唯一方法就像第一个方法一样。

之后更大挑战的是以Roll_Spriteset(可滚动的类窗口)来管理Button类,
还有就是用鼠标挪移滚轮块和鼠标滚轮达到同比例滚上下。

点评

于是尝试简单Button方法。viewport的想法早就有,可是追求的是同比例。(鼠标滚轮是同一幅度)  发表于 2011-2-26 22:19
鼠标挪移滚轮块和鼠标滚轮达到同比例滚上下。是比较简单的 Roll_Spriteset 用 viewport 完成  发表于 2011-2-26 22:11
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1185
在线时间
1564 小时
注册时间
2008-7-30
帖子
4418

贵宾

6
发表于 2011-2-28 22:37:25 | 只看该作者
我也不能评价太多了……{:nm_9:}
因为自己这方面也没有做出啥贡献{:nm_7:}
大概……大概是我太懒了吧{:nm_6:}

点评

我是假期贡献~下次假期才有机会(对有机会而已)更新. 额~你这几句代表我写得很差吧~= =  发表于 2011-3-1 18:10
RGE2的话...就so化了吧 (笑  发表于 2011-2-28 22:59

See FScript Here:https://github.com/DeathKing/fscript
潜心编写URG3中。
所有对URG3的疑问和勘误或者建议,请移步至发布页面。
欢迎萌妹纸催更
回复 支持 反对

使用道具 举报

Lv4.逐梦者

弓箭手?剑兰

梦石
0
星屑
5529
在线时间
833 小时
注册时间
2010-11-17
帖子
1140
7
 楼主| 发表于 2011-3-2 22:11:52 | 只看该作者
仪式上顶一下。

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)
然而这样很麻烦...
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
462 小时
注册时间
2007-7-30
帖子
643
8
发表于 2011-3-2 23:25:25 | 只看该作者
学一下Viewport与Sprite的关系
  1. class Rollable
  2. ...
  3. end

  4. class Button < Rollable
  5. ...
  6. end
复制代码
然后Button#new(Roll_Spriteset)时自动向Roll_Spriteset注册
Roll_Spriteset记录并在Roll_Spriteset#Update时check stauts
set_click就还是由Button提供

点评

Rollable是啥? 那么update是Roll_Spriteset不是Button?(有点乱,不注册Roll_Spriteset是Button#update)  发表于 2011-3-3 17:36

评分

参与人数 1星屑 +20 收起 理由
一箭烂YiJL + 20 不错的方法~赞

查看全部评分

RGE这万年大坑 啥时填起来@@

回复 支持 反对

使用道具 举报

Lv4.逐梦者

弓箭手?剑兰

梦石
0
星屑
5529
在线时间
833 小时
注册时间
2010-11-17
帖子
1140
9
 楼主| 发表于 2011-5-15 17:12:39 | 只看该作者
因为更新,所以顶上来,不过也没有人用的了,
这次更新主要是为了DK的Phantom需要加入。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
49
在线时间
534 小时
注册时间
2011-9-12
帖子
136
10
发表于 2011-11-26 22:03:39 | 只看该作者
很不错的说!顶!
假期就像一卷卫生纸,看着挺长,扯着扯着就没了……
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-23 20:10

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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