now
現在のコードの場合、ビューポートもアニメーション化する必要がある場合、抵抗が最も少ないパス(つまり、変更する必要のあるコードを少なくする方法)は、アニメーション中に描画関数に渡すことです。次に、@ jimjimmy1995の提案に従うことができます(変更を元に戻し、player.x
反対のworld.x
変更を行います)。
このフィドルは大まかな例を示しています(「下」キーの場合のみ)。詳細:
アニメーション中にビューポートが移動するかどうかを決定します。
var move = Math.round(playerY+1) - Math.floor(0.5 * vHeight) > vY;
now
関数をに渡しますdraw
(ビューポートが移動する場合のみ):
step: function(now) {
playerY = now;
draw(move ? now-start : 0);
}
ビューポートとプレーヤーのdraw
位置を調整します。
function draw(now) {
if ( !now )
now = 0;
...
theY = (y-now) * 32;
...
context.fillRect((playerX-vX)*32, (playerY-vY-now)*32, 32, 32);
空白スペースを補うために、「余分な」タイルを描画します(例では実装されていません)。
アニメーションが終了したら、now == 0
(例では実装されていません)を使用して再度描画します。
まだいくつかの不具合がありますが、将来の改善のベースとして役立つはずです。