我一直用C编写简单的东西,现在我发现了一些更复杂的东西。
PVSNESLIB的这个程序从asm中定义的图像中获取模式,调色板和地图名称:
if pageNumber == 2 {
KeyboardViewController.showKeyboard()
}else{
KeyboardViewController.hideKeyboard()
}
使用以下示例函数在屏幕上显示它们:
patterns:
.incbin "RES/images/bkg1.pic"
patterns_end:
patterns1:
.incbin "RES/images/bkg2.pic"
patterns1_end:
palette:
.incbin "RES/images/bkg1.pal"
palette_end:
palette1:
.incbin "RES/images/bkg2.pal"
palette1_end:
map:
.incbin "RES/images/bkg1.map"
map_end:
map1:
.incbin "RES/images/bkg2.map"
map1_end:
;;; and so on...
下一个代码将显示"电影":
bgInitTileSet(0, &patterns, &palette, 0, (&patterns_end - &patterns), 256*2, BG_256COLORS, 0x0000);
bgInitMapSet(0, &map, (&map_end - &map),SC_32x32, 0x2000);
v++;
//&patterns_end - &patterns is the patterns size
//&map_end - &map is the map size
//0x0000 & 0x2000 are a vram addresses
答案 0 :(得分:0)
看,模式只是一个char,它不是一个数组。而patterns_end也只是一个字符。所以你只有两个字符,而不是字符的成功。 你可以做一个for循环,定义一个指向模式的指针,然后加1,直到这个aux指针的地址与patterns_end地址匹配。 像这样:
char *aux = &patterns;
char *pattern_vector;
int i;
for(i=0; aux!= (&patterns_end) ; i++) {
pattern_vector[i] = aux;
aux++; // Look that here, i am incrementing the address value
}
//Then, here you can use your array
看看它是否有效。如果我没有犯错(我很快就这么做了),那就应该了!
答案 1 :(得分:0)
我很抱歉,写完完整的代码我意识到我在PAT [v]中使用了错误的数字。
至少我学到了一些东西:
char *PAT0 = &patterns;
char *PAT[] = {&patterns,.......};
“PAT0”和“PAT [0]”将保持相同(正确)的地址。
谢谢大家。