0

キャンバス上のパスに沿ってビットマップを移動しています。パスにはさまざまな曲線があり、ビットマップがそれに沿って続きます。pm.getMatrix は、PathMeasure.POSITION_MATRIX_FLAG と TANGENT_MATRIX_FLAG が渡されたときにパスに沿って位置と回転の調整を処理するという非常に優れた仕事をしますが、0,0 座標でピボットされたビットマップを回転させます。ビットマップの中心でピボットする必要があります。

デバッガーでマトリックスをクラックして開いたところ、実際にスプーンがないように見えます。ただし、float には 3 つの配列があり、それぞれに 3 つの float が含まれています。これらの値を取得できれば、おそらくそれらのどれがオブジェクトの回転を記述しているかを把握できると思います。おそらく、ピボットポイントを変更する方法があるでしょうか? 他に方法はありません...少なくともこれら3つのfloat配列が実際に何を記述しているかについてのガイダンスが欲しいです。

PathMeasure pm = new PathMeasure(playerPath, false);
float fSegmentLen = pm.getLength() / numSteps;
Matrix mxTransform = new Matrix();

pm.getMatrix(fSegmentLen * iCurStep, mxTransform,
                    PathMeasure.POSITION_MATRIX_FLAG + PathMeasure.TANGENT_MATRIX_FLAG );
canvas.drawBitmap(playerCar, mxTransform, null);
4

1 に答える 1

4

これを試して:

private void setDrawingMatrix(float distance) {
    pm.getMatrix(distance, mxTransform, PathMeasure.POSITION_MATRIX_FLAG | PathMeasure.TANGENT_MATRIX_FLAG);
    mxTransform.preTranslate(-playerCar.getWidth() / 2.0f, -playerCar.getHeight() / 2.0f);
}

そしてonDrawメソッドで:

canvas.drawBitmap(playerCar, mxTransform, null);

楽しいドライブ…

于 2013-06-04T21:52:07.530 に答える