Android Kube API Samples выходит из структуры - PullRequest
0 голосов
/ 04 марта 2012

Я использую приложение Kube из Android API Samples для приложения, над которым я работаю.

Образец создает модель кубика Рубика в OpenGL, состоящую из 27 маленьких кубиков. После этого куб скремблируется в методе 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, кубы начинают перекрывать друг друга, как будто слои не были обновлены правильно.
Помощь будет оценена :) Cubes overlapping

1 Ответ

2 голосов
/ 05 марта 2012

Я решил проблему сам, поэтому на случай, если кому-то будет интересно:
изменение направления на истинное заставляет куб вращаться в другом направлении, что похоже на вращение три раза в обычном направлении, поэтому для правильного сохранения в новом месте кубов мне нужно сохранить новое местоположение три раза, как видно из кода ниже :

             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();

         }
...