我正在为我的项目制作视频游戏,但我遇到了动画问题。基本上我正在做一个最终幻想风格的游戏,你的ATB酒吧充电,一旦它充满,你可以做一个技能。所以我在这里有3个功能。第一个是清除我的ATB栏,以便重置。这段代码有效。第二个是通过将DIV块移动到位来重新填充时间条。这也有效。第三个功能是我的攻击技能功能,除了它不按照我放置它们的顺序执行这两个动画功能之外,它也有效。
如果你看下面,你会发现我有代码首先运行清除ATB功能,然后运行时间条功能,希望每次我点击按钮它都会重置我的ATB。问题是,它完全忽略了FIRST功能并运行第二个功能。我尝试切换它们,同样的事情发生。所以基本上我被困在我的代码将始终忽略第一个并且如果我的两个动画函数都在代码中则操作第二个的位置。所以现在我对如何解决这个问题感到困惑,因为我希望两个代码都能正常工作。它们现在分开独立工作,但是当我将它们组合起来时,只有第二个注册。
// 5. ATB TIMEBAR FUNCTION
function clearTimeBar (el, color) { //Clears the bar
var elem = document.getElementById(el);
elem.style.transition = "width 0.0s, ease-in 0s";
elem.style.background = color;
elem.style.width = "0px"
}
function timeBar (el, color) { // Runs the animation
var elem = document.getElementById(el);
elem.style.transition = "width 6.0s, ease-in 0s";
elem.style.background = color;
elem.style.width = "289px";
}
// ATTACK SKILL
document.getElementById("attack").addEventListener('click', function(){
clearTimeBar('overlay','white'); // Clear the ATB bar
timeBar('overlay', 'blue'); // Run the ATB bar
var criticalRoll = Math.floor(Math.random() * 100 + 1);
var precisionRoll = Math.floor(Math.random() * cs.precision + 1);
var npcParryRoll = Math.floor(Math.random() * dragonstats.parry + 1);
var damage = Math.floor(Math.random() * cs.strength + 1);
if (precisionRoll < npcParryRoll) {
addMessage("The Dragon evaded your attack!");
return;
}
if (cs.critical >= criticalRoll) {
damage *= 2;
damage -= dragonstats.armor;
dragon.hp -= damage;
document.getElementById("npchp").innerHTML = dragon.hp;
addMessage("Critical Strike! Dragon suffers " + damage + " hp!")
}
else if (damage - dragonstats.armor <= 0) {
addMessage("Your opponents armor withstood your attack!");
}
else {
damage -= dragonstats.armor;
dragon.hp -= damage;
document.getElementById("npchp").innerHTML = dragon.hp;
addMessage("You hit the dragon for " + damage + " hp!");
}
});
答案 0 :(得分:1)
在clearTimeBar完成后运行你的timeBar函数。
window.setTimeout(function() { timeBar('overlay', 'blue') }, 1000/60);
或
window.requestAnimationFrame(function() { timeBar('overlay', 'blue') });