私はちょっとしたサイコロのゲームをやっています。 私がしていることは、サイコロのX回のスクラブルで、最終値に達するまでランダムな速度を遅くしていくことです。jQueryはsetTimeoutsを連鎖して約束します
しかし、私はダイス上でスクランブルを1ずつ実行したいと思います。私は2を持っていると想像してください。そして、後で私は少しズーム効果を行います。 私は約束を使ってこれを達成できると思っていたが、私のために働いていない、私は何が欠けているのか分からない。
ここでJSコードです:
var counter = 0.8;
var diceNumber = 0;
var rollDice = function(diceId){
var dfd = new $.Deferred();
$('#' + diceId).removeClass('idle');
counter *= 1.2;
diceNumber = Math.round(Math.random()*5) + 1;
$('#' + diceId).removeClass();
$('#' + diceId).addClass('dice_' + diceNumber);
if(counter < 800) {
timeout = setTimeout(rollDice, counter, diceId);
}else{
$('.winner').text(diceNumber);
$('#' + diceId).removeClass();
$('#' + diceId).addClass('animate');
$('#' + diceId).addClass('dice_' + diceNumber)
.animate({ zoom: '1.3' }, 200)
.animate({ zoom: '1' }, 100);
dfd.resolve();
return dfd.promise();
}
}
var startToDice = function() {
rollDice('dice_1').then(rollDice('dice_2'));
}
startToDice();
そして、何、それはやって終了すると同時に、両方のサイコロを実行しているが。
アドバイスはありますか?ありがとう。 bergiによってcomented
あなたの 'else'ブランチだけが約束を返しますか? – Bergi
その約束は常に同期的に解決されますか? – Bergi
'then'はコールの結果ではなくコールバック関数を期待しています! – Bergi