我目前正在尝试学习javascript并执行以下教程(http://www.sitepoint.com/creating-a-simple-windows-8-game-with-javascript-input-and-sound/)但是我遇到了一个我无法解决的问题。
我创建了一个canvas元素,在画布上附加了三个侦听器,可以使用鼠标点击。
canvas.addEventListener("MSPointerUp", endAim, false);
canvas.addEventListener("MSPointerMove", adjustAim, false);
canvas.addEventListener("MSPointerDown", beginAim, false);
但我的功能永远不会在PointerUp或Down或Move上调用。 下面是有问题的函数,还要注意我已经完成了“console.log”调试..这些都没有记录到控制台,这就是为什么我认为事件没有被触发.. < / p>
function beginAim(event){
console.log("Aim ahoy");
if (playerTurn == 1) {
if (!isAiming) {
aimStart = new createjs.Point(event.x, event.y);
isAiming = true;
}
}
}
function adjustAim(event){
console.log("adjustAim event called");
if (isAiming) {
var aimCurrent = new createjs.Point(event.x, event.y);
aimVector = calculateAim(aimStart, aimCurrent);
//ToDo: write text / show aim arror
console.log("Aiming... " + aimVector.x + "/" + aimVector.y);
}
}
function endAim(event){
if (isAiming) {
console.log("endAim Function called");
isAiming = false;
var aimCurrent = new createjs.Point(event.x, event.y);
aimVector = calculateAim(aimStart, aimCurrent);
playerFire = true;
}
}
function calculateAim(start, end){
var aim = new createjs.Point(
(end.x - start.x) / 80,
(end.y - start.y) / 80);
aim.x = Math.min(MAX_SHOT_POWER, aim.x);
aim.x = Math.max(0, aim.x);
aim.y = Math.max(-MAX_SHOT_POWER, aim.y);
aim.y = Math.min(0, aim.y);
return aim;
}
感谢你们提出的任何帮助,我相信它也很简单。
我知道这将是一个简单的问题.MSPointerUp / Down / Move都适用于Windows8,这就是他们从未触发的原因。
我最终切换到mousedown,mouseup和mousemove以获得相同的结果。
答案 0 :(得分:1)
添加到正文或画布以将触摸事件路由到JavaScript:
body, canvas {
-ms-user-select: none;
touch-action: none;
}
然后,您需要创建一个MSGesture对象,将其目标设置为canvas,同时创建一个指针式侦听器:
var gesture = new MSGesture();
gesture.target = canvas;
canvas.addEventListener("pointerdown", beginAim, false)
if (event.type == "pointerdown") {
gesture.addPointer(e.pointerId);
return
}