我正在计算玩家按住鼠标按钮的时间。我尝试了这个,但它不起作用:
var Game = cc.Layer.extend({
count: false,
countTimer: null,
init: function () {
var selfPointer = this;
this.canvas.addEventListener('mousedown', function(evt) {
selfPointer.count = true;
selfPointer.countTimer = window.setTimeout(selfPointer.Count(), 1);
});
this.canvas.addEventListener('mouseup', function(evt) {
selfPointer.count= false;
window.clearTimeout(selfPointer.countTimer);
});
},
Count: function() {
if (this.count)
{
window.setTimeout(this.Count(), 1);
}
}
这是我的代码的一部分(为了简洁起见),如果玩家按住按钮,我想在任何1毫秒内执行操作。
这不起作用,我认为这是一种比我的方式更好的方法。有什么想法吗?
答案 0 :(得分:2)
如果您要定位与HTML5兼容的新浏览器,那么您可以使用网络工作人员执行此类任务。只需在鼠标按下时向Web工作人员发送消息即可启动计时器。网络工作者可以每1毫秒发布一条消息,以触发您的游戏操作,然后在鼠标释放时,向网络工作人员发送另一条消息,告知其停止。
这里只是一个快速举例说明它是如何工作的。您需要从本地服务器运行才能让Web工作人员正常工作。
<强> Game.js 强>
function start() {
var worker = new Worker("ActionTrigger.js");
worker.addEventListener('message', function(objEvent) {
console.log("Holding");
});
worker.postMessage("start");
window.onmousedown = function() {
console.log("Mouse press");
worker.postMessage("startTrigger");
}
window.onmouseup = function() {
console.log("Mouse release");
worker.postMessage("endTrigger");
}
}
<强> ActionTrigger.js 强>
var trigger = false;
var interval = 1;
self.addEventListener('message', function(objEvent) {
if(objEvent.data == 'startTrigger')
trigger = true;
else if(objEvent.data == 'endTrigger')
trigger = false;
else if(objEvent.data == 'start')
timerCountdown();
});
function timerCountdown() {
if(trigger)
postMessage("");
setTimeout(timerCountdown,interval);
}
答案 1 :(得分:2)
为什么在这个简单的任务中使用超时?您可以获得mousedown的时间,mouseup的时间并计算它们的差异。无论如何,浏览器中的计时器分辨率小于1毫秒。阅读Nickolas Zakas的this article以获取有关时间分辨率的更多信息。
代码是:
var Game = cc.Layer.extend({
init: function () {
var holdStart = null,
holdTime = null;
this.canvas.addEventListener('mousedown', function(evt) {
holdStart = Date.now()
});
this.canvas.addEventListener('mouseup', function(evt) {
holdTime = Date.now() - holdStart;
// now in holdTime you have time in milliseconds
});
}
答案 2 :(得分:1)
您可以使用以下内容: http://jsfiddle.net/yE8sh/
//Register interval handle
var timer;
$(document).mousedown(function(){
//Starts interval. Run once every 1 millisecond
timer=self.setInterval(add,1);
});
$(document).mouseup(function(){
//Clears interval on mouseup
timer=window.clearInterval(timer);
});
function add(){
//The function to run
$("body").append("a");
}