スプライトが全く分からん。3


それとなく分かってきたです。
ピコピコとアニメーションさせてパッドで画面移動処理まで。


NDS sprite sample program.
piyo move test NDS


元ネタはkuran_kuranさんが昔書かれたファミコン用デモ。
多少の改変を含みつつC言語に起こしたものです。



piyo move test



案外覚えてるものですね。>6502アセンブラ
sbc の前に sec したり、adc の前に clc してる訳とか一瞬思い出せなかったのは秘密ですが。(ぉ


以下ソースです。
グラフィックリソースが無いとビルドできないのでごめんなさい。
スプライトはこんな感じで使うという参考になればと。
そのうち場所を確保してプロジェクトをアーカイブしてアップするつもりです。


一夜漬けもいいとこで正直な話、イマイチ分かってないです。
grit ファイルは akkera102 さんのを参考に(というかそのまま(爆))、
Makefile は example の simple のものを流用ですし(汗)。


main.c

/*---------------------------------------------------------------------------------

	NDS sprite sample program.
	piyo move test NDS
	
	Version 1.00
	Oct 26, 2009
	
	By.REGEKATSU

---------------------------------------------------------------------------------*/

#include <nds.h>

#include "piyo.h"


//SET_PIYO
u8 PiyoX = 0;
u8 PiyoY = 0;
u8 Offset = 0;
	
//Anime
u8 DirOff = 0;
u8 Anime = 0;
u8 AniCnt = 0;


//---------------------------------------------------------------------------------
int main(void) {
//---------------------------------------------------------------------------------
	
	int x, y;
	
	u16 *gfx;
	
	//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
	swiCopy(piyoTiles, gfx, piyoTilesLen / 2);
	
	//initSpritePalette
	swiCopy(piyoPal, SPRITE_PALETTE, piyoPalLen / 2);
	
	//initBGPalette
	BG_PALETTE[0] = RGB8(32, 0, 176);
	
	//initPiyo
	PiyoX = 112;
	PiyoY = 160;
	
	while(1) {
		
		//waitForVBlank
		swiWaitForVBlank();
		
		//updateOAM
		oamUpdate(&oamMain);
		
		
		//updateKeys
		scanKeys();
		
		if(keysHeld() & KEY_UP){
			PiyoY--;
			DirOff = 0;
		}
		
		if(keysHeld() & KEY_DOWN){
			PiyoY++;
			DirOff = 96;
		}
		
		if(keysHeld() & KEY_LEFT){
			PiyoX--;
			DirOff = 32;
		}
		
		if(keysHeld() & KEY_RIGHT){
			PiyoX++;
			DirOff = 64;
		}
		
		
		//animeCounter
		AniCnt++;
		if(AniCnt >= 16){
			AniCnt = 0;
			Anime = 16 - Anime;
		}
		
		
		//setPiyo
		Offset = Anime + DirOff;
		
		for(y = 0;y < 4;y++){
			for(x = 0;x < 4;x++){
				
				//setOAM
				oamSet(&oamMain, 
					x + (y * 4), 
					PiyoX + (x * 8), 
					PiyoY + (y * 8), 
					0, 
					0, 
					SpriteSize_8x8, 
					SpriteColorFormat_16Color, 
					&gfx[(Offset + x + (y * 4)) * 16 ],
					-1, 
					false, 
					false, 
					false, false, 
					false
				);
				
			}
		}
		
	}

}


piyo.grit

-gt
-gB4
-fts
-gu16