Andengine: игра 15 и числовое движение изображения

Я установил al числовое изображение в сетке изображения, теперь проблема в том, как переместить числовое изображение с «модулем» 50 пикселей (размер сетки с одной ячейкой) только там, где есть свободная ячейка? Я использую Andengine, и каждое числовое изображение является спрайтом, и изображение сетки также является одним из них.

EDIT: я работаю следующим образом:

Я установил положение плитки с помощью этих двух функций:

private void getGrid()
{
    boolean end     =   false;
    Random random   =   new Random();

    int x = 0;
    while( ALDef.size() < 15 && x < 100 )
    {
        // Genera un numero a caso, da 1 a 15
        int numRandom       =   random.nextInt( 15 );

        System.out.println( x++ + ") Scelgo un numero RANDOM:" + numRandom );

        // il numero e' gia' presente in array?
        if ( !memory.contains( numRandom ) )
        {
            System.out.println( "ADD " + numRandom );
            // Non e' presente...
            ALDef.add( numRandom );
            memory.add( numRandom );
        }
        else
        {
            System.out.println( "ESISTE " + numRandom );
            memory.add( numRandom );
        }
    }

    System.out.println( "------------------------------" );
}

// ===========================================================
// Restituisce le coordinate
// ===========================================================
public HashMap getCoordinates( int numInArray )
{
    // Ottiene l'integer corrispondente a numInArray, ovvero il tasto
    Integer value       =   ALDef.get( numInArray );

    int row         =   0; // riga della tabella
    int position    =   0; // posizione
    // Definisce la riga
    if ( numInArray <= 3 )
    {
        row         =   0;
        position    =   3 - ( 3 - numInArray );
    }
    else if ( numInArray >= 4 && numInArray <= 7 )
    {
        row     =   1;
        position    =   numInArray - 4;
    }
    else if ( numInArray >= 8 && numInArray <= 11 )
    {
        row     =   2;
        position    =   numInArray - 8;
    }
    else if ( numInArray >= 12 && numInArray <= 15 )
    {
        row     =   3;
        position    =   numInArray - 12;
    }

    HashMap HM      =   new HashMap();
    HM.put( "btn" , value );
    HM.put( "x" , width * position );
    HM.put( "y" , height * row );

    System.out.println( "Colloco il numero " + ( value ) + " nella casella " + numInArray + "(ROW=" + row + ",POS=" + position + ")" );

    return HM;
}

Логика этих двух функций заключается в том, что getGrid помещает в ArrayList случайные числа (от 0 до 15), которые соответствуют изображению номера плитки. С помощью getCoordinates функция возвращает координату (в строке — 0, 1, 2, 3 — и в позиции — 0, 1, 2, 3) плитки для определения спрайта.


person Soul    schedule 23.10.2011    source источник
comment
Вы имеете в виду это?   -  person skyuzo    schedule 25.10.2011


Ответы (1)


Предполагая, что вы отслеживаете свои ячейки с помощью двумерного массива Cell[4][4] cells, вы можете инициализировать свои ячейки и получить emptyCellLocation = (emptyCell.row, emptyCell.col). Затем вы можете определить, какую ячейку вы хотите перетащить, и разрешить ей перемещаться только в emptyCellLocation. Убедитесь, что вы обновили emptyCellLocation.

person skyuzo    schedule 25.10.2011
comment
Я установил положение плитки с помощью скрипта, который я написал в первом посте, проверьте, пожалуйста. - person Soul; 26.10.2011
comment
Извините, я не могу следовать вашему коду. Я бы рассмотрел возможность введения таких объектов, как Tile и Grid. - person skyuzo; 26.10.2011