「ミント→アイドル」に名前を変更しますので、これからもよろしくです。
さて、本題ですが「hgimg3.as」を使用すると処理落ちしてしまい困っております。
「hgimg3.as」を使っている理由は、「音を複数出す、ポーズ解除すると音を途中から再生」の2つができるので使っております。
ソースは下記になりますが、画像ないとわからないと思うので、自分のうpローダーに実行出来る状態をあげておきます。
http://ux.getuploader.com/UGI_55/download/41/hgimg3.as%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B%E3%81%A8%E5%87%A6%E7%90%86%E8%90%BD%E3%81%A1.zip
自機ショットを打つと背景がかくかくします。
FPSを見ると下がっていないようですが、処理落ちしてしまうのは何か原因があるのでしょうか?
「hgimg3.as」を入れない状態だと、ショットを打ちながら動いても処理落ちしないので、
「hgimg3.as」が原因なのかな?って気がしますが、「hgimg3.as」は使えると思うので私の処理に問題あるのでしょうか。
(「hgimg3.as」をオフにする場合、()の内容を実施すると適応できます)
#include "hgimg3.as" ;音のために入れる(ここをコメントアウト) #include "d3m.hsp" ;FPSを調べるために入れる screen 0,610,480 ;自機 buffer 1 picload "自機修正.bmp" buffer 90 picload "マップ.bmp" ;でかい妖精 buffer 30 picload "敵.bmp" buffer 31 picload "青い弾.bmp" gsel 0,1 ;自機 JIKI_x = 206 : JIKI_y = 390;座標 JIKI_Spd = 4 ;スピード ;自機弾 JKTM_MAX = 50 ;自機弾の最大数(50) dim JKSO_f,JKTM_MAX;フラグ dim JKSO_x,JKTM_MAX ;X dim JKSO_y,JKTM_MAX ;Y ;■■■■■■■敵■■■■■■■■ ;敵 TK_MAX = 5 ;敵の最大数(5) dim TK_f,TK_MAX ;フラグ dim TK_x,TK_MAX ;X dim TK_y,TK_MAX ;Y ;敵弾 dim TM_f,TK_MAX ;フラグ ddim TM_x,TK_MAX;X ddim TM_y,TK_MAX;Y dim TMxv,TK_MAX ;ベクトルX dim TMyv,TK_MAX ;ベクトルY dim TM_TAIM,TK_MAX;弾の出るカウント dmmini ;dmmを初期化(ここをコメントアウト) dmmload "1面のBGM.wav",90,1 ;(上でコメントアウトした場合、mmloadにする) ;*************敵の配置***************** TK_x = 80,280,55,325,190 ;X TK_y = 220,220,120,120,70 ;Y ;***************メインループ************ *メイン redraw 0 : color : boxf ;************ゲームカウンター*********** color ,255 pos 450,20 : mes "val " + d3getfps() pos 450,40 : mes "TK_TAIM " + TK_TAIM ;*************************************** gosub *自機移動 gosub *自機弾の移動 gosub *敵の処理 gosub *敵弾の処理 ;*****************BGM**************** if RE_BGM_f = 0 { RE_BGM_f = 1;BGMフラグを「立てる」 dmmplay 90 ;BGM (上でコメントアウトした場合、mmplayにする) } ;**************マップ******************** SKRORU_c += 2 ;スクロール速度 pos 32,SKRORU_c+10 gmode 4, 380,450 - SKRORU_c,255 : gcopy 90 if SKRORU_c not= 0 { ;0以外の時「実行」 pos 32,10 gmode 4, 380,SKRORU_c,255 : gcopy 90 ,,450 - SKRORU_c } if SKRORU_c = 452 : SKRORU_c = 0 ;スクロール数を「リセット」 ;***************自機******************** ;自機表示 pos JIKI_x,JIKI_y : gmode 4,28,42,255 : gcopy 1 ;自機弾を表示 repeat JKTM_MAX ;自機弾の最大数(50) if JKSO_f(cnt) = 1 { ;自機弾フラグが「立ってたら実行」 pos JKSO_x(cnt),JKSO_y(cnt) gmode 4,11,11,255 : gcopy 1,1,43 }loop ;*****************敵********************* ;敵を表示 repeat TK_MAX ;敵の最大数(5) if TK_f(cnt) = 1 { ;敵フラグが「立ってたら実行」 pos TK_x(cnt),TK_y(cnt) gmode 4,60,45,255 : gcopy 30 } ;敵弾 if TM_f(cnt) = 1 { ;敵弾フラグが「立ってたら実行」 pos TM_x(cnt)-8,TM_y(cnt)-8 gmode 4,17,17,255 : gcopy 31 }loop redraw 1 : await 15 goto *メイン ;**************自機移動***************** *自機移動 stick key,15 if key & 1 : JIKI_x - JIKI_Spd ;←の移動 if key & 4 : JIKI_x + JIKI_Spd ;→の移動 if key & 2 : JIKI_y - JIKI_Spd ;↑の移動 if key & 8 : JIKI_y + JIKI_Spd ;↓の移動 return ;************自機弾の移動*************** *自機弾の移動 getkey keyZ,90 ;Zキー repeat JKTM_MAX ;自機弾の最大数(50) if keyZ and JKSO_f(cnt) = 0 and RENSA = 0 { JKSO_f(cnt) = 1 ;フラグ if cnt <= 25 : JKSO_x(cnt) = JIKI_x - 6 ;←弾X if cnt >= 25 : JKSO_x(cnt) = JIKI_x + 18;→弾X JKSO_y(cnt) = JIKI_y ;Y RENSA = 41 ;弾の間隔 } if JKSO_f(cnt) = 1 : JKSO_y(cnt) -= 15 ;↑に移動 if JKSO_y(cnt) < 0 : JKSO_f(cnt) = 0 ;一番上までいったら自機弾を「戻す」 if RENSA > 0 : RENSA -= 1 ;弾の間隔 loop return ;*****************敵の処理****************** *敵の処理 if TK_TAIM < 101 : TK_TAIM++ ;敵が出る時間をカウントする repeat TK_MAX ;敵の最大数(5) if TK_TAIM >= 100 { ;時間がたったら「実行」 if TK_f(cnt) = 0 : TK_f(cnt) = 1 ;敵フラグを「立てる」 } loop return ;***************敵弾の処理*************** *敵弾の処理 repeat TK_MAX ;敵の最大数(5) if TK_f(cnt) = 1 { ;敵フラグが「立ってたら実行」 TM_TAIM(cnt) += 1;弾がでるカウント if TM_TAIM(cnt) >= 100 { if TM_f(cnt) = 0 { ;敵弾フラグが「立ってない時に実行」 TM_f(cnt) = 1 ;敵弾フラグを「立てる」 TMv = atan(JIKI_y - TK_y(cnt) , JIKI_x - TK_x(cnt)) ;敵と自機との角度を求める TMxv(cnt) = cos(TMv) * 2 ;敵弾xの移動量(2) TMyv(cnt) = sin(TMv) * 2 ;敵弾yの移動量(2) TM_x(cnt) = double(TK_x(cnt)) ;敵弾の発射座標x TM_y(cnt) = double(TK_y(cnt)) ;敵弾の発射座標y } } } ;**************弾発射*************** if TM_f(cnt) = 1 { ;敵弾フラグが「立ってたら実行」 TM_x(cnt) = TMxv(cnt) + TM_x(cnt) ;敵弾xの座標指定 TM_y(cnt) = TMyv(cnt) + TM_y(cnt) ;敵弾yの座標指定 ;画面外に行ったら、弾フラグを「リセット」 if TM_x(cnt) < 1 : TM_f(cnt) = 0 ;← if TM_x(cnt) > 441 : TM_f(cnt) = 0 ;→ if TM_y(cnt) < -19 : TM_f(cnt) = 0 ;↑ if TM_y(cnt) > 489 : TM_f(cnt) = 0 ;↓ } loop return