NO.58371のは使う画像の数が3で割り切れないとおかしくなるのと
使うオブジェクト一つ増やして回転演出入れて修正
#include "hgimg3.as"
hgini
buf_selmax=15
repeat buf_selmax
buf_selid(cnt)=10+cnt
buffer buf_selid(cnt),512,512
fname_sel(cnt)=dir_exe+"\\hsptv\\sozai"+(cnt+1)+".jpg"
picload fname_sel(cnt),1
font "MS ゴシック",64
color 255
pos 64,32
mes (cnt+1)
loop
//使用するオブジェクト数
obj_selmax=4 //必ず偶数にする必要がある(停止中に画面に見えるのは偶数個だが回転中一時的に一つ多く必要になるので)
obj_r=(M_PI/2)/obj_selmax //45度をobj_selmax等分する
obj_posz=-70.0 //オブジェクトのカメラからの距離
obj_lry=obj_r*(obj_selmax/2-1) //一番左のオブジェクトの角度
obj_next_lry=obj_r*(obj_selmax/2) //次に一番左に来るオブジェクトの角度
obj_next_rry=obj_lry-obj_r*(obj_selmax-1) //次に一番右に来るオブジェクトの角度
getpos HGOBJ_CAMERA,cpx,cpy,cpz
repeat obj_selmax
gsel buf_selid(cnt)
settex 512,512
tex_selid(cnt)=stat
addplate m_pid(cnt),1,20,40,0,0,512,512,tex_selid(cnt)
regobj o_pid(cnt), m_pid(cnt)
setang o_pid(cnt),0.0,obj_lry-obj_r*cnt,0.0 //画面左側から右にずらしてく
getang o_pid(cnt),orx,ory,orz
fvset fv, 0.0,-ory, 0.0
fvdir fv, 0.0, 0.0, obj_posz
fvadd fv, cpx,cpy,cpz
setpos o_pid(cnt),fv,fv(1),fv(2)
loop
clscolor $4040
//一つ移動するフレーム数を指定
rotfps=20
//中央が1番目の画像になるように指定
start_index=-(obj_selmax/2-1)
*main
stick k,$f,0
if stim=0 {
if k=32 {gsel 0:screen 100,,,,ginfo_wx2,ginfo_wy1:picload fname_sel(center_index):title fname_sel(center_index)}
if k=1 {start_index=-1}
if k=4 {start_index=1}
if (start_index ! 0) { //start_indexが0になるまで回転
next_f=1
stim=rotfps
sel=start_index/abs(start_index) //回転方向設定
start_index-sel //start_indexを一つ減らす
}
}else{
if k=32 {stim=1} //回転演出カット
}
if next_f {//変更した
next_f=0
//左側に来るbuf_selidの要素数
buf_index=(buf_index+sel+buf_selmax)\buf_selmax //+buf_selmax)\buf_selmaxはbuf_indexがマイナスにならないようにしてる
center_index=(buf_index+(obj_selmax/2-1))\buf_selmax //中央に来る画像の要素数
//左側に来るオブジェクトIDが入ってる配列要素数
obj_index=(obj_index+sel+obj_selmax)\obj_selmax
if sel>0 {//左に回転
index=(obj_index+(obj_selmax-2))\obj_selmax//右側に来るオブジェクトIDの要素数
setang o_pid(index),0.0,obj_next_rry,0.0
getang o_pid(index),orx,ory,orz
fvset fv, 0.0,-ory, 0.0
fvdir fv, 0.0, 0.0, obj_posz
fvadd fv, cpx,cpy,cpz
setpos o_pid(index),fv,fv(1),fv(2)
gsel buf_selid((buf_index+(obj_selmax-2))\buf_selmax) //右側から次に出てくる画像のバッファIDを指定
settex 512,512,0,tex_selid(index) //右側に来るオブジェトが使用してるテクスチャを更新
}else{//右に回転
setang o_pid(obj_index),0.0,obj_next_lry,0.0//左側に来るオブジェクトIDの要素数(obj_index)
getang o_pid(obj_index),orx,ory,orz
fvset fv, 0.0,-ory, 0.0
fvdir fv, 0.0, 0.0, obj_posz
fvadd fv, cpx,cpy,cpz
setpos o_pid(obj_index),fv,fv(1),fv(2)
gsel buf_selid(buf_index) //左側側から次に出てくる画像のバッファIDを指定
settex 512,512,0,tex_selid(obj_index) //左側に来るオブジェトが使用してるテクスチャを更新
}
gsel 0
title ""+center_index+" "+fname_sel(center_index)
}
if stim {
stim--
if stim=0 {//回転終了
sel=0
repeat obj_selmax
index=((obj_index+cnt)\obj_selmax)
setang o_pid(index),0.0,obj_lry-obj_r*cnt,0.0
getang o_pid(index),orx,ory,orz
fvset fv, 0.0,-ory, 0.0
fvdir fv, 0.0, 0.0, obj_posz
fvadd fv, cpx,cpy,cpz
setpos o_pid(index),fv,fv(1),fv(2)
loop
}else{//回転処理
repeat obj_selmax
addang o_pid(cnt),0.0,(obj_r/rotfps)*sel,0.0
getang o_pid(cnt),orx,ory,orz
fvset fv, 0.0,-ory, 0.0
fvdir fv, 0.0, 0.0, obj_posz
fvadd fv, cpx,cpy,cpz
setpos o_pid(cnt),fv,fv(1),fv(2)
loop
}
}
hgdraw
hgsync 16
if k&128 : goto *owari
goto *main
*owari
end
回転停止中はオブジェクト一つが画面外にあるので
選択変更されたらそのオブジェクトのみテクチャを書き換えてる