回転2

スプライトの回転はBGと同様に設定します。PA~PDを操作する為、以下の関数を用意します。

void SpriteRotate(u32 num, s32 angle)
{
	OBJAFFINE* rot = (OBJAFFINE*)OAM + num;

	rot->pa =  GetCos(angle);
	rot->pb =  GetSin(angle);
	rot->pc = -GetSin(angle);
	rot->pd =  GetCos(angle);
}

スプライトの回転

#include "lib/gba.h"
#include "irq.arm.h"
#include "spr.h"
#include "math.h"

//---------------------------------------------------------------------------
int main(void)
{
	REG_WSCNT = 0x4317;

	IrqInit();
	SprInit();


	s32 x  = 240/2 - 64/2;
	s32 y  = 160/2 - 64/2;
	s32 angle = 0;

	SprSetSize (0, OBJ_SIZE(3), OBJ_SQUARE, OBJ_16_COLOR);
	SprSetChr  (0, 0);
	SprSetPal  (0, 0);
	SprSetXy(0, x, y);
	SprSetRotScale(0, 0, TRUE);

	for(;;)
	{
		VBlankIntrWait();

		SprSetRotate(0, angle);

		angle++;

		if(angle > 360)
		{
			angle = 0;
		}
	}
}

スプライトのサイズより大きい場合は見切れてしまいます。改善方法についてはダブルフラグを使ったdoc.22で対応済みです。

動作画面

1.png

履歴


添付ファイル: file1.png 24件 [詳細]

トップ   差分 履歴 リロード   一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2023-05-26 (金) 20:11:51