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


HSPTV!掲示板


未解決 解決 停止 削除要請

2010
0603
スークドスープ画像をバッファに連続で割り振るモジュールについて8解決


スークドスープ

リンク

2010/6/3(Thu) 03:30:20|NO.32943

はじめまして。初投稿です。
下のモジュールみたいなのはどっかにあるんじゃないか?と思いつつも
(あったら重複する形になりますね、ごめんなさい。)
2Dゲームに使用する画像(または音楽やテキストデータなど)のほぼ全てのロード処理を
モジュール化し、楽しよう&スクリプトを見やすくするため、
またはモジュールの勉強のために自作してみました。

開発環境:Win Vista Home Premium SP(ノート)+hsp(win) ver3.2


;↓「基本的な処理」のモジュール #module #define global renzoku newmod picdata,a2,val1,val2:renzokub picdata #deffunc grpload str grpfilename ;・画像ロード ;・画像の大きさ取得 ここでpicx,picyを取得します ;メインはこっちでないのでここはダミー>< return #global ;↓「renzoku」モジュール #module a2 a,b #modinit array p1,array p2 vala = length(p1):valb = length(p2) if vala!valb:dialog "err:flagとfileの不一致":end dim flag,vala dim file,vala repeat vala flag(cnt) = p1(cnt) file(cnt) = p2(cnt) await 1 loop return #modfunc renzokub repeat vala buffer flag(cnt),picx,picy ;picx,picy=(縦,横 それぞれのサイズ)「基本的な処理」モジュールのgrploadで取得したサイズのデータ grpload file(cnt) await 1 loop return #global ;↓それぞれの値の設定 dim val1,2:dim val2,2 val1(0) = 15:val2(0) = "A.bmp" val1(1) = 16:val2(1) = "B.bmp" val1(2) = 17:val2(2) = "C.bmp" ;↓実際に描画 renzoku gsel 0:gcopy 17,0,0,1024,768 ;とりあえず、17のバッファを0のスクリーンにコピーしてみる stop ;(縦1024,横768のサイズで表示すると仮定しています)
最終的にはリストファイルから必要な素材ファイルを全てロードしていくつもりです。
拡張子の判定はできるんですが、その後の制御がどうもわからないのです。
(ループのなかでリストを作って1番上のファイル名のものをロードし、その行を削除して
 拡張子ごとに決められた処理を行う→また最初に戻る。という処理をしたいのです。
 そこで、note系の命令を使用して判定しているのですが、noteは2度使えません。
 そのあたりの制御が私にとっては???です。)
また、何かこのスクリプトにご意見などがあればどしどしコメントをお願いします。



この記事に返信する


スークドスープ

リンク

2010/6/3(Thu) 03:33:59|NO.32944

連投失礼します。そんなことどうでもいいかもしれませんが
vistaのsp(サービスパック)は2です。



スークドスープ

リンク

2010/6/3(Thu) 11:18:26|NO.32948

配列だとかnote命令だとかだけをぼんやりと考えて込んでしまいましたorz
が、なんとか解決の糸口は見つかりそうです。
peek、sprit命令があることをすっかり忘れてました。多分焦らなければ大丈夫でしょう。

とりあえず実験用スプリクトです。
みなさんの環境では正常に動いてくれるでしょうか?

sdim txt,32000 txt="A\nA\n" mesbox txt,200,200 button goto "st",*a1 pos 300,10 stop *a1 mes txt repeat if stp = 2:mes "---(13,10)":stp = 0 a = peek(txt,cnt) if a = 13 or a = 10:color 255:stp += 1:else:color 0:if a = 0:break pos 300:if a = 13 or a = 10:else:mes ""+a await 1 loop

/sample/moduleや、peekなどの命令の使い道に寄り道していなかったら
浮かんでこなかったかもしれません・・。
自動ロードのモジュールの完成が近くなったような気がします。



SYAM

リンク

2010/6/3(Thu) 13:49:25|NO.32950

…ごめんなさい、
なにがしたいのかも、何が知りたいのかも分からないです…。
「制御がわからない」というのも何の制御なのか、どうなってほしいのかがコチラにはわかりません。

何がしたい、っていう書き方ではなく、どのような動作をさせたい、っていう書き方で、
動作を順序だてて説明するよう心がけると、比較的伝わりやすいと思います。



あり

リンク

2010/6/3(Thu) 15:48:51|NO.32952

こういう事がやりたいのでしょうか?

txt = "あい,うえ,お,test1.bmp,10\nかき,くけ,こ,snd1.wav,11\nたち,つて,と,snd2.mid,5" notesel txt mes "リストファイルの内容" mesbox txt, 600, 400 repeat notemax noteget buf, cnt split buf, ",", dat_A, dat_B, dat_C, dat_path, dat_ID buf_ID = int(dat_ID) filetype = getpath(dat_path, 2) ;拡張子を取り出す ; 拡張子によって処理を変更する if filetype = ".bmp" : type = 0 : gosub *load : continue if filetype = ".jpg" : type = 0 : gosub *load : continue if filetype = ".mid" : type = 1 : gosub *load : continue if filetype = ".wav" : type = 1 : gosub *load : continue await loop stop *load if type = 0 { ;画像バッファ作成 screen buf_ID : title "画像ファイル" + buf_ID mes "読み込んだファイル=" + dat_path mes dat_A : mes dat_B : mes dat_C } if type = 1 { ;サウンドバッファ作成(ここでは画像バッファで代用) screen buf_ID : title "音楽ファイル" + buf_ID mes "読み込んだファイル=" + dat_path mes dat_A : mes dat_B : mes dat_C } return



ANTARES

リンク

2010/6/4(Fri) 00:17:37|NO.32966

>ループのなかでリストを作って1番上のファイル名のものをロードし、その行を削除して
> 拡張子ごとに決められた処理を行う→また最初に戻る。という処理をしたいのです。
 なぜ、削除するのかわかりませんが、
削除しちゃいけないわけでもないので置いといて、
リストの形式がわからないと……

>そこで、note系の命令を使用して判定しているのですが、noteは2度使えません。
 sdimしないでdimしてるからかな?

 悩んでいるのはモジュール変数使っているせいじゃないかと思いつつ、
私がモジュール変数はいらないと思って忘れちゃってて、
調べるの面倒なんで無視しちゃいます。

----- list.csv -----
15,A.bmp
16,B.bmp
17,C.bmp
----- list.csv 終わり -----

sdim ext,10,1 dim extval,1 ext=".txt",".csv",".bmp",".jpg" extval= 0, 0, 1, 1 dim val1,1 sdim val2,64,1 notesel buf noteload "list.csv" lbuf="" s="" repeat notemax noteget lbuf,cnt getstr s,lbuf,0,',': p=strsize val1(cnt)=int(s) getstr val2(cnt),lbuf,p s=getpath(val2(cnt),18) ;拡張子取得 repeat length(ext) if s==ext(cnt): extidx=cnt: break loop on extval(extidx) gosub *l_txt, *l_pic loop stop *l_txt mes "text:"+cnt+" "+val1(cnt)+" "+val2(cnt) return *l_pic mes "pic:"+val1(cnt)+" "+val2(cnt) return



スークドスープ

リンク

2010/6/4(Fri) 00:38:13|NO.32968

>>何がしたい、っていう書き方ではなく、どのような動作をさせたい、っていう書き方で、
>>動作を順序だてて説明するよう心がけると、比較的伝わりやすいと思います。

動作をさせたい、動作の順序をまとめてみることにします。
最終的にどんな動作をさせたい:
gameload "FileDB.dat"

この一行だけでゲームに使うデータを全てバッファか変数にロードさせておきたい。 その動作をさせる順序: 1:リストのデータファイル(たとえばFileDB.dat)を読み込む。 2:画像、音楽、データ(または動画)をすべてのファイル数のループで繰り返す。 3:それぞれの拡張子での処理を行う。(ありさんのようなスクリプトであります) そして、制御に悩んでいたのは 「4:拡張子での処理を行うとき、「.dat」である時の処理」 思いつきとして最初で配列変数にデータを渡しておくのであれば 最初にnote命令を使っておき、大本のリストの.datファイルを配列変数に入力。 そして、そこから2つの要素に分けていき、それぞれを配列変数から cnt(ループ回数)で参照していく..ということをすれば リストにある.datファイルをnote命令でなんとかロードできる・・のだと思います。 皆さんの回答に感謝します。



スークドスープ

リンク

2010/6/4(Fri) 00:54:15|NO.32969

先の投稿が改行がなく、見にくくなってしまいました・・ごめんなさい。

>>悩んでいるのはモジュール変数使っているせいじゃないかと思いつつ、
よくよく考えてみたら、
ラベルも、モジュールもやってることはあまり変わりがない・・?



スークドスープ

リンク

2010/6/4(Fri) 02:23:24|NO.32973

とりあえず、あれこれやってみた結果、
ファイルの拡張子を判定する前の部分にて、
直接noteselで設定されたバッファのリストを
notegetで読みに行ってしまったのがうまくいなかった原因と判明しました。

今回、実際のロード処理までは行っていませんが、
多分なんとかなるでしょう。ありがとうございました。
このスレッドは解決とさせていただきます。



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