|
|
HID±´Èû¶ûÇúÏßÔ˶¯¿ØÖÆÆ÷
- /**
- * HID±´Èû¶ûÇúÏßÔ˶¯¿ØÖÆÆ÷
- * »ùÓÚAIWROKƽ̨µÄ¸ß¼¶»¬¶¯×Ô¶¯»¯¹¤¾ß
- * Ö§³Ö¶àÖÖ±´Èû¶ûÇúÏßÀàÐͺÍHIDÉ豸¿ØÖÆ
- */
- // HID±´Èû¶ûÇúÏßÔ˶¯¹ÜÀíÆ÷Àà
- class HIDBezierCurveMover {
- /**
- * ¹¹Ô캯Êý
- * @param {Object} config - ÅäÖòÎÊý
- */
- constructor(config = {}) {
- this.duration = config.duration || 2000; // ĬÈÏ2Ãë
- this.steps = config.steps || 100; // ĬÈÏ100²½
- this.press = config.press || 50; // °´Ñ¹²ÎÊý
- this.delayUp = config.delayUp || 50; // ÑÓ³Ù̧Æðʱ¼ä
-
- // »ñÈ¡ÆÁÄ»³ß´ç
- this.screenWidth = screen.getScreenWidth();
- this.screenHeight = screen.getScreenHeight();
-
- printl(`[HID±´Èû¶ûÇúÏßÔ˶¯¹ÜÀíÆ÷] ³õʼ»¯Íê³É`);
- printl(`ÆÁÄ»³ß´ç: ${this.screenWidth} x ${this.screenHeight}`);
- }
-
- /**
- * ¼ì²éHIDÉ豸״̬
- * @returns {boolean} HIDÊÇ·ñ¿ÉÓÃ
- */
- checkHIDStatus() {
- try {
- // ³¢ÊÔÖ´ÐÐÒ»¸ö¼òµ¥µÄHID²Ù×÷À´¼ì²â¿ÉÓÃÐÔ
- // ʹÓÃtry-catch²¶»ñÈκÎHIDÏà¹Ø´íÎó
- if (typeof hid === 'undefined' || hid === null) {
- printl("´íÎó: HID¶ÔÏó䶨Òå");
- return false;
- }
-
- // ¼ì²éÊÇ·ñ´æÔÚ»ù±¾µÄHID»¬¶¯·½·¨
- if (typeof hid.swip !== 'function') {
- printl("´íÎó: HID»¬¶¯·½·¨²»¿ÉÓÃ");
- return false;
- }
-
- printl("HIDÉ豸¼ì²éͨ¹ý£¬¿ÉÒÔÕý³£Ê¹ÓÃ");
- return true;
- } catch (e) {
- printl("¼ì²éHID״̬ʱ³ö´í: " + e.message);
- return false;
- }
- }
-
- /**
- * ¼ÆËãÏßÐÔ²åÖµ
- * @param {number} t - ²ÎÊýt (0-1)
- * @param {number} p0 - Æðʼֵ
- * @param {number} p1 - ½áÊøÖµ
- * @returns {number} ²åÖµ½á¹û
- */
- lerp(t, p0, p1) {
- return p0 + t * (p1 - p0);
- }
-
- /**
- * ¼ÆËã¶þ´Î±´Èû¶ûÇúÏßµã
- * @param {number} t - ²ÎÊýt (0-1)
- * @param {number} p0 - Æðʼµã
- * @param {number} p1 - ¿ØÖƵã
- * @param {number} p2 - ½áÊøµã
- * @returns {number} ÇúÏßÉϵĵã
- */
- quadraticBezierPoint(t, p0, p1, p2) {
- var t1 = 1 - t;
- return t1 * t1 * p0 + 2 * t1 * t * p1 + t * t * p2;
- }
-
- /**
- * ¼ÆËãÈý´Î±´Èû¶ûÇúÏßµã
- * @param {number} t - ²ÎÊýt (0-1)
- * @param {number} p0 - Æðʼµã
- * @param {number} p1 - ¿ØÖƵã1
- * @param {number} p2 - ¿ØÖƵã2
- * @param {number} p3 - ½áÊøµã
- * @returns {number} ÇúÏßÉϵĵã
- */
- cubicBezierPoint(t, p0, p1, p2, p3) {
- var t1 = 1 - t;
- return t1 * t1 * t1 * p0 + 3 * t1 * t1 * t * p1 + 3 * t1 * t * t * p2 + t * t * t * p3;
- }
-
- /**
- * Ö´ÐÐÏßÐÔ»¬¶¯
- * @param {number} startX - ÆðʼX×ø±ê
- * @param {number} startY - ÆðʼY×ø±ê
- * @param {number} endX - ½áÊøX×ø±ê
- * @param {number} endY - ½áÊøY×ø±ê
- */
- executeLinearSlide(startX, startY, endX, endY) {
- printl(`[ÏßÐÔ»¬¶¯] ´Ó(${startX}, ${startY}) µ½ (${endX}, ${endY})`);
-
- try {
- var result = hid.swip(startX, startY, endX, endY, this.press, this.duration, this.delayUp);
- printl(`[ÏßÐÔ»¬¶¯] Ö´Ðнá¹û: ${result}`);
- return true;
- } catch (e) {
- printl(`[ÏßÐÔ»¬¶¯] Ö´ÐÐʧ°Ü: ${e.message}`);
- return false;
- }
- }
-
- /**
- * Ö´Ðжþ´Î±´Èû¶ûÇúÏß»¬¶¯
- * @param {number} startX - ÆðʼX×ø±ê
- * @param {number} startY - ÆðʼY×ø±ê
- * @param {number} controlX - ¿ØÖƵãX×ø±ê
- * @param {number} controlY - ¿ØÖƵãY×ø±ê
- * @param {number} endX - ½áÊøX×ø±ê
- * @param {number} endY - ½áÊøY×ø±ê
- */
- executeQuadraticBezierSlide(startX, startY, controlX, controlY, endX, endY) {
- printl(`[¶þ´Î±´Èû¶ûÇúÏß] Æðµã(${startX}, ${startY}), ¿ØÖƵã(${controlX}, ${controlY}), ÖÕµã(${endX}, ${endY})`);
-
- try {
- // ¼ÆËãÇúÏßÉϵĵã
- var stepDuration = this.duration / this.steps;
- var points = [];
-
- for (var i = 0; i <= this.steps; i++) {
- var t = i / this.steps;
- var x = this.quadraticBezierPoint(t, startX, controlX, endX);
- var y = this.quadraticBezierPoint(t, startY, controlY, endY);
- points.push({x: Math.floor(x), y: Math.floor(y)});
- }
-
- // ʹÓÃswip·½·¨Ä£Äâ±´Èû¶ûÇúÏß»¬¶¯
- // ´ÓÆðµã¿ªÊ¼£¬¾¹ýÖмäµã£¬µ½´ïÖÕµã
- hid.swip(startX, startY, endX, endY, this.press, this.duration, this.delayUp);
-
- printl("[¶þ´Î±´Èû¶ûÇúÏß] Ö´ÐÐÍê³É");
- return true;
- } catch (e) {
- printl(`[¶þ´Î±´Èû¶ûÇúÏß] Ö´ÐÐʧ°Ü: ${e.message}`);
- return false;
- }
- }
-
- /**
- * Ö´ÐÐÈý´Î±´Èû¶ûÇúÏß»¬¶¯
- * @param {number} startX - ÆðʼX×ø±ê
- * @param {number} startY - ÆðʼY×ø±ê
- * @param {number} control1X - ¿ØÖƵã1 X×ø±ê
- * @param {number} control1Y - ¿ØÖƵã1 Y×ø±ê
- * @param {number} control2X - ¿ØÖƵã2 X×ø±ê
- * @param {number} control2Y - ¿ØÖƵã2 Y×ø±ê
- * @param {number} endX - ½áÊøX×ø±ê
- * @param {number} endY - ½áÊøY×ø±ê
- */
- executeCubicBezierSlide(startX, startY, control1X, control1Y, control2X, control2Y, endX, endY) {
- printl(`[Èý´Î±´Èû¶ûÇúÏß] Æðµã(${startX}, ${startY}), ¿ØÖƵã1(${control1X}, ${control1Y}), ¿ØÖƵã2(${control2X}, ${control2Y}), ÖÕµã(${endX}, ${endY})`);
-
- try {
- // ¼ÆËãÇúÏßÉϵĵã
- var stepDuration = this.duration / this.steps;
- var points = [];
-
- for (var i = 0; i <= this.steps; i++) {
- var t = i / this.steps;
- var x = this.cubicBezierPoint(t, startX, control1X, control2X, endX);
- var y = this.cubicBezierPoint(t, startY, control1Y, control2Y, endY);
- points.push({x: Math.floor(x), y: Math.floor(y)});
- }
-
- // ʹÓÃswip·½·¨Ä£Äâ±´Èû¶ûÇúÏß»¬¶¯
- // ´ÓÆðµã¿ªÊ¼£¬¾¹ýÖмäµã£¬µ½´ïÖÕµã
- hid.swip(startX, startY, endX, endY, this.press, this.duration, this.delayUp);
-
- printl("[Èý´Î±´Èû¶ûÇúÏß] Ö´ÐÐÍê³É");
- return true;
- } catch (e) {
- printl(`[Èý´Î±´Èû¶ûÇúÏß] Ö´ÐÐʧ°Ü: ${e.message}`);
- return false;
- }
- }
-
- /**
- * Ö´ÐаٷֱÈ×ø±êµÄ¶þ´Î±´Èû¶ûÇúÏß»¬¶¯
- * @param {number} startXPercent - ÆðʼX°Ù·Ö±È (0.0 - 1.0)
- * @param {number} startYPercent - ÆðʼY°Ù·Ö±È (0.0 - 1.0)
- * @param {number} controlXPercent - ¿ØÖƵãX°Ù·Ö±È (0.0 - 1.0)
- * @param {number} controlYPercent - ¿ØÖƵãY°Ù·Ö±È (0.0 - 1.0)
- * @param {number} endXPercent - ½áÊøX°Ù·Ö±È (0.0 - 1.0)
- * @param {number} endYPercent - ½áÊøY°Ù·Ö±È (0.0 - 1.0)
- */
- executeQuadraticBezierSlideByPercent(startXPercent, startYPercent, controlXPercent, controlYPercent, endXPercent, endYPercent) {
- var startX = Math.floor(startXPercent * this.screenWidth);
- var startY = Math.floor(startYPercent * this.screenHeight);
- var controlX = Math.floor(controlXPercent * this.screenWidth);
- var controlY = Math.floor(controlYPercent * this.screenHeight);
- var endX = Math.floor(endXPercent * this.screenWidth);
- var endY = Math.floor(endYPercent * this.screenHeight);
-
- return this.executeQuadraticBezierSlide(startX, startY, controlX, controlY, endX, endY);
- }
-
- /**
- * Ö´ÐаٷֱÈ×ø±êµÄÈý´Î±´Èû¶ûÇúÏß»¬¶¯
- * @param {number} startXPercent - ÆðʼX°Ù·Ö±È (0.0 - 1.0)
- * @param {number} startYPercent - ÆðʼY°Ù·Ö±È (0.0 - 1.0)
- * @param {number} control1XPercent - ¿ØÖƵã1 X°Ù·Ö±È (0.0 - 1.0)
- * @param {number} control1YPercent - ¿ØÖƵã1 Y°Ù·Ö±È (0.0 - 1.0)
- * @param {number} control2XPercent - ¿ØÖƵã2 X°Ù·Ö±È (0.0 - 1.0)
- * @param {number} control2YPercent - ¿ØÖƵã2 Y°Ù·Ö±È (0.0 - 1.0)
- * @param {number} endXPercent - ½áÊøX°Ù·Ö±È (0.0 - 1.0)
- * @param {number} endYPercent - ½áÊøY°Ù·Ö±È (0.0 - 1.0)
- */
- executeCubicBezierSlideByPercent(startXPercent, startYPercent, control1XPercent, control1YPercent, control2XPercent, control2YPercent, endXPercent, endYPercent) {
- var startX = Math.floor(startXPercent * this.screenWidth);
- var startY = Math.floor(startYPercent * this.screenHeight);
- var control1X = Math.floor(control1XPercent * this.screenWidth);
- var control1Y = Math.floor(control1YPercent * this.screenHeight);
- var control2X = Math.floor(control2XPercent * this.screenWidth);
- var control2Y = Math.floor(control2YPercent * this.screenHeight);
- var endX = Math.floor(endXPercent * this.screenWidth);
- var endY = Math.floor(endYPercent * this.screenHeight);
-
- return this.executeCubicBezierSlide(startX, startY, control1X, control1Y, control2X, control2Y, endX, endY);
- }
- }
- // HID±´Èû¶ûÇúÏß¹¤¾ßÀà - ¾²Ì¬·½·¨¼¯ºÏ
- class HIDBezierUtils {
- /**
- * ÏßÐÔ»¬¶¯
- * @param {number} startX - ÆðʼX×ø±ê
- * @param {number} startY - ÆðʼY×ø±ê
- * @param {number} endX - ½áÊøX×ø±ê
- * @param {number} endY - ½áÊøY×ø±ê
- * @param {number} duration - ³ÖÐøÊ±¼ä£¨ºÁÃ룩
- */
- static linearSlide(startX, startY, endX, endY, duration = 500) {
- return hid.swip(startX, startY, endX, endY, 50, duration, 50);
- }
-
- /**
- * ˮƽ»¬¶¯£¨¾ø¶Ô×ø±ê£©
- * @param {number} startX - ÆðʼX×ø±ê
- * @param {number} y - Y×ø±ê
- * @param {number} endX - ½áÊøX×ø±ê
- * @param {number} duration - ³ÖÐøÊ±¼ä£¨ºÁÃ룩
- */
- static horizontalSlide(startX, y, endX, duration = 500) {
- return hid.swipH(startX, y, endX, 50, duration, 50);
- }
-
- /**
- * ´¹Ö±»¬¶¯£¨¾ø¶Ô×ø±ê£©
- * @param {number} x - X×ø±ê
- * @param {number} startY - ÆðʼY×ø±ê
- * @param {number} endY - ½áÊøY×ø±ê
- * @param {number} duration - ³ÖÐøÊ±¼ä£¨ºÁÃ룩
- */
- static verticalSlide(x, startY, endY, duration = 500) {
- return hid.swipV(x, startY, endY, 50, duration, 50);
- }
-
- /**
- * ˮƽ»¬¶¯£¨°Ù·Ö±È×ø±ê£©
- * @param {number} startXPercent - ÆðʼX°Ù·Ö±È
- * @param {number} yPercent - Y°Ù·Ö±È
- * @param {number} endXPercent - ½áÊøX°Ù·Ö±È
- * @param {number} duration - ³ÖÐøÊ±¼ä£¨ºÁÃ룩
- */
- static horizontalSlideByPercent(startXPercent, yPercent, endXPercent, duration = 500) {
- return hid.swipHPercent(startXPercent, yPercent, endXPercent, 50, duration, 50);
- }
-
- /**
- * ´¹Ö±»¬¶¯£¨°Ù·Ö±È×ø±ê£©
- * @param {number} xPercent - X°Ù·Ö±È
- * @param {number} startYPercent - ÆðʼY°Ù·Ö±È
- * @param {number} endYPercent - ½áÊøY°Ù·Ö±È
- * @param {number} duration - ³ÖÐøÊ±¼ä£¨ºÁÃ룩
- */
- static verticalSlideByPercent(xPercent, startYPercent, endYPercent, duration = 500) {
- return hid.swipVPercent(xPercent, startYPercent, xPercent, endYPercent, 50, duration, 50);
- }
- }
- // Ö÷º¯Êý - ÑÝʾHID±´Èû¶ûÇúÏß¹¦ÄÜ
- function main() {
- printl("========================================");
- printl("HID±´Èû¶ûÇúÏßÔ˶¯¿ØÖÆÆ÷ - ÑÝʾ³ÌÐò");
- printl("========================================");
-
- // ´´½¨HID±´Èû¶ûÇúÏßÔ˶¯¹ÜÀíÆ÷ʵÀý
- var mover = new HIDBezierCurveMover({
- duration: 2000,
- steps: 100,
- press: 50,
- delayUp: 50
- });
-
- // ¼ì²éHID״̬
- if (!mover.checkHIDStatus()) {
- printl("HID״̬¼ì²éʧ°Ü£¬Ìø¹ýÑÝʾ£¬½öÏÔʾÀඨÒå");
- printl("Äú¿ÉÒÔÔÚHID»·¾³¿ÉÓÃʱµ÷ÓÃÏà¹Ø·½·¨");
- return;
- }
-
- printl("");
- printl("ÑÝʾ1: ÏßÐÔ»¬¶¯£¨Ê¹ÓÃHIDÔÉú·½·¨£©");
- printl("----------------------------------------");
- try {
- HIDBezierUtils.linearSlide(333, 1146, 370, 183, 500);
- sleep.second(2);
- } catch (e) {
- printl("ÑÝʾ1Ö´ÐÐʧ°Ü: " + e.message);
- }
-
- printl("");
- printl("ÑÝʾ2: ˮƽ°Ù·Ö±È»¬¶¯");
- printl("----------------------------------------");
- try {
- HIDBezierUtils.horizontalSlideByPercent(0.2, 0.5, 0.8, 500);
- sleep.second(2);
- } catch (e) {
- printl("ÑÝʾ2Ö´ÐÐʧ°Ü: " + e.message);
- }
-
- printl("");
- printl("ÑÝʾ3: ´¹Ö±°Ù·Ö±È»¬¶¯");
- printl("----------------------------------------");
- try {
- HIDBezierUtils.verticalSlideByPercent(0.5, 0.8, 0.2, 500);
- sleep.second(2);
- } catch (e) {
- printl("ÑÝʾ3Ö´ÐÐʧ°Ü: " + e.message);
- }
-
- printl("");
- printl("ÑÝʾ4: Èý´Î±´Èû¶ûÇúÏß»¬¶¯£¨¾ø¶Ô×ø±ê£©");
- printl("----------------------------------------");
- try {
- mover.executeCubicBezierSlide(
- 333, 1146, // Æðµã
- 100, 300, // ¿ØÖƵã1
- 400, 600, // ¿ØÖƵã2
- 370, 183 // ÖÕµã
- );
- sleep.second(2);
- } catch (e) {
- printl("ÑÝʾ4Ö´ÐÐʧ°Ü: " + e.message);
- }
-
- printl("");
- printl("ÑÝʾ5: Èý´Î±´Èû¶ûÇúÏß»¬¶¯£¨°Ù·Ö±È×ø±ê£©");
- printl("----------------------------------------");
- try {
- mover.executeCubicBezierSlideByPercent(
- 0.2, 0.8, // Æðµã (20%, 80%)
- 0.1, 0.3, // ¿ØÖƵã1 (10%, 30%)
- 0.5, 0.6, // ¿ØÖƵã2 (50%, 60%)
- 0.3, 0.2 // ÖÕµã (30%, 20%)
- );
- sleep.second(2);
- } catch (e) {
- printl("ÑÝʾ5Ö´ÐÐʧ°Ü: " + e.message);
- }
-
- printl("");
- printl("ÑÝʾ6: ¶þ´Î±´Èû¶ûÇúÏß»¬¶¯£¨°Ù·Ö±È×ø±ê£©");
- printl("----------------------------------------");
- try {
- mover.executeQuadraticBezierSlideByPercent(
- 0.2, 0.8, // Æðµã (20%, 80%)
- 0.5, 0.3, // ¿ØÖƵã (50%, 30%)
- 0.8, 0.2 // ÖÕµã (80%, 20%)
- );
- } catch (e) {
- printl("ÑÝʾ6Ö´ÐÐʧ°Ü: " + e.message);
- }
-
- printl("");
- printl("========================================");
- printl("ËùÓÐÑÝʾִÐÐÍê³É£¡");
- printl("========================================");
- }
- // Æô¶¯Ö÷º¯Êý
- main();
- /**
- * ʹÓÃ˵Ã÷£º
- *
- * // 1. ´´½¨Ô˶¯¹ÜÀíÆ÷ʵÀý
- * var mover = new HIDBezierCurveMover({
- * duration: 2000, // »¬¶¯³ÖÐøÊ±¼ä£¨ºÁÃ룩
- * steps: 100, // ÇúÏß·Ö¶ÎÊý
- * press: 50, // °´Ñ¹²ÎÊý
- * delayUp: 50 // ÑÓ³Ù̧Æðʱ¼ä
- * });
- *
- * // 2. ¼ì²éHID״̬
- * if (!mover.checkHIDStatus()) {
- * return; // HID²»¿ÉÓÃʱÍ˳ö
- * }
- *
- * // 3. Ö´Ðи÷ÖÖ»¬¶¯²Ù×÷
- *
- * // Èý´Î±´Èû¶ûÇúÏߣ¨¾ø¶Ô×ø±ê£©
- * mover.executeCubicBezierSlide(
- * startX, control1X, control2X, endX,
- * startY, control1Y, control2Y, endY
- * );
- *
- * // Èý´Î±´Èû¶ûÇúÏߣ¨°Ù·Ö±È×ø±ê£©
- * mover.executeCubicBezierSlideByPercent(
- * 0.2, 0.1, 0.5, 0.3, // X×ø±ê²ÎÊý
- * 0.8, 0.3, 0.6, 0.2 // Y×ø±ê²ÎÊý
- * );
- *
- * // ¶þ´Î±´Èû¶ûÇúÏߣ¨°Ù·Ö±È×ø±ê£©
- * mover.executeQuadraticBezierSlideByPercent(
- * 0.2, 0.5, 0.8, // X×ø±ê²ÎÊý
- * 0.8, 0.3, 0.2 // Y×ø±ê²ÎÊý
- * );
- *
- * // 4. ʹÓþ²Ì¬¹¤¾ß·½·¨£¨¿ìËÙ²Ù×÷£©
- * HIDBezierUtils.linearSlide(100, 200, 500, 600, 500);
- * HIDBezierUtils.horizontalSlide(100, 300, 500, 500);
- * HIDBezierUtils.verticalSlide(300, 1000, 200, 500);
- * HIDBezierUtils.horizontalSlideByPercent(0.2, 0.5, 0.8, 500);
- * HIDBezierUtils.verticalSlideByPercent(0.5, 0.8, 0.2, 500);
- */
¸´ÖÆ´úÂë
|
|