| 赞 | 58 |
| VIP | |
| 好人卡 | |
| 积分 | 12 |
| 经验 | |
| 最后登录 | 2023-5-29 |
| 在线时间 | 1017 小时 |
- 梦石
- 0
- 星屑
- 1232
- 在线时间
- 1017 小时
- 注册时间
- 2011-4-30
- 回帖
- 1464
|
发表于 2015-12-4 20:43:58
|
显示全部楼层
本帖最后由 汪汪 于 2015-12-4 20:45 编辑
[fold=鼠标加强手势]
[pre lang="javascript" file="ww_Gesture.js"]//=============================================================================
// ww_Gesture.js
//=============================================================================
/*:
* @plugindesc 鼠标加强手势
* @author wangwang
*
* @param jiange
* @desc 默认鼠标轨迹记录间隔
* @default 20
*
* @param fangshi
* @desc 默认判断方式 0 完全匹配 1,最后匹配 2 最前匹配 3 包含
* @default 0
*
* @param jishi
* @desc 是否即时判断? 0兼用,1即时,2之前
* @default 0
*
* @help
* 参考:
* FireGestures.uc.js
* 功能:
* 触摸上添加鼠标手势的判断
* 使用方法:
* TouchInput.Gesture(gt, fangshi,jishi )
* gt 是一个数组 ,包含手势信息,如[2,6,8,4] 下,右,上,左
* fangshi 判断的方式,
* 0 完全匹配 必须手势完全一致
* 1 最后匹配 必须最后的那部分手势完全一致
* 2 最前匹配 必须最前面的那部分手势完全一致
* 3 包含匹配 手势包含即可
* jishi 判断是否即时?
* 0 兼用 ,判断 正在绘制的手势或者之前绘制完的手势
* 1 即时 ,判断 正在绘制的手势
* 2 判断 ,判断 之前绘制完的手势
*/
(function() {
TouchInput.clear = function() {
//鼠标按下
this._mousePressed = false;
//屏幕按下
this._screenPressed = false;
//按下时间
this._pressedTime = 0;
//事件
this._events = {};
//事件 触发
this._events.triggered = false;
//事件 取消
this._events.cancelled = false;
//事件 移动
this._events.moved = false;
//事件释放
this._events.released = false;
//事件 轮x
this._events.wheelX = 0;
//事件 轮y
this._events.wheelY = 0;
//触发
this._triggered = false;
//取消
this._cancelled = false;
//移动
this._moved = false;
//释放
this._released = false;
//轮x
this._wheelX = 0;
//轮y
this._wheelY = 0;
this._x = 0;
this._y = 0;
//日期
this._date = 0;
//修改部分
this._Gesture_last_dChain = []
this._Gesture_directionChain = []
var jiange = parseInt(PluginManager.parameters("ww_Gesture")["jiange"], 10);
var fangshi = parseInt(PluginManager.parameters("ww_Gesture")["fangshi"], 10);
var jishi =parseInt(PluginManager.parameters("ww_Gesture")["jishi"], 10);
if (isFinite(jiange) && jiange > 0 )
{
this._Gesture_jiange = jiange
}else {
this._Gesture_jiange = 20
}
if (isFinite(fangshi) && [0,1,2].contains(fangshi) )
{
this._Gesture_fangshi = fangshi
}else {
this._Gesture_fangshi = 0
}
if (isFinite(jishi) && [0,1,2].contains(jishi) )
{
this._Gesture_jishi = jishi
}else {
this._Gesture_jishi = 0
}
};
TouchInput._onTrigger = function(x, y) {
this._events.triggered = true;
this._x = x;
this._y = y;
this._date = Date.now();
//修改部分
this.startGesture(x,y)
};
/**当取消 x,y
* @static
* @method _onCancel
* @param {Number} x
* @param {Number} y
* @private
*/
TouchInput._onCancel = function(x, y) {
this._events.cancelled = true;
this._x = x;
this._y = y;
//修改部分
this.stopGesture(x,y)
};
/**当移动 x,y
* @static
* @method _onMove
* @param {Number} x
* @param {Number} y
* @private
*/
TouchInput._onMove = function(x, y) {
this._events.moved = true;
this._x = x;
this._y = y;
//修改部分
this.progressGesture(x,y)
};
/**当释放
* @static
* @method _onRelease
* @param {Number} x
* @param {Number} y
* @private
*/
TouchInput._onRelease = function(x, y) {
this._events.released = true;
this._x = x;
this._y = y;
//修改部分
this.stopGesture(x,y)
};
//开始手势
TouchInput.startGesture = function (x,y) {
this._Gesture_lastX = x;
this._Gesture_lastY = y;
this._Gesture_last_dChain = []
this._Gesture_directionChain = [];
}
//进行手势
TouchInput.progressGesture = function (x,y) {
var x = x
var y = y
var lastX = this._Gesture_lastX
var lastY = this._Gesture_lastY;
var jiange = this._Gesture_jiange
//差值
var subX = x - lastX
var subY = y - lastY;
//差值的绝对值
var distX = (subX > 0 ? subX : (-subX))
var distY = (subY > 0 ? subY : (-subY));
var direction;
//如果差值绝对值小于间隔
if (distX < jiange && distY < jiange )
return;
// 如果 x 差值 > y 差值
if (distX > distY)
//方向左
direction = subX < 0 ? 4 : 6;
else
//方向上下
direction = subY < 0 ? 8 : 2;
//方向链
var dChain = this._Gesture_directionChain;
//如果方向 不等于 方向链 最后一个
if (direction != dChain[dChain.length - 1]) {
dChain.push(direction);
this._Gesture_directionChain = dChain
}
this._Gesture_lastX = x;
this._Gesture_lastY = y;
}
//停止手势
TouchInput.stopGesture = function (x,y) {
this._Gesture_last_dChain = this._Gesture_directionChain
this._Gesture_directionChain = [];
return this._Gesture_last_dChain
}
TouchInput.Gesture = function(gt,fangshi,jishi){
var jishi = jishi || this._Gesture_jishi
var fangshi = fangshi || this._Gesture_fangshi
var gesture;
var gesture2 ;
if ( jishi == 1 || jishi == 0){
gesture = this._Gesture_directionChain.clone()
gesture2= gt.clone()
if(gesture.join()!= "" && gesture2.join() != ""){
if (fangshi == 0){
if ( gesture.join() == gesture2.join()){
return true
}
}
if ( fangshi == 1 ){
gesture.reverse()
gesture2.reverse()
if( gesture.join().indexOf( gesture2.join()) == 0 ){
return true
}
}
if ( fangshi == 2 ){
if( gesture.join().indexOf( gesture2.join()) == 0 ){
return true
}
}
if ( fangshi == 3 ){
if( gesture.join().indexOf( gesture2.join()) >= 0 ){
return true
}
}
}
}
if (jishi == 2 || jishi == 0){
gesture = this._Gesture_last_dChain.clone()
gesture2= gt.clone()
if(gesture.join()!= "" && gesture2.join() != "" ){
if (fangshi == 0){
if ( gesture.join() == gesture2.join()){
return true
}
}
if ( fangshi == 1 ){
gesture.reverse()
gesture2.reverse()
if( gesture.join().indexOf( gesture2.join()) == 0 ){
return true
}
}
if ( fangshi == 2 ){
if( gesture.join().indexOf( gesture2.join()) == 0 ){
return true
}
}
if ( fangshi == 3 ){
if( gesture.join().indexOf( gesture2.join()) >= 0 ){
return true
}
}
}
}
return false
}
})();
[/pre]
[/fold] 参考的 FireGestures.uc.js
@墨凌羽 |
|