#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