po 'di contesto:Android - Tela OnDraw con camara ingrandita seguenti movimenti dei personaggi
sto creando un gioco per Android che disegna un labirinto su una tela un'immagine di sfondo contro, questo utilizza un blocco quadrato e quindi il labirinto è sempre automtically ingrandito fino a 5 x 5 quadrati, di un labirinto che può essere 20 x 20. Il labirinto viene disegnato semplicemente scorrendo attraverso una serie di cicli for e quindi disegnando le linee nei luoghi pertinenti. Tutto funziona perfettamente, tuttavia ho un problema con il mio onDraw per funzionare senza intoppi. Ciò accade a causa del fatto che ogni volta che invalido devo rieseguire il look for ed eseguire varie istruzioni if per controllare le posizioni (sfortunatamente questo processo non può essere migliorato).
la domanda:
Sto cercando di riscrivere il modo in cui il mio labirinto viene disegnato sulla tela, di seguito sono le 3 caratteristiche principali che ho bisogno di implementare:
1 - Disegnare l'intero labirinto su la tela (questo è abbastanza facile) 2 - Zoom sul labirinto in modo che solo mostra il 5 x 5 3 - Spostare il personaggio (che è sempre al centro dello schermo) e disegnare la prossima seciton del labirinto
Ora come detto sopra disegnando l'intero labirinto è abbastanza facile e renderà il onDraw significativamente più veloce poiché non è necessario eseguire il ciclo for su invaldate, è possibile farlo una volta al primo caricamento del livello.
In termini di punto 2 & 3, il modo in cui vedo questo funzionamento è il carattere da disegnare nel mezzo della tela, quindi una telecamera con vista a volo d'uccello 2d da collegare/collegare al movimento dei personaggi. Questa fotocamera dovrebbe anche essere ingrandita in modo tale da visualizzare solo un 5 x 5 della griglia generale del labirinto. Quindi, mentre il personaggio si muove, la telecamera si muove con il personaggio e visualizza la sezione successiva del labirinto che è già stata disegnata. Ho provato alcune cose e ho fatto qualche ricerca, ma non ho mai lavorato prima con la tela e non ho idea di dove cominciare e se è possibile.
Quindi, per riassumere la parte principale della domanda è se il loro è un modo per collegare una telecamera vista birdseye a un personaggio che viene ingrandito e si sposta con l'immagine del personaggio.
Di seguito è riportato un frammento di come viene disegnato il labirinto, utilizzando 2 set di loop per il controllo su 2 set di array booleani [] [], che memorizzano semplicemente le linee verticale e horixaonl da disegnare.
@Override
protected void onDraw(Canvas canvas)
{
canvas.drawRect(0, 0, width, 100, background);
RectBackground.set(0,0, FullScreenWidth, FullScreenWidth);
canvas.drawBitmap(gameBackground, null, RectBackground, null);
for(int i = 0; i < 5; i++)
{
for(int j = 0; j < 5; j++)
{
float x = j * totalCellWidth;
float y = i * totalCellHeight;
indexY = i + currentY;
indexX = j + currentX;
// Draw Verticle line (y axis)
if (indexY < vLength && indexX < vLines[indexY].length && vLines[indexY][indexX])
{
RectOuterBackground.set((int)x + (int)cellWidth, (int)y, (int)x + (int)cellWidth + 15, (int)y + (int)cellHeight + 15);
canvas.drawBitmap(walls, null, RectOuterBackground, null);
}
// Draws Horizontal lines (x axis)
if (indexY < hLength && indexX < hLines[indexY].length && hLines[indexY][indexX])
{
RectOuterBackground.set((int)x, (int)y + (int)cellHeight,(int)x + (int)cellWidth + 15,(int)y + (int)cellHeight + 15);
canvas.drawBitmap(walls, null, RectOuterBackground, null);
}
}
}
}
devo anche aggiungere che il metodo OnDraw è tristemente incompleta. Se hai bisogno di vedere tutto funzionante, posso mandarti del codice. Ho scritto un'app che fa qualcosa di simile a quello che stai facendo con il labirinto. Disegna linee di quaderno e acquisisce la scrittura a mano da uno stilo. – mttdbrd
Domani darò un'occhiata a questo, potresti mandarmi una e-mail con il tuo codice completo in modo da poter vedere una versione funzionante. Grazie. –
Non ho idea di come inviare email alle persone tramite SO. Come si fa a farlo? – mttdbrd