HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2019
1222
MIZUSHIKIHSP部屋に TimerRepeatモジュールを使用したサンプル を投稿しました!0解決


MIZUSHIKI

リンク

2019/12/22(Sun) 23:50:14|NO.89089

- HSP部屋 -
【TimerRepeatモジュール】ブロック崩しに追加エフェクト【公式sample改造】
http://hsproom.me/program/view/?p=296


TimerRepeatモジュールをHSP3Dishに対応させたので、HSP部屋に投稿してみました。

元は HSPコンテスト2019に投稿していた作品の同梱モジュールです。
https://dev.onionsoft.net/seed/info.ax?id=1821

エフェクト系のアニメーションが割と簡単に当てられるようになるのではないかと思います。
また、イージングを用いることでちょっとリッチな表現が可能になります。

ブロック崩しのメインゲーム部分はHSP公式のサンプルスクリプトを使わせて頂いてます。


ヘルプ等はコンテスト作品をダウンロード頂ければ大体書いてあります。
ただし、HSP3Dish版にするに当たり変更/追加した部分はこれから整備していく予定です。

イージングアニメーションについては、この記事に感銘を受けましてブロック崩しのエフェクトも部分的にパk・・・参考にしています。
https://note.com/syun77/n/nd796c574fa96


以下にHSP部屋に投稿したスクリプトを載せておきます。
(モジュールも書いてあるのでこのままエディタにコピペすれば動きます。)

#include "hsp3dish.as" // // mod_uniq.hsp - ver.1.0 by MIZUSHIKI // #ifndef uniq_start #define global uniq_start %tunique %i0 #define global ctype uniq(%1) %tunique %1@%p #define global uniq_end %tunique %o0 #endif // // mod_TimerRepeat.hsp - ver.1.2 by MIZUSHIKI // #ifndef timer_repeat #define global timer_repeat(%1=10,%2=-1,%3=0,%4=0) %t__timer _setTimerLabel@modTimerRepeat %1,%2,%3,*%i,%4 :goto *%i :*%p1 :uniq_start :if(_TimerRepeat_deinit_@modTimerRepeat<=1) { #define global timer_init %t__timer *%o : if(_TimerRepeat_init_@modTimerRepeat>=2) { #define global _init_end %t__timer if(_TimerRepeat_init_@modTimerRepeat==3) {goto *%i} } #define global timer_deinit } : if(_TimerRepeat_deinit_@modTimerRepeat>=1) { #define global _deinit_end } : if(_TimerRepeat_deinit_@modTimerRepeat<=1) { #define global timer_loop %t__timer } :uniq_end :return :*%o :_get_index@modTimerRepeat *%o #define global timer_break %t__timer _killTimerLabel_Label@modTimerRepeat *%p1 :return #define global timer_continue(%1=-1,%2=0) %t__timer _continueTimerCount_Label@modTimerRepeat *%p1,%1 :_continueTimerTimesReset_Label@modTimerRepeat *%p1,%2 :return #define global timer_cnt %t__timer _getTimerCnt_Label@modTimerRepeat(*%p1) #define global timer_setTimerSpeed(%1=__timer__id__@modTimerRepeat,%2=10) __timer__temp__@modTimerRepeat=%1 : _setTimerSpeed@modTimerRepeat __timer__temp__@modTimerRepeat,%2 #define global timer_kill(%1=__timer__id__@modTimerRepeat) __timer__temp__@modTimerRepeat=%1 : _killTimerLabel@modTimerRepeat __timer__temp__@modTimerRepeat #define global ctype timer_getTimerTime(%1=__timer__id__@modTimerRepeat) _get_timertime@modTimerRepeat(%1) #define global ctype timer_getTime timeGetTime@modTimerRepeat() #module modTimerRepeat ;#uselib "winmm.dll" ;#cfunc timeGetTime "timeGetTime" #defcfunc timeGetTime@modTimerRepeat #ifndef _HSP3DISH time24 = (gettime(4)*3600000+gettime(5)*60000+gettime(6)*1000+gettime(7)) if mae_time24 > time24 : dayCount++ mae_time24 = time24 return (86400000*dayCount + time24) #else getreq time24, SYSREQ_TIMER return time24 #endif #deffunc _setTimerLabel@modTimerRepeat int time, int num, int fcnt, label _label, int type label = _label if vartype(labels) != 1 { // 初期化処理 ldim labels,1 ;mref BMSCR_0,96 ;timer_hwnd = BMSCR_0.13 } //既に存在してing中だったら、typeに合わせて無効か終了か終了+再リピートか index = 0 repeat length.labels-1, 1 if lpeek(labels.cnt,0) == lpeek(label,0) :index=cnt :break loop if index!=0 { if ing(index) == 1 { switch type case 1 ://終了のみ timer_kill label return swbreak case 2 ://終了+再リピート timer_kill label swbreak default ://無効 return swend } }else { index = length.labels } nums(index) = num : if nums(index)<0 :nums(index)=-1 fcnts(index) = fcnt labels(index) = label cnts(index) = fcnt intervals(index) = time times(index) = timeGetTime() times_lastFire(index) = times(index) ing(index) = 1 engine(index) = usingEngine _TimerRepeat_init_=3 return #define global timer_fire(%1=1) _timer_fire %1 #deffunc _timer_fire int type nowTime = -1; = timeGetTime() foreach ing if ing(cnt) == 0 :continue if engine(cnt) != type :continue if nowTime==-1 : nowTime = timeGetTime() if nowTime - times_lastFire(cnt) >= intervals(cnt) :__timer__id__=cnt : times_lastFire(cnt)=nowTime : gosub *__timer__WaitLoop__@modTimerRepeat loop return *__timer__WaitLoop__@modTimerRepeat _TimerRepeat_deinit_=0 if nums(__timer__id__) != -1 { if cnts(__timer__id__)-fcnts(__timer__id__) >= nums(__timer__id__)-1 { _TimerRepeat_deinit_=1 if cnts(__timer__id__)-fcnts(__timer__id__) >= nums(__timer__id__) :return //もし最後超えても次が来たとき止める。 } } if cnts(__timer__id__) == fcnts(__timer__id__) :_TimerRepeat_init_=1 :else :_TimerRepeat_init_=0 _TimerRepeat_cnt_ = cnts(__timer__id__) : cnts(__timer__id__)++ gosub labels(__timer__id__) if _TimerRepeat_deinit_=1 :ing(__timer__id__)=0 return #deffunc _killTimerLabel_Label@modTimerRepeat label _label label = _label _killTimerLabel@modTimerRepeat label return #deffunc _killTimerLabel@modTimerRepeat var v if vartype(v)==1{ index = 0 repeat length.labels-1, 1 if lpeek(labels.cnt,0) == lpeek(v,0) :index=cnt :break loop if index=0 :return }else { index = v if index = 0 :return } if length(labels)<=index :return if ing(index) == 0 :return __timer__id__=index _TimerRepeat_deinit_=2 _TimerRepeat_cnt_ = cnts(index) gosub labels(index) ing(index) = 0 return #deffunc _AllKillTimerLabel onexit foreach ing ing(index) = 0 loop return #deffunc timer_setTimerEngine int type usingEngine = (type == 1) return #defcfunc _getNextFireTime@modTimerRepeat int type if type=1 : return mae_NFT ; _NFT = 2147483647 foreach ing if ing(cnt) == 0 :continue if _NFT > times_lastFire(cnt)+intervals(cnt) : _NFT = times_lastFire(cnt)+intervals(cnt) loop if _NFT == 2147483647 : return -1 mae_NFT = _NFT - timeGetTime() if mae_NFT<0 : mae_NFT=0 return mae_NFT #deffunc _setTimerSpeed@modTimerRepeat var v, int time if vartype(v)==1{ index = 0 repeat length.labels-1, 1 if lpeek(labels.cnt,0) == lpeek(v,0) :index=cnt :break loop if index=0 :return }else { index = v if index = 0 :return } if length(labels)<=index :return intervals(index) = time return #deffunc _continueTimerCount_Label@modTimerRepeat label _label, int count _continueTimerCount@modTimerRepeat _getc_index@modTimerRepeat(_label) return #deffunc _continueTimerCount@modTimerRepeat int i, int count if count == -1 { cnts(i) = _TimerRepeat_cnt_+1 }else { cnts(i) = count } return #deffunc _continueTimerTimesReset_Label@modTimerRepeat label _label, int bool _continueTimerTimesReset@modTimerRepeat _getc_index@modTimerRepeat(_label), bool return #deffunc _continueTimerTimesReset@modTimerRepeat int i, int bool if bool=0 :return times(i) = timeGetTime() return #defcfunc _getTimerCnt_Label@modTimerRepeat label _label return cnts( _getc_index@modTimerRepeat(_label) ) - 1 #deffunc _get_index@modTimerRepeat label _label label = _label index = 0 repeat length.labels-1, 1 if lpeek(labels.cnt,0) == lpeek(label,0) :index=cnt :break loop if index=0 :return mref st,64 st = index return #defcfunc _getc_index@modTimerRepeat label _label label = _label index = 0 repeat length.labels-1, 1 if lpeek(labels.cnt,0) == lpeek(label,0) :index=cnt :break loop if index=0 :return 0 return index #defcfunc _get_timertime@modTimerRepeat int _index if _index <= 0 :return -1 if length(labels)<=_index :return -1 if ing(_index) = 0 :return -1 return (timeGetTime@modTimerRepeat() - times@modTimerRepeat(_index)) #define global timer_ease(%1,%2,%3,%4,%5) if pChk@modTimerRepeat("%2"){dup _arA@modTimerRepeat,%2}else{vaA@modTimerRepeat=%2:dup _arA@modTimerRepeat,vaA@modTimerRepeat}:if pChk@modTimerRepeat("%3"){dup _arB@modTimerRepeat,%3}else{vaB@modTimerRepeat=%3:dup _arB@modTimerRepeat,vaB@modTimerRepeat} : _TimerRepeat_easing@modTimerRepeat %1,timeGetTime@modTimerRepeat(),times@modTimerRepeat(__timer__id__@modTimerRepeat),%4,%5 #define global geteaseWithTime(%1,%2,%3,%4,%5,%6,%7) vfunc@Variadic _param_kakunin,%3,%5 : _TimerRepeat_easing@modTimerRepeat %1,%2,%3,%4,%5 //関数に渡されたパラメータが変数か確認する #defcfunc pChk@modTimerRepeat str _chkStr chkStr = _chkStr chkStr = strtrim(chkStr,3) // uniq()だけ殻割する特殊仕様 if lpeek(chkStr,0)==1902734965 { ;uniq if wpeek(chkStr,3)==10353 { ;q( if peek(chkStr,strlen(chkStr)-1)=')' {;uniq(〜) chkStr = strmid(chkStr,5,strlen(chkStr)-6) chkStr = strtrim(chkStr,3) } } } flg = 0 repeat strlen(chkStr) if 'a'<=peek(chkStr,cnt)&&peek(chkStr,cnt)<='z' :flg=1 :continue if 'A'<=peek(chkStr,cnt)&&peek(chkStr,cnt)<='Z' :flg=1 :continue if peek(chkStr,cnt)=='_' :flg=1 :continue if peek(chkStr,cnt)=='@' :flg=1 :continue if flg=0 : break if '0'<=peek(chkStr,cnt)&&peek(chkStr,cnt)<='9' :continue flg = 0 : break loop return flg #deffunc _TimerRepeat_easing@modTimerRepeat array arZ, int _miriSecZ, int _miriSecA, int type, int _miriSec miriSec = _miriSec :if miriSec <= 0 :miriSec = 1 miriSecA = _miriSecA :if miriSecA < 0 :miriSecA = 0 miriSecZ = _miriSecZ :if miriSecZ < miriSecA :miriSecZ = miriSecA if length(_arA) != length(_arB) : return -1.0 dimtype arZ, vartype(_arB), length(_arB) repeat length(_arB) setease _arA(cnt), _arB(cnt), type if vartype(_arB) == 3 { arZ(cnt) = geteasef( miriSecZ-miriSecA, miriSec ) }else { arZ(cnt) = getease( miriSecZ-miriSecA, miriSec ) } loop per = 1.0*( miriSecZ-miriSecA ) / miriSec if ( per > 1.0 ) || ( per < 0.0 ) : per = 1.0 return per // // mod_waiton.hsp - ver.1.2 by MIZUSHIKI // #undef waiton #define global waiton(%1=100) :\ _waitTime_@modTimerRepeat = timeGetTime@modTimerRepeat() :\ whilecount=0:\ while 1 :\ _nokoriTime_@modTimerRepeat=%1-(timeGetTime@modTimerRepeat() - _waitTime_@modTimerRepeat)/10 :\ _nokoriTime_2@modTimerRepeat = _nokoriTime_@modTimerRepeat :\ if(_getNextFireTime@modTimerRepeat(0)!=-1 && _nokoriTime_2@modTimerRepeat>_getNextFireTime@modTimerRepeat(1)/10){ _nokoriTime_2@modTimerRepeat=_getNextFireTime@modTimerRepeat(1)/10 } :\ if(whilecount==0||_nokoriTime_2@modTimerRepeat>1){wait@hsp _nokoriTime_2@modTimerRepeat} :\ timer_fire 0 :\ if(_nokoriTime_@modTimerRepeat<=0){ _break } :\ whilecount++:\ wend :\ _awaitTime_@modTimerRepeat=timeGetTime@modTimerRepeat() #undef awaiton #define global awaiton(%1=0) :\ if(_awaitTime_@modTimerRepeat=0){ _awaitTime_@modTimerRepeat = timeGetTime@modTimerRepeat() } :\ whilecount=0:\ while 1 :\ _nokoriTime_@modTimerRepeat=%1-(timeGetTime@modTimerRepeat() - _awaitTime_@modTimerRepeat) :\ _nokoriTime_2@modTimerRepeat = _nokoriTime_@modTimerRepeat :\ if(_getNextFireTime@modTimerRepeat(0)!=-1 && _nokoriTime_2@modTimerRepeat>_getNextFireTime@modTimerRepeat(1)){ _nokoriTime_2@modTimerRepeat=_getNextFireTime@modTimerRepeat(1) } :\ if(whilecount==0||_nokoriTime_2@modTimerRepeat>1){await@hsp _nokoriTime_2@modTimerRepeat} :\ timer_fire 0 :\ if(_nokoriTime_@modTimerRepeat<=0){ _break } :\ whilecount++:\ wend :\ _awaitTime_@modTimerRepeat=timeGetTime@modTimerRepeat() #undef stopon #define global stopon :\ _awaitTime_@modTimerRepeat=0 :\ whilecount=0:\ while 1 :\ _nokoriTime_2@modTimerRepeat = 214748364 :\ if(_getNextFireTime@modTimerRepeat(0)!=-1){ _nokoriTime_2@modTimerRepeat=_getNextFireTime@modTimerRepeat(1) } :\ if(whilecount==0||_nokoriTime_2@modTimerRepeat>1){await@hsp _nokoriTime_2@modTimerRepeat} :\ timer_fire 0 :\ wend //await使いたくない人用 #undef stoponw #define global stoponw :\ _awaitTime_@modTimerRepeat=0 :\ while 1 :\ _nokoriTime_2@modTimerRepeat = 214748364 :\ if(_getNextFireTime@modTimerRepeat(0)!=-1){ _nokoriTime_2@modTimerRepeat=_getNextFireTime@modTimerRepeat(1)/10 } :\ if(whilecount==0||_nokoriTime_2@modTimerRepeat>1){wait@hsp _nokoriTime_2@modTimerRepeat} :\ timer_fire 0 :\ wend #undef wait #define global wait waiton #undef await #define global await awaiton #undef stop #define global stop stopon #global #endif ; ↑ ここまで タイマーリピートモジュール //////////////////////////////////////////////////////////////////////////////// ; ↓ ここから ゲームのスクリプト ; ; ブロック崩し(3) ; (ボール・バー・ブロック表示します) ; #cmpopt varname 1 timer_setTimerEngine 1 // 1=マニュアル, 0=オート x1=0:y1=0 ; 画面左上の座標 x2=ginfo_winx:y2=ginfo_winy ; 画面右下の座標 screen 0,x2,y2 title "ブロック崩し" buffer 1,x2,y2 //メニュー薄膜用のバッファ gsel 0 ;cls 4 effectFlg=1 *gstart clrflag=0 ; クリアフラグ blsize=16 ; ボールのサイズ blspd=10 ; ボールのスピード blx=200:bly=200 ; ボールの座標 bpx=4:bpy=4 ; XY方向のボール座標加算値 bk=0 ; ブロックを崩すフラグ(1=崩す) mblsize=-blsize barsize=64 ; バーのサイズ barx=240:bary=ginfo_winy-60 ; バーの座標 mae_barx=barx barhalf=barsize/2 blhalf=blsize/2 wx=0:wy=80 ; ブロックの表示開始位置(左上) wsx=10:wsy=6 ; ブロックの配置数(X,Y) wpx=x2/wsx:wpy=16 ; ブロック1個あたりのサイズ dim wall,wsx,wsy ; ブロックを表示するフラグ ; 0=表示、1=表示しない score = 0 gameflag = 0 // エフェクト フラグ ballFlg=1 kemuriFlg=1 flashFlg=0 barFlg=1 *main timer_fire // <- timer_setTimerEngine で マニュアル にした場合は、メインループ内で タイマー発動を確認・処理をする必要がある。 redraw 0 color 0+p_color,0,128:boxf color 0,255,255:pos 8,8:mes "SCORE:"+score ;gradf 0,0,x2,y2,1,0,128 ; 画面クリア ; バー : マウス座標から位置を決定 barx=mousex-barsize/2 color 255,255,255 if effectFlg=1 && barFlg=1 && abs(barx-mae_barx)>20 :p_barsz=5 if p_barsz!0 & abs(barx-mae_barx)<2 : gosub *bar_DaiIdo //縮小したバーサイズを元に戻すtimer_repeatを登録しに行く boxf barx,bary +p_barsz,barx+barsize,bary+16 -p_barsz mae_barx=barx stick key if key&64 { //Ctrlキー if menuFlg=0 { menuFlg=1 :gosub *menu_in //メニューinのtimer_repeatを登録しに行く }else :if menuFlg=1 { menuFlg=2 gosub *menu_out //メニューoutのtimer_repeatを登録しに行く } } if menuFlg { goto *main2 } if key&16 :effectFlg=1-effectFlg if gameflag { gosub *gameover if key&256 { ;if mousey<300 : goto *gstart } goto *main2 } ; ボール : X方向の移動 blx=blx+bpx if blx<=x1 : blx=x1 : bpx=-bpx : hanten=1 : gosub *ball_Hit //ボールヒット・エフェクトのtimer_repeatを登録しに行く if blx>=(x2-blsize) : blx=x2-blsize : bpx=-bpx : hanten=1 : gosub *ball_Hit //ボールヒット・エフェクトのtimer_repeatを登録しに行く ; ボール : Y方向の移動 bly=bly+bpy if bly<=y1 : bly=y1 : bpy=blspd : bk=1 : blspd=16 : hanten=1 : gosub *ball_Hit //ボールヒット・エフェクトのtimer_repeatを登録しに行く if bly>=(y2-blsize) : gameflag = 1 ; ボールとバーがぶつかったかどうか調べます coly=bly+blsize if (coly>=bary)&(bly<(bary+16)) { ; ボールY座標のチェック ; ボールX座標のチェック colx=blx+blhalf x=barx+barhalf if abs(colx-x)<(barhalf+blhalf) { ; 当たった hanten=0 gosub *ball_Hit //ボールヒット・エフェクトのtimer_repeatを登録しに行く bly=bary-blsize : bpy=-blspd i=(colx-x)/4 if i!=0 : bpx=i bk=1 if clrflag { dim wall,wsx,wsy ; ブロックを復活させる clrflag=0 } } } *main2 ; ブロックの処理 colx=wpx+bsize coly=wpy+bsize left=0 repeat wsy cy=cnt y=cnt*wpy+wy hsvcolor cnt*10,255,255 repeat wsx cx=cnt x=cnt*wpx+wx if wall(cx,cy)=0 { ; ブロックを表示 left++ boxf x,y,x+wpx-2,y+wpy-2 i=blx-x:j=bly-y if (i>=mblsize)&(i<colx)&(j>=mblsize)&(j<coly)&(bk) { ; 当たった hanten=0 gosub *ball_Hit //ボールヒット・エフェクトのtimer_repeatを登録しに行く wall(cx,cy)=1 bpy=-bpy bk=0 score+=wsy-cy } } loop loop ; ボールを表示 pos blx,bly:color 255,255,200 circle blx -p_blsz,bly -p_blsz,blx+blsize +p_blsz,bly+blsize +p_blsz ;font msgothic,blsize ;mes "●" ; 煙_表示 if kmrColor>0 { color kmrColor,kmrColor,128+kmrColor/2 foreach kmrx boxf kmrx(cnt)-2,kmry(cnt)-2, kmrx(cnt)+4,kmry(cnt)+4 loop } ; 文字_表示 color 200,200,258 pos x2/2-105,y2/2+50:mes "Space Key -> Effect",1 : if effectFlg : mes " ON" : else : mes " OFF" pos x2/2-105,y2/2+80 :mes "Ctrl Key -> Menu" ; メニュー_表示 if menuFlg { pos 0,0 gmode 3,,,120 gcopy 1,0,0,x2,y2 color 100,100,100 :boxf -200+pm1,100,0+pm1,130 : pos -150+pm1, 105 :color 255,255,255: mes "ball "+ballFlg +"  " color 100,100,100 :boxf -200+pm2,140,0+pm2,170 : pos -150+pm2, 145 :color 255,255,255: mes "kemuri "+kemuriFlg +"  " color 100,100,100 :boxf -200+pm3,180,0+pm3,210 : pos -150+pm3, 185 :color 255,255,255: mes "flash "+flashFlg +"  " color 100,100,100 :boxf -200+pm4,220,0+pm4,250 : pos -150+pm4, 225 :color 255,255,255: mes "bar "+barFlg +"  " if key&256 { if mousex<200 { if 100<=mousey && mousey<=130 : ballFlg=1-ballFlg if 140<=mousey && mousey<=170 : kemuriFlg=1-kemuriFlg if 180<=mousey && mousey<=210 : flashFlg=1-flashFlg if 220<=mousey && mousey<=250 : barFlg=1-barFlg } } } redraw 1 await 33 if left=0 : clrflag=1 goto *main *gameover color 255,255,255 pos x2/2-65,y2/2-20:mes " GAME OVER   \n\nClick -> New Game" return ;objsize 180,32 ;pos 150,330:button "終わり",*owari ;stop *owari end // timer_repeat登録用の gosub // *ball_Hit if effectFlg=0 :return ;//ボールサイズ if ballFlg { timer_repeat 20,,,2 timer_ease p_blsz,0,30,ease_shake_in,300 if refdval>=1.0 { timer_break } timer_deinit: //完了時の処理 p_blsz = 0 timer_loop } ;//煙 if kemuriFlg { timer_repeat 20,,,2 timer_init: //初期化処理 // timer_repeatの中ではuniq(変数)が使える。【他と被らないユニークな変数を使える】 uniq(blx)=blx+blhalf : uniq(bly)=bly+blhalf if hanten=0 { if bpy<0 { uniq(bly)-=blhalf uniq(kmrx)=uniq(blx)-15+rnd(10),uniq(blx)-5+rnd(10),uniq(blx)+15-rnd(10) uniq(kmry)=uniq(bly)+5+rnd(5),uniq(bly)+10+rnd(5),uniq(bly)+5+rnd(5) }else { ;uniq(bly)+=blhalf uniq(kmrx)=uniq(blx)-15+rnd(10),uniq(blx)-5+rnd(10),uniq(blx)+15-rnd(10) uniq(kmry)=uniq(bly)-5-rnd(5),uniq(bly)-10-rnd(5),uniq(bly)-5-rnd(5) } }else { if bpx>=0 { uniq(blx)-=blhalf uniq(kmry)=uniq(bly)-15+rnd(10),uniq(bly)-5+rnd(10),uniq(bly)+15-rnd(10) uniq(kmrx)=uniq(blx)+5+rnd(5),uniq(blx)+10+rnd(5),uniq(blx)+5+rnd(5) }else { uniq(blx)+=blhalf uniq(kmry)=uniq(bly)-15+rnd(10),uniq(bly)-5+rnd(10),uniq(bly)+15-rnd(10) uniq(kmrx)=uniq(blx)-5-rnd(5),uniq(blx)-10-rnd(5),uniq(blx)-5-rnd(5) } } _init_end //初期化処理の終わり timer_ease kmrColor,255,0,ease_quad_out,1000 foreach uniq(kmrx) timer_ease uniq(z),uniq(blx),uniq(kmrx)(cnt),ease_quartic_out,1000 kmrx(cnt) = uniq(z) timer_ease uniq(z),uniq(bly),uniq(kmry)(cnt),ease_quartic_out,1000 kmry(cnt) = uniq(z) loop if refdval>=1.0 { timer_break } timer_loop } ;背景 if flashFlg { timer_repeat 20,,,2 timer_ease p_color,128,0,ease_cubic_in,500 if refdval>=1.0 { p_color = 0 timer_break } timer_loop } return *bar_DaiIdo ;//バーサイズ timer_repeat 20 timer_ease p_barsz,5,0,ease_cubic_in,80 if refdval>=1.0 { timer_break } timer_deinit: //完了時の処理 p_barsz = 0 timer_loop return //メニュー in *menu_in // Menuボタンを時間ずらして順番に表示(進捗10%で次を開始) timer_repeat 20 timer_init : uniq(flg)=0 : _init_end // 初期化処理 timer_ease pm1,0,200,ease_quartic_out,500 ; 0.5秒かけて左(-200)からスライドイン(0) if refdval >= 1.0 :timer_break if refdval < 0.1 || uniq(flg)=1 :timer_continue ; 進捗0.1(10%)たったら1度だけ下の行に行って次のtimer_repeatを実行する(Menu2のスライドイン) uniq(flg)=1 timer_repeat 20 timer_init : uniq(flg)=0 : _init_end // 初期化処理 timer_ease pm2,0,200,ease_quartic_out,500 if refdval >= 1.0 :timer_break if refdval < 0.1 || uniq(flg)=1 :timer_continue uniq(flg)=1 timer_repeat 20 timer_init : uniq(flg)=0 : _init_end // 初期化処理 timer_ease pm3,0,200,ease_quartic_out,500 if refdval >= 1.0 :timer_break if refdval < 0.1 || uniq(flg)=1 :timer_continue uniq(flg)=1 timer_repeat 20 timer_init : uniq(flg)=0 : _init_end // 初期化処理 timer_ease pm4,0,200,ease_quartic_out,500 if refdval >= 1.0 :timer_break timer_loop timer_loop timer_loop timer_loop return //メニュー out *menu_out // Menuボタンを時間ずらして順番に表示(進捗10%で次を開始) timer_repeat 20 timer_init : uniq(flg)=0 : _init_end // 初期化処理 timer_ease pm1,200,0,ease_quartic_out,500 if refdval >= 1.0 :timer_break if refdval < 0.1 || uniq(flg)=1 :timer_continue uniq(flg)=1 timer_repeat 20 timer_init : uniq(flg)=0 : _init_end // 初期化処理 timer_ease pm2,200,0,ease_quartic_out,500 if refdval >= 1.0 :timer_break if refdval < 0.1 || uniq(flg)=1 :timer_continue uniq(flg)=1 timer_repeat 20 timer_init : uniq(flg)=0 : _init_end // 初期化処理 timer_ease pm3,200,0,ease_quartic_out,500 if refdval >= 1.0 :timer_break if refdval < 0.1 || uniq(flg)=1 :timer_continue uniq(flg)=1 timer_repeat 20 timer_init : uniq(flg)=0 : _init_end // 初期化処理 timer_ease pm4,200,0,ease_quartic_out,500 if refdval >= 1.0 : menuFlg=0 : timer_break timer_loop timer_loop timer_loop timer_loop return



この記事に返信する


ONION software Copyright 1997-2023(c) All rights reserved.