Box2Dweb でシミュレートされたボディと、ボディに添付された画像があります。体の変換行列を取得し、画像に変換を適用して (変換を使用して画像を描画)、画面上の位置と向き (相対) が体の位置と向きに一致するようにします。KineticJS の変換行列で使用する関数が見つかりません。移動と回転には別々の関数があり、Kinetic.Transform
内部に「行列」を保持するクラスがありますが、それをどうするかわかりません。どこかに関数もありますが、これも_setTransform
使い方がわかりません (アンダースコアは、直接呼び出してはならないことを示していますか?)。
このコードを使用して、プレーンな Javascript でボディに画像を描画しました。
function drawImageOverBody(context, body, image, scale)
{
context.save();
var pos = body.GetPosition();
var center = [scale*pos.x, scale*pos.y];
var R = body.GetTransform().R;
context.translate(center[0], center[1]);
context.transform(R.col1.x, R.col1.y, R.col2.x, R.col2.y, 0, 0);
context.translate(-center[0], -center[1]);
context.drawImage(image, center[0] - image.width/2.0, center[1] - image.height/2.0);
context.restore();
}
KineticJS で同じことを行うにはどうすればよいですか?
編集: どうやら、Box2d から取得できる唯一の変換は平行移動と回転です。これは、Box2d 本体でGetPosition()
とGetAngle()
を呼び出して取得し、 と で KineticJS イメージに適用しsetX(), setY()
ますsetRotation()
。したがって、ここではマトリックス形式での変換は必要ありません。それでも、好奇心旺盛です。