サーバーからクライアントに300ミリ秒ごとにボールの座標を送信しています。動きをスムーズにするために、座標を補間する必要があります。コード(AS3)は次のとおりです。
private function run(event:Event):void
{
// Current frame ball position
var currentPosition:Point = new Point(this.x, this.y);
// Vector of the speed
_velocity = _destinationPoint.subtract(currentPosition);
// Interpolation
// Game.timeLapse - time from last package with coordinates (last change of destinationPoint)
// stage.frameRate - fps
_velocity.normalize(_velocity.length * 1000 / Game.timeLapse / stage.frameRate);
// If ball isn't at the end of the path, move it
if (Point.distance(currentPosition, _destinationPoint) > 1) {
this.x += _velocity.x;
this.y += _velocity.y;
} else {
// Otherwise (we are at the end of the path - remove listener from this event
this.removeEventListener(Event.ENTER_FRAME, run);
this.dispatchEvent(new GameEvent(GameEvent.PLAYER_STOP));
}
}
この問題は次の図で説明されています。
赤い点-目的地
黒い線-正規化せずにカレットポイントから宛先までの線
緑の点線-ボールのパス
移動をスムーズに、しかしより正確にする方法があるのではないでしょうか。