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

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`即可游玩;
根据老师的例子优化部分逻辑,及增加食物刷新时与蛇身重叠规避的逻辑,欢迎提出意见或建议
根据老师的例子优化部分逻辑,及增加食物刷新时与蛇身重叠规避的逻辑,同时使用any-touch兼容移动端滑动手势事件欢迎提出意见或建议
#### **继续开发**

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

@ -1,6 +1,8 @@
import Snake from "./Snake";
import Food from "./Food";
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));
// 使用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();
}
@ -58,6 +66,24 @@ class GameController
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

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

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

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