增加移动端滑动手势事件适配

master
fantasticbin 2 years ago
parent e1dc2551e2
commit 39fbfdb72e

2
.gitignore vendored

@ -0,0 +1,2 @@
node_modules
package-lock.json

@ -51,7 +51,7 @@ npm run build
编译完成后使用浏览器打开dist目录下的`index.html`即可游玩; 编译完成后使用浏览器打开dist目录下的`index.html`即可游玩;
根据老师的例子优化部分逻辑,及增加食物刷新时与蛇身重叠规避的逻辑,欢迎提出意见或建议 根据老师的例子优化部分逻辑,及增加食物刷新时与蛇身重叠规避的逻辑,同时使用any-touch兼容移动端滑动手势事件欢迎提出意见或建议
#### **继续开发** #### **继续开发**

@ -1,7 +1,7 @@
{ {
"name": "snake", "name": "snake",
"version": "1.0.0", "version": "1.0.0",
"description": "", "description": "使用TypeScript + Webpack + Less实现贪吃蛇的例子",
"main": "index.js", "main": "index.js",
"scripts": { "scripts": {
"test": "echo \"Error: no test specified\" && exit 1", "test": "echo \"Error: no test specified\" && exit 1",
@ -14,6 +14,7 @@
"devDependencies": { "devDependencies": {
"@babel/core": "^7.18.2", "@babel/core": "^7.18.2",
"@babel/preset-env": "^7.18.2", "@babel/preset-env": "^7.18.2",
"any-touch": "^2.2.0",
"babel-loader": "^8.2.5", "babel-loader": "^8.2.5",
"clean-webpack-plugin": "^4.0.0", "clean-webpack-plugin": "^4.0.0",
"core-js": "^3.22.8", "core-js": "^3.22.8",

@ -1,6 +1,8 @@
import Snake from "./Snake"; import Snake from "./Snake";
import Food from "./Food"; import Food from "./Food";
import ScorePanel from "./ScorePanel"; import ScorePanel from "./ScorePanel";
import AnyTouch from "any-touch";
import type { AnyTouchEvent } from "any-touch";
/** /**
* *
@ -30,6 +32,12 @@ class GameController
{ {
// 绑定键盘事件,当按下 上/下/左/右 时改变蛇的行动方向 // 绑定键盘事件,当按下 上/下/左/右 时改变蛇的行动方向
document.addEventListener("keydown", this.keyDownHandle.bind(this)); document.addEventListener("keydown", this.keyDownHandle.bind(this));
// 使用any-touch绑定滑动手势事件
const page = document.querySelector("html") as HTMLElement;
const at = new AnyTouch(page);
at.on(["panup", "pandown", "panright", "panleft"], this.panHandle.bind(this));
this.snakeRun(); this.snakeRun();
} }
@ -58,6 +66,24 @@ class GameController
this.lastKeyDown = event.key; this.lastKeyDown = event.key;
} }
/**
*
* @param event
*/
protected panHandle(event: AnyTouchEvent): void
{
const keyMap = new Map();
keyMap.set("up", "ArrowUp");
keyMap.set("down", "ArrowDown");
keyMap.set("left", "ArrowLeft");
keyMap.set("right", "ArrowRight");
let keyboardEvent = new KeyboardEvent(event.direction, {
key: keyMap.get(event.direction)
});
this.keyDownHandle(keyboardEvent);
}
/** /**
* *
* @param x X * @param x X

@ -131,20 +131,20 @@ class Snake
let y = this.Y; let y = this.Y;
switch(this.direction) { switch(this.direction) {
case "ArrowUp" : case "ArrowUp":
case "Up" : case "Up":
y -= 10; y -= 10;
break; break;
case "ArrowDown" : case "ArrowDown":
case "Down" : case "Down":
y += 10; y += 10;
break; break;
case "ArrowLeft" : case "ArrowLeft":
case "Left" : case "Left":
x -= 10; x -= 10;
break; break;
case "ArrowRight" : case "ArrowRight":
case "Right" : case "Right":
x += 10; x += 10;
break; break;
} }

@ -9,6 +9,11 @@
box-sizing: border-box; box-sizing: border-box;
} }
// 页面最大化,用于滑动手势事件
html {
height: 100%;
}
// 页面公共样式 // 页面公共样式
body { body {
font: bold 20px "Courier"; font: bold 20px "Courier";

@ -3,6 +3,9 @@
"module": "ES2015", "module": "ES2015",
"target": "ES2015", "target": "ES2015",
"strict": true, "strict": true,
"noEmitOnError": true "removeComments": true,
"noImplicitAny": true,
"noEmitOnError": true,
"moduleResolution": "node"
} }
} }
Loading…
Cancel
Save