読者です 読者をやめる 読者になる 読者になる

スプライトって画面外に出せるのか。


座標がマイナス超えるから画面外に出したい場合、
素の状態の画面設定じゃ駄目なのかと勝手に勘違いしてた。
desmume で View OAM 確認してみたら縦は0〜255ピクセル、横は-256〜255でローテートするのね。
これ以外のローテート設定があるのかどうかは調べてないので知らない
(この程度の許容があれば十分事足りるし)。


sprmove


おまけ


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);
		
	}
	
}

//---------------------------------------------------------------------------------