ここでは、キーを押さない限りボックスが常に下に移動するように「重力」を追加して、一番上の答えを構築しようとしています。
私は今数時間いじっています、そして私はそれを理解することができません。前のコードでは、css位置の上部と左側にある2つの変数をcalculateNewValue関数に送信します。
真/偽のキーが押された場合のこれら2つのテストを4つに分割し、上矢印が偽の場合に+1を追加するだけでよいと思いました。したがって、指示しない限り、ボックスは常に落下します。
ほぼ機能しますが、ボックスは真下ではなく、右下に移動します。そして重力はそのようには機能しません。
これは、ボックスを2方向に移動するために使用されている上下と関係があるはずです。しかし、イベントハンドラーが1つのキーのキーコードのみを格納している場合、他のすべてのテストはfalseを返しませんか?どうすれば正しく動かないようにできますか?
$(function(){
var pane = $('#pane'),
box = $('#box'),
maxValue = pane.width() - box.width(),
keysPressed = {},
distancePerIteration = 3;
function calculateNewValue(oldValue) {
var newValue = parseInt(oldValue, 10)
- (keysPressed[37] ? distancePerIteration : 0)
- (keysPressed[38] ? distancePerIteration : 0)
+ (keysPressed[39] ? distancePerIteration : 0)
+ (keysPressed[40] ? distancePerIteration : 1)
return newValue < 0 ? 0 : newValue > maxValue ? maxValue : newValue;
}
$(window).keydown(function(event) { keysPressed[event.which] = true; });
$(window).keyup(function(event) { keysPressed[event.which] = false; });
setInterval(function() {
box.css({
left: function(index ,oldValue) {
return calculateNewValue(oldValue);
},
top: function(index, oldValue) {
return calculateNewValue(oldValue);
}
});
}, 20);
});