スプライトって画面外に出せるのか。
座標がマイナス超えるから画面外に出したい場合、
素の状態の画面設定じゃ駄目なのかと勝手に勘違いしてた。
desmume で View OAM 確認してみたら縦は0〜255ピクセル、横は-256〜255でローテートするのね。
これ以外のローテート設定があるのかどうかは調べてないので知らない
(この程度の許容があれば十分事足りるし)。
おまけ
main.c
/*--------------------------------------------------------------------------------- sprite move test version 0.01 Apr 23, 2010 By REGEKATSU ---------------------------------------------------------------------------------*/ #include <stdio.h> #include <nds.h> #include "sprGfx.h" //--------------------------------------------------------------------------------- int main(void) { //--------------------------------------------------------------------------------- u16 *gfx; u32 kdr; int x = 0, y = 0; consoleDemoInit(); keysSetRepeat(6, 3); //initVideoMode videoSetMode(MODE_0_2D); //initVRAMBank vramSetBankA(VRAM_A_MAIN_SPRITE); //initOAM oamInit(&oamMain, SpriteMapping_1D_32, false); //allocateOAM gfx = oamAllocateGfx(&oamMain, SpriteSize_8x8, SpriteColorFormat_16Color); //initSpriteTiles dmaCopy(sprGfxTiles, gfx, sprGfxTilesLen); //initSpritePalette dmaCopy(sprGfxPal, SPRITE_PALETTE, sprGfxPalLen); printf("\x01b[0;0Hsprite move test\n\nversion 0.01\nApr 23, 2010\n\nBy REGEKATSU\n\n"); while(1){ swiWaitForVBlank(); //スプライト OAM の更新。 oamUpdate(&oamMain); printf("\x01b[10;0H\x01b[2KX = %d", x); printf("\x01b[11;0H\x01b[2KY = %d", y); scanKeys(); kdr = keysDownRepeat(); //スプライトを左へ移動する。 if(kdr & KEY_LEFT){ x--; //スプライトを右へ移動する。 }else if(kdr & KEY_RIGHT){ x++; } //スプライトを上へ移動する。 if(kdr & KEY_UP){ y--; //スプライトを下へ移動する。 }else if(kdr & KEY_DOWN){ y++; } oamSet(&oamMain, 0, x, y, 0, 0, SpriteSize_8x8, SpriteColorFormat_16Color, &gfx[1 * 16], -1, false, false, false, false, false); } } //---------------------------------------------------------------------------------