|
|
2015/3/30(Mon) 22:16:25|NO.68216
むりなんですかねぇ?DTMを作っていて、パートを分けてると3次元配列変数。モジュールはdsoundx.hpi 、fps拾得のため、d3m.hspを利用。授業中までま考えてここまできたのに・・・なきそう、、、だれかおしえてください!何でシステムエラーなんだ!?
|
|
2015/3/31(Tue) 02:00:50|NO.68223
まずは一晩ぐっすり寝ましょう。バグは寝かせると解決しやすくなります。とても重要な差作業です。
すっきりしたらデバッグ開始です。
・エラーの症状の確認。
エラーを再現できる操作方法などの条件の確認。(またエラーが出ない場合の条件。)
エラーメッセージの内容の確認。
もうやってると思いますが、改めてもう一度やってみてください。
解決しなかったら次の対処へ。
・エラー行の特定。
logmes、title、dialogなどを適当な箇所にいれてどこまで正常に動作しているかを確認して行き、絞り込む。
想定している変数の内容のまま処理が進行しているかを確認。
これでもダメなら本格的にバグの原因調査に集中して下さい。簡単には回避できません。
スクリプトのコピーを作って次の対処へ。
・最小限の構成でエラーを再現するスクリプトを作る。
不要箇所を消していって原因を絞り込んでいく。
スクリプトがシンプルになれば原因が特定しやすくなります。
これでも原因が特定できない、挙動が納得出来ない場合…
・掲示板に書き込める程度の行数まで絞り込んで、この掲示板で聞いてみる。
ここまで来ると「ヘルプの説明の解釈に誤解がある」か「HSPのバグ」か「うっかり勘違い」かだと思います。
いずれにせよこの段階までくれば大抵は解決します。(もちろん上記の対処が全て実施済みという条件付きです。)
|
|
2015/3/31(Tue) 09:52:31|NO.68225
これですなんですが・・・
screen 0
#include "hspda.as"
dim part,2056,50,256
dim vol1,2056,50,256
dim vol2,2056,50,256
dim viv1,2056,50,256
dim long,2056,50,256
dim last,2056,50,256
dialog "var",17,"DTM FILE"
sfile = refstr
if getpath(sfile,2) = "" :sfile = ".var"
vsave sfile
これで保存すると、15行目(vsave sfile)にシステムエラーがでるんです・・・
確保しすぎ何でしょうか?
それとも、システムのメモリーが小さいのでしょうか・・・
一応、HSP3.32とHSP3.4bで試しましたがだめです。
Windows XP,WindowsVista,Windows 7ともにだめでした・・・
Genkiさんわざわざそんな遅い時間にお答えしてくださりありがとうございます・・・
|
|
2015/3/31(Tue) 20:24:55|NO.68243
詳しいことは分かりませんが、
変数をコメントアウトしながら確認していくと、
4つ目でエラーが発生しています(3つまでは正常に保存される)
1つの変数を保存すると100MBずつデータ量が増えていきます。
データ量が大きすぎると思います。
仮にこの仕様でソフトを製作すると、1つデータを保存するごとに
約CD1枚分の容量が必要になります。仕様の見直しをお勧めします。
|
|
2015/3/31(Tue) 20:44:22|NO.68244
344Mまでは大丈夫だけど345Mでエラーが出る
bsaveだと400Mでもエラーにならないからvsaveに問題があるんだろう
vsaveの修正を待つか、少し手間は増えるがbsaveを使う
|
|
2015/3/31(Tue) 21:54:00|NO.68248
そうですか・・・みなさまたくさん回答ありがとうございます。上のソースのdim part,1000,50,256の1000,50はそこに音楽の譜面を打ってあって256は256パート分あらかじめ確保します。仕様はどう変えたらいいんでしょうか・・・。何回も質問すみません。
|
|
2015/3/31(Tue) 23:31:13|NO.68253
2056 * 50 * 256 * 4 バイトなので約100Mバイトですか。
大きいですね。でも大きすぎるとまでは言えない大きさです。
マニュアル捜してもサイズ制限の項目無かったのでhspdaのバグでしょうか?
回避方法としては2ファイル以上に分ける方法が考えられます。
こんな感じ。
screen 0
#include "hspda.as"
dim part,2056,50,256
dim vol1,2056,50,256
dim vol2,2056,50,256
dim viv1,2056,50,256
dim long,2056,50,256
dim last,2056,50,256
dialog "var",17,"DTM FILE"
sfile = refstr
if getpath(sfile,2+16) ! ".var" : sfile = getpath(sfile,1) + ".var"
sfile1 = getpath(sfile,1) + "1.var"
vsave_start
vsave_put part
vsave_put vol1
vsave_put vol2
vsave_end sfile1
sfile2 = getpath(sfile,1) + "2.var"
vsave_start
vsave_put viv1
vsave_put long
vsave_put last
vsave_end sfile2
|
|
2015/3/31(Tue) 23:47:35|NO.68254
あぁ、一旦全部別メモリに移してるのね
それじゃバグじゃ無く仕様か・・・
>NO.68248
>仕様はどう変えたらいいんでしょうか・・・。
配列毎にbsave/bloadする方法
ファイル名リスト用のファイルも保存して
読込む時はそのファイルだけ見えるように
dim part,2056,50,256
dim vol1,2056,50,256
dim vol2,2056,50,256
dim viv1,2056,50,256
dim long,2056,50,256
dim last,2056,50,256
button "ロード",*load
button "セーブ",*save
stop
*load
dialog "dfl",16,"DTM FILE"
if stat=0 {dialog "キャンセルします":end}
wait 1
mes "ロード中"
filelist_name = refstr
dfname=getpath(filelist_name,1) //拡張子削除したディレクトリありのファイル名
fname=getpath(dfname,8) //ディレクトリ削除した拡張子無しのファイル名
filelist_name=fname+ ".dfl" //配列保存のファイル名をリストにして保存してるファイル名
notesel dtm_flist
noteload filelist_name //セーブファイル名のリストを読込み
noteget file_name,0
title file_name+"(1/6)"
bload file_name,part
noteget file_name,1
title file_name+"(2/6)"
bload file_name,vol1
noteget file_name,2
title file_name+"(3/6)"
bload file_name,vol2
noteget file_name,3
title file_name+"(4/6)"
bload file_name,viv1
noteget file_name,4
title file_name+"(5/6)"
bload file_name,long
noteget file_name,5
title file_name+"(6/6)"
bload file_name,last
mes "ロード終了"
stop
*save
dialog "dfl",17,"DTM FILE"
if stat=0 {dialog "キャンセルします":end}
wait 1
mes "セーブ中"
filelist_name = refstr
dfname=getpath(filelist_name,1) //拡張子削除したディレクトリありのファイル名
fname=getpath(dfname,8) //ディレクトリ削除した拡張子無しのファイル名
filelist_name=fname+ ".dfl" //配列保存のファイル名をリストにして保存するファイル名
sdim dtm_flist
notesel dtm_flist
title fname+".part"+"(1/6)"
bsave fname+".part",part
noteadd fname+".part",0
title fname+".vol1"+"(2/6)"
bsave fname+".vol1",vol1
noteadd fname+".vol1",1
title fname+".vol2"+"(3/6)"
bsave fname+".vol2",vol2
noteadd fname+".vol2",2
title fname+".viv1"+"(4/6)"
bsave fname+".viv1",viv1
noteadd fname+".viv1",3
title fname+".long"+"(5/6)"
bsave fname+".long",long
noteadd fname+".long",4
title fname+".last"+"(6/6)"
bsave fname+".last",last
noteadd fname+".last",5
notesave filelist_name //セーブファイル名のリストを保存
mes "セーブ終了"
stop

| |
|
2015/4/1(Wed) 00:13:42|NO.68255
ありがとうございますみなさま・・・これで何とかできそうです。マジで感謝を回答してくださったひと一人一人にしてます。ありがとうございました、勉強になりました。上のやり方って、ファイルを一つにできますか?できたらやってみたいんですが・・・ちなみにふつうの変数も一つに結合できたらいいんですけど・・・わがまますみません、ggってわかりませんでした・・・おねがいします!!!
|
|
2015/4/1(Wed) 01:50:59|NO.68258
bsave/bloadはオフセット値を指定できるので一つにするのは可能
今回みたいに配列のサイズが決まっていて、全部同じなら追加して
セーブすれば良いだけだが、違う場合は、サイズを記録する場所も
確保して保存する必要がある
変数も同様に出来るが変数の数によっては結構面倒だろう
変数の数や名前が変わったときの対応忘れとか色々と・・・
変数を使うときに一手間かければセーブロードの対応忘れを回避できるが・・・
|
|
2015/4/1(Wed) 13:45:27|NO.68265
皆様ありがとうございます。回答くださった皆様は、このシステムを公開する際に
そのReadmeにて書かせていただきます。
大変感謝しております。
解決ということでこの質問を切らせていただきます。
ありがとうございました!
|
|