123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- function KeyboardInputManager() {
- this.events = {};
- if (window.navigator.msPointerEnabled) {
- //Internet Explorer 10 style
- this.eventTouchstart = "MSPointerDown";
- this.eventTouchmove = "MSPointerMove";
- this.eventTouchend = "MSPointerUp";
- } else {
- this.eventTouchstart = "touchstart";
- this.eventTouchmove = "touchmove";
- this.eventTouchend = "touchend";
- }
- this.listen();
- }
- function one(){
-
- }
- KeyboardInputManager.prototype.on = function(event, callback) {
- if (!this.events[event]) {
- this.events[event] = [];
- }
- this.events[event].push(callback);
- };
- KeyboardInputManager.prototype.emit = function(event, data) {
- var callbacks = this.events[event];
- if (callbacks) {
- callbacks.forEach(function(callback) {
- callback(data);
- });
- }
- };
- KeyboardInputManager.prototype.listen = function() {
- var self = this;
- var map = {
- 38: 0, // Up
- 39: 1, // Right
- 40: 2, // Down
- 37: 3, // Left
- 75: 0, // Vim up
- 76: 1, // Vim right
- 74: 2, // Vim down
- 72: 3, // Vim left
- 87: 0, // W
- 68: 1, // D
- 83: 2, // S
- 65: 3 // A
- };
- // Respond to direction keys
- document.addEventListener("keydown", function(event) {
- var modifiers = event.altKey || event.ctrlKey || event.metaKey ||
- event.shiftKey;
- var mapped = map[event.which];
- if (!modifiers) {
- if (mapped !== undefined) {
- event.preventDefault();
- self.emit("move", mapped);
- }
- }
- // R key restarts the gameR键重新启动游戏
- if (!modifiers && event.which === 27) {
- self.restart.call(self, event);
- }else if (!modifiers && event.which === 13) {
- self.restart.call(self, event);
- }
- });
- // Respond to button presses
- // 响应按下按钮
- this.bindButtonPress(".retry-button", this.restart);
- this.bindButtonPress(".restart-button", this.restart);
- this.bindButtonPress(".keep-playing-button", this.keepPlaying);
- // Respond to swipe events响应滑动事件
- var touchStartClientX, touchStartClientY;
- var gameContainer = document.getElementsByClassName("game-container")[0];
- gameContainer.addEventListener(this.eventTouchstart, function(event) {
- if ((!window.navigator.msPointerEnabled && event.touches.length > 1) ||
- event.targetTouches > 1) {
- return; // Ignore if touching with more than 1 finger如果超过一个手指触摸,忽略
- }
- if (window.navigator.msPointerEnabled) {
- touchStartClientX = event.pageX;
- touchStartClientY = event.pageY;
- } else {
- touchStartClientX = event.touches[0].clientX;
- touchStartClientY = event.touches[0].clientY;
- }
- event.preventDefault();
- });
- gameContainer.addEventListener(this.eventTouchmove, function(event) {
- event.preventDefault();
- });
- gameContainer.addEventListener(this.eventTouchend, function(event) {
- if ((!window.navigator.msPointerEnabled && event.touches.length > 0) ||
- event.targetTouches > 0) {
- return; // Ignore if still touching with one or more fingers如果仍用一个或多个手指触摸,则忽略
- }
- var touchEndClientX, touchEndClientY;
- if (window.navigator.msPointerEnabled) {
- touchEndClientX = event.pageX;
- touchEndClientY = event.pageY;
- } else {
- touchEndClientX = event.changedTouches[0].clientX;
- touchEndClientY = event.changedTouches[0].clientY;
- }
- var dx = touchEndClientX - touchStartClientX;
- var absDx = Math.abs(dx);
- var dy = touchEndClientY - touchStartClientY;
- var absDy = Math.abs(dy);
- if (Math.max(absDx, absDy) > 10) {
- // (right : left) : (down : up)
- self.emit("move", absDx > absDy ? (dx > 0 ? 1 : 3) : (dy > 0 ? 2 : 0));
- }
- });
- };
- KeyboardInputManager.prototype.restart = function(event) {
- event.preventDefault();
- this.emit("restart");
- };
- KeyboardInputManager.prototype.keepPlaying = function(event) {
- event.preventDefault();
- this.emit("keepPlaying");
- };
- KeyboardInputManager.prototype.bindButtonPress = function(selector, fn) {
- var button = document.querySelector(selector);
- button.addEventListener("click", fn.bind(this));
- button.addEventListener(this.eventTouchend, fn.bind(this));
- };
|