Bom, PALib morreu. E antes de morrer já era incompatível com as versões mais novas (da época) do DevKitPro.
Resolvi então tentar aprender a mexer só com o DevKitPro, que vai sendo atualizado e a biblioteca NDS não se torna incompatível.
Vamos então ao primeiro programa:
#include <nds.h>
#include <stdio.h>
void clearScreen(r, g, b) {
int i;
for (i = 0; i < 256*192; i++) VRAM_A[i] = RGB15(r, g, b);
}
int main(void)
{
int r = 0;
int g = 0;
int b = 0;
int down;
consoleDemoInit();
videoSetMode(MODE_FB0);
vramSetBankA(VRAM_A_LCD);
while(1)
{
scanKeys();
down = keysDown();
if (down & KEY_DOWN) {
r--;
if (r < 0) r = 0;
}
if (down & KEY_UP) {
r++;
if (r > 31) r = 31;
}
if (down & KEY_B) {
g--;
if (g < 0) g = 0;
}
if (down & KEY_X) {
g++;
if (g > 31) g = 31;
}
if (down & KEY_L) {
b--;
if (b < 0) b = 0;
}
if (down & KEY_R) {
b++;
if (b > 31) b = 31;
}
if (down & KEY_START) {
r = 0;
g = 0;
b = 0;
}
if (down & KEY_SELECT) {
r = 31;
g = 31;
b = 31;
}
clearScreen(r, g, b);
iprintf("\x1b[10;0H R = %02i\n", r);
iprintf(" G = %02i\n", g);
iprintf(" B = %02i\n", b);
swiWaitForVBlank();
}
return 0;
}
O programa acima mostra os dados RGB na tela de baixo e o resultado das cores na tela de cima. O comando consoleDemoInit diz que a tela de baixo vai ser um terminal texto. O comando videoSetMode(MODE_FB0)diz que a tela de cima vai ser frame buffer (são 256x192 pixels de 16 bits cada). O comando vramSetBankA(VRAM_A_LCD)aloca a memória usada pelo frame buffer.
O comando scanKeys deve ser rodado a cada loop para verificar o estado dos botões e da touch. A função keysDown é usada para ler o estado de cada botão somente se ele recém foi pressionado. Se eu quisesse pegar os botões que estão sendo mantidos apertados, o comando seria keysHeld e se quisesse os botões que foram recém soltos, o comando seria keysUp. O resultado da leitura dos botões deve ser "shifted" para ler os dados de cada botão individual. As informações de shift estão indexadas pelas seguntes constantes:
KEY_A = BIT(0),
KEY_B = BIT(1),
KEY_SELECT = BIT(2),
KEY_START = BIT(3),
KEY_RIGHT = BIT(4),
KEY_LEFT = BIT(5),
KEY_UP = BIT(6),
KEY_DOWN = BIT(7),
KEY_R = BIT(8),
KEY_L = BIT(9),
KEY_X = BIT(10),
KEY_Y = BIT(11),
KEY_TOUCH = BIT(12),
KEY_LID = BIT(13)
Por isso, para verificar se a seta para cima recém foi apertada, usei if (down & KEY_UP).
segunda-feira, julho 21, 2014
Assinar:
Postagens (Atom)