#author("2023-05-24T19:39:19+09:00","","")
#author("2023-05-26T20:11:51+09:00","","")
* 回転2 [#g3827f42]
スプライトの回転は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);
 }


** スプライトの回転 [#hfbb29e5]
 #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]]で対応済みです。
スプライトのサイズより大きい場合は見切れてしまいます。改善方法についてはダブルフラグを使った[[doc.22]]で対応済みです。

*** 動作画面 [#v076a07e]
#ref(1.png,nolink)

** 履歴 [#ifef40ab]
- 2023/05/06
- 2007/09/08

トップ   差分 履歴 リロード   一覧 検索 最終更新   ヘルプ   最終更新のRSS