0

私が取り組んでいるアプリケーションには、Android API サンプルのKubeアプリケーションを使用しています。

このサンプルは、27 個の小さな立方体から作成された OpenGL のルービック キューブのモデルを作成します。その後、立方体のランダムなレイヤーを回転させることにより、animate() メソッドで立方体がスクランブルされます。各回転の後、完全には理解できないプロセスでレイヤーがそれに応じて設定されます。

 // adjust mPermutation based on the completed layer rotation
             int[] newPermutation = new int[27];
             for (int i = 0; i < 27; i++) {
                newPermutation[i] = mPermutation[mCurrentLayerPermutation[i]];
 //                     newPermutation[i] = mCurrentLayerPermutation[mPermutation[i]];
             }
             mPermutation = newPermutation;
             updateLayers();

サンプルは正常に動作しますが、何らかの理由で回転の方向を true に変更すると、レイヤーが正しく更新されていないかのように、立方体が互いに重なり始めます。
助けていただければ幸いです:) キューブの重なり

4

1 に答える 1

2

私は自分で問題を解決したので、誰かが興味を持っている場合に備えて:
方向を true に変更すると、キューブが他の方向に回転します。これは、通常の方向に 3 回回転するようなものです。キューブを新しい場所に正しく保存するには、次のコードに示すように、新しい場所を 3 回保存します。

             if (mAngleIncrement < 0) { // checks the turning direction
             int[] newPermutation = new int[27];
             for (int i = 0; i < 27; i++) {
                newPermutation[i] = mPermutation[mCurrentLayerPermutation[i]];

             }
             mPermutation = newPermutation;
             updateLayers();
         }
         else {
             int[] newPermutation = new int[27];
             for (int i = 0; i < 27; i++) {
                 newPermutation[i] = mPermutation[mCurrentLayerPermutation[i]];
             }
             mPermutation = newPermutation;

             newPermutation = new int[27];
             for (int i = 0; i < 27; i++) {
                 newPermutation[i] = mPermutation[mCurrentLayerPermutation[i]];
             }
             mPermutation = newPermutation;

             newPermutation = new int[27];
             for (int i = 0; i < 27; i++) {
                 newPermutation[i] = mPermutation[mCurrentLayerPermutation[i]];
             }
             mPermutation = newPermutation;
             updateLayers();

         }
于 2012-03-05T13:50:53.887 に答える