我目前正在开发一个简单的 HTML5 游戏,您可以在以下 URL 进行测试:
http://frankcaron.com/simplegame/game.html
代码在这里:
https://github.com/frankcaron/Personal_HTML5_GamePrototype/blob/master/js/game.js
为了动画元素,我使用了一些 setIntervals。主游戏循环有一个 setInterval 可以正常工作。一些褪色元素也可以毫无问题地使用它们。我遇到的问题是点击动画。
我遇到的问题是,在 Safari 和某种程度上在 Chrome 中,点击事件和动画没有响应。不是每次都开火。我认为运行的并发间隔存在一些冲突。我不确定为什么。
我已经使用 requestAnimFrame 对 HTML5 动画的另一种方法进行了一些研究,但我认为这不会解决我的问题。
这是感兴趣的代码:
//Track mousedown
addEventListener('mousedown', function (e) {
//Safari Fix
e.preventDefault();
//If you click while the game is going, do your special move
performSpecial();
}
//Perform a special move
var performSpecial = function () {
switch(classType)
{
case 1:
//Class 1
break;
default:
//No class
renderExplosion();
}
}
//Render explosion special move
var renderExplosion = function () {
//Temp vars
var alpha = 1.0; // full opacity
var circleMaxRadius = 32;
fadeCircle = setInterval(function () {
ctx.beginPath();
ctx.arc(hero.x + 16, hero.y + 16, circleMaxRadius, 0, 2 * Math.PI, false);
ctx.lineWidth = 5;
ctx.strokeStyle = "rgba(255, 0, 0, " + alpha + ")";
ctx.stroke();
circleMaxRadius = circleMaxRadius + 5;
alpha = alpha - 0.05 ; // decrease opacity (fade out)
if (alpha < 0) {
clearInterval(fadeCircle);
}
}, 1);
};