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


HSPTV!掲示板


未解決 解決 停止 削除要請

2016
0914
ミント→アイドルhgimg3.asを使用すると処理落ちする7解決


ミント→アイドル

リンク

2016/9/14(Wed) 20:23:15|NO.76876

どうもお久しぶりです。
「ミント→アイドル」に名前を変更しますので、これからもよろしくです。

さて、本題ですが「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



この記事に返信する


MillkeyStars

リンク

2016/9/15(Thu) 01:35:52|NO.76877

真面目にわかりません。再現できた時と再現できなかった時との差異が認められないんだよね。
この現象の多くが、ランタイム側の変数の初期化が正しく行われていない場合に多い。
(これは、作成者のおにたまさんしかわかりませんので、おにたまさんに確認してもらうしかない)

ランタイム側の変数の初期化に失敗しているか、初期化されていない変数にアクセスしバグってるとしかうちは考えられないので他の命令などで対応してもらうとか。



ミント→アイドル

リンク

2016/9/15(Thu) 21:05:09|NO.76882

MillkeyStarsさん、お返事ありがとうございます。

>>再現できた時と再現できなかった時との差異が認められないんだよね。
背景だけでも微妙に処理落ちするので、自機ショット、敵、敵弾を入れてみました。それでもわかりずらいですよね・・・
メインのソースでは、たまにFPSが52とかに落ちるのですが、
何回目には63⇔64とかになり、FPSの数値ではなく体感的な感覚になってしまいますね。

>>この現象の多くが、ランタイム側の変数の初期化が正しく行われていない場合に多い。
>>(これは、作成者のおにたまさんしかわかりませんので、おにたまさんに確認してもらうしかない)
初期化はうまくいっているはずだし、ソース的にも問題なさそうなんですよね・・・謎。
試しに「gmode」のP1を0にしたけど変わらず・・・
おにたまさんがいれば、おにたまさんから聞きたいです!

>>他の命令などで対応してもらうとか。
「音を複数出す、音を途中から出す」をやりたいんですよね・・・
調べたら「hgimg3.as」を使うとちょうど良さそうだったので使ってみたところです。
せめて「音を複数出す」はやりたいですね。皆どうしているんだろう・・・

もうちょっと調べてつつ、他にいい命令とかがあればそっち使いたいと思います。



MillkeyStars

リンク

2016/9/15(Thu) 23:55:46|NO.76883

あ?なんか違うの発見・・・
hgimg3.as を使用してスクリプトエディタから実行した場合、hsp3hg.exe として起動するんだけど、その時のタイトルバーの文字列が変・・・
問題あるHSPバージョンと問題ないHSPバージョンがあるっぽいね。

[問題がある hsp3hg.exe のタイトル] doclib History.txt 2014/02/01 3.4β3
Hot Soup Processor ver.3.4beta2

[問題がない hsp3hg.exe のタイトル] doclib History.txt 2016/07/29 3.5 beta4
Hot Soup Pcocessor ver.3.5beta4

双方共に、ベータバージョンである為、もともとバグを含んでいる可能性の状態で検証しています。
(重大な問題が発生しないと、HSPバージョンを変えることがないので、ほぼベータバージョンを使用しているという感じかな)
(今回も重大な問題といえば問題なのかなー。最新のHot Soup Pcocessor ver.3.5beta4a に変えようかな・・・)



ミント→アイドル

リンク

2016/9/16(Fri) 08:26:34|NO.76885

バージョンによってダメなやつがあるんですか。

とりあえずmciで複数鳴らせるのでそっち使ってみます。
現在途中から再生するソースをいじくって自分の物にする段階中。
できたら解決かな・・・?



MillkeyStars

リンク

2016/9/16(Fri) 12:33:29|NO.76886

普通にあるよ。#include "hgimg3.as"としてインクルードしてるよね?
それを #include "hspogg.as" に変えればいい。

そうすると、命令名が同じでそのまま使えるから。



jsAster

リンク

2016/9/16(Fri) 19:35:58|NO.76888

なんにもならない・・・。



ミント→アイドル

リンク

2016/9/16(Fri) 21:23:02|NO.76891

バージョン違うやつどこだろうと思ったら「 おにたま(オニオンソフト)のおぼえがき」にあったんですね。
今までTVトップからダウンロードしてたので気が付かなかったです。なお私のは3.4っていうやつですね。

#include "hspogg.as" に変えたら処理がスムーズになり、「音複数、音を途中から再生する」が出来るようになりました!

おかげで解決できました!
「mci」は 「#include "hspogg.as" 」とどっち使うか適応しながら決めようと思います。


しかしどうしようかな・・・3.4のままデバックと作成を勧めたほうがいいのかな。



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