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


HSPTV!掲示板


未解決 解決 停止 削除要請

2012
1114
ふぁるcelloadでバッファに読み込める画像の最大サイズ6解決


ふぁる

リンク

2012/11/14(Wed) 13:08:41|NO.50643

作成しているゲームで、サイズが720×540と約400×680(単位はピクセル)の画像をたくさん使います。
なので使用するバッファを少なくするためにいくつか画像を合体させたいのですが、
過去に大きいサイズをcelloadで読み込もうとしたときに、ゲームが強制終了されることがあったので、
読み込める最大のサイズが知りたいです。

よろしくお願いします。



この記事に返信する


暇人

リンク

2012/11/15(Thu) 02:03:42|NO.50674

>読み込める最大のサイズが知りたいです。
特に制限は無い
もし強制終了したならバグかPC環境による問題でHSP仕様とは直接関係ない

>作成しているゲームで、サイズが720×540と約400×680(単位はピクセル)の画像をたくさん使います。
>なので使用するバッファを少なくするためにいくつか画像を合体させたいのですが、
これは、あまり意味が無い(製作途中に画像を変えたい場合面倒になるし)

読み込み回数減らすとか、ファイル名より分割Noで管理した方が
扱いやすいとかなら別だが・・・

同時に表示(重ね合わせ)する背景枚数が決まってるならバッファはその数だけで良い
背景を変える時だけ読み込むようにすれば良い(ノベルゲーだから使える方法)



ふぁる

リンク

2012/11/15(Thu) 23:47:56|NO.50691

>>暇人さん

いつもありがとうございます。遅くなって申し訳ありません。

強制終了したのはHSPが原因ではないのですね!
画像を小さくしたら動いたのでPC環境が問題なのかもしれません。

バッファが同時に表示する数だけでいいというのは、例えば、
背景用バッファを背景が変わるごとに上書きしていけばいいということでしょうか?



@key

リンク

2012/11/16(Fri) 00:25:28|NO.50692

ノベルゲーのような大量に画像使う奴は
picloadで十分速度もとれる
(毎回picloadするのではなく、画像を切り替えるときにだけpicloadで一つのバッファに
読み込むのが効率がいい)

そうでなければ、全てをバッファに入れるとメモリ使用量が半端無いか、
頻繁に描画するのだけに絞った方がいい



暇人

リンク

2012/11/16(Fri) 00:50:50|NO.50693

>背景用バッファを背景が変わるごとに上書きしていけばいいということでしょうか?
ゲームの仕様が分からないから使えるか分からないが

背景メインバッファ1枚用意して
一番奥に表示する背景を背景メインバッファに読み込んで
更に重ねたい背景があるなら別の背景セカンドバッファに読み込む
背景セカンドバッファから背景メインバッファにコピー(これはgmode 2等を使いたい場合)

背景メインバッファに背景が完成してるから
これをメインウィンドウにコピー

違う背景が必要にならない限り背景メインバッファを
メインウィンドウにコピーするだけで良い

違う背景が必要になったら背景メインバッファに読み込みからにする



ふぁる

リンク

2012/11/16(Fri) 07:42:09|NO.50697

>>@keyさん、暇人さん

お二方ともありがとうございます。
両方やってみて、より良い方法をとりたいと思います。



暇人

リンク

2012/11/16(Fri) 20:25:05|NO.50706

シナリオテキストにファイル名や動作を入れて
解析しながら進めるのが出来れば後々制作が楽になる

#include "hsp3util.as" /* Scenario_txtの書式説明 シーン区切り文字 <s> <s>の後にシーンネームを書けるデバッグや選択肢等で他のシーンを指定するときに分かりやすい(無くても問題は無い) 背景指定文字 <bg> //<s>の次の行で指定する使えるのは1シーン1行のみ <bg>の後に,で区切って複数書ける(最初に指定したファイルがベースになりバッファの画面サイズにもなる) ページ区切り <p> <p>の次の行からページ内文字列を書く キャラクターグラフィック指定 <cg> //<p>の次の行から指定する必要がある <cg>の後に x座標,y座標,ファイル名 一行に指定できるのは1枚で複数表示したい場合は<cg>行を追加 <cg>だけで座標やファイル指定が無い場合以前に表示したキャラを消去(<p>の次の行限定) */ Scenario_txt={" シナリオA <s>Scene0010 <bg>sozai2.jpg,logop.bmp <p> <cg>50,50,jp6girl.bmp <cg>400,50,jp6girl.bmp シーン1 1ページ目 キャラ2枚表示 ・・・・・・・・ ・・・・ <p> <cg>200,0,jp6girl.bmp シーン1 2ページ目 キャラ1枚表示 ・・・・ ・・・・・・・・ <p> シーン1 3ページ目 前のページで表示したキャラをそのまま表示 ・・・・ ・・・・ ・・・・ <s>Scene0020 <bg>sozai3.jpg,logop.bmp <p> <cg> シーン2 1ページ目 キャラ消去 ・・・・ <p> シーン2 2ページ目 キャラ表示無し ・・・・・・・・ ・・・・・・・・ END・・・最初に戻る "} WIN_ID=0 WIN_SIZEX=640 WIN_SIZEY=480 screen WIN_ID,WIN_SIZEX,WIN_SIZEY CGBUFFER_ID=300 buffer CGBUFFER_ID,WIN_SIZEX,WIN_SIZEY BGBUFFER_ID=100 BGBUFFER_SIZEX=WIN_SIZEX BGBUFFER_SIZEY=WIN_SIZEY buffer BGBUFFER_ID,BGBUFFER_SIZEX,BGBUFFER_SIZEY MESBOX_ID=200 MESBOX_SIZEX=WIN_SIZEX MESBOX_SIZEY=160 buffer MESBOX_ID,MESBOX_SIZEX,MESBOX_SIZEY gradf 0,0,MESBOX_SIZEX,MESBOX_SIZEY,1,$dddddd,$666666 gradf 4,4,MESBOX_SIZEX-8,MESBOX_SIZEY-8,1,$80dd,55 MESBOX_POSX=0 MESBOX_POSY=WIN_SIZEY-MESBOX_SIZEY MES_POSX=MESBOX_POSX+8 MES_POSY=MESBOX_POSY+8 TEMPBUFFER_ID=110 text_wait=40 onclick gosub *click_next //中断再開用(今回は中断処理を作ってないから未使用と同じ,再開機能は付いてる) Scene_continue=0 //中断した時のScene_indexを入れて*Startするとそこから開始 Ppage_continue=0 //中断した時のPpage_indexを入れて*Startするとそこから開始 *Start split Scenario_txt,"<s>",Scenario_name,Scene_txt //最初の<s>より前の文字列がScenario_nameに入り以降がScene_txtに分割出力される Scene_max=stat-1 //Scenario_nameの分を減らす for Scene_index,Scene_continue,Scene_max,1 split Scene_txt(Scene_index),"<p>",Scene_txtdat,Ppage_txt //最初の<p>より前の文字列がScene_txtdatに入り以降がPpage_txtに分割出力される Ppage_max=stat-1 //Scene_txtdatの分を減らす split Scene_txtdat,"\n",Scene_name,Graphic_fname //画像ファイル名が入ってる可能性があるので行単位に分割 repeat stat-1 //Scene_nameの分を減らしてループ if instr(Graphic_fname(cnt),0,"<bg>")>=0 { //画像ファイルの指定がある split Graphic_fname(cnt),"<bg>",temp,Scene_BG_fname //<bg>で分割されるので<bg>の左に何も無くても""が出力されるからtempに捨てる split Scene_BG_fname,",",BG_fname //複数ファイルネームがあれば分割 BG_fmax=stat repeat BG_fmax if cnt=0 { celload dir_exe+"\\hsptv\\"+BG_fname,BGBUFFER_ID //HSP3.31以降のhhsptvフォルダ内の画像ファイルを使用 }else{ gsel BGBUFFER_ID //描画先に背景メインバッファを指定 pos 0,0 //背景は0,0固定(座標も指定したいなら <cg>を参考に) if instr(BG_fname(cnt),0,".png") < 0 {//マイナスならpngファイルじゃ無い celload dir_exe+"\\hsptv\\"+BG_fname(cnt),TEMPBUFFER_ID //とりあえず一時的に読み込み gmode 2 //黒を透明色に設定 celput TEMPBUFFER_ID,0 }else{//pngファイルだったら直接背景メインバッファに読み込み picload dir_exe+"\\hsptv\\"+BG_fname(cnt),1 } } loop break } loop for Ppage_index,Ppage_continue,Ppage_max,1 gsel WIN_ID //描画先をメインウィンドウに指定 redraw 0 title Scenario_name+" "+Scene_name+" Ppage_index="+Ppage_index //デバッグ用に表示 gmode 0 pos 0,0 celput BGBUFFER_ID,0 //背景をメインにコピー split Ppage_txt(Ppage_index),"\n",temp,sentence //ページテキストを改行で分割(一行目を捨てる) line_max=stat-1 //tempの分を減らす cg_max=0 repeat line_max gsel CGBUFFER_ID //キャラクターグラフィックバッファを描画先に指定 if instr(sentence(cnt),0,"<cg>")>=0 {//キャラクターグラフィック指定有り if cnt=0 {//一枚目を読み込む前に必ず黒で塗りつぶす color boxf } split sentence(cnt),"<cg>",temp,cg_xyf //<cg>より左をtempに捨てて、cg_xyfに設定データ取り出し split cg_xyf,",",cg_x,cg_y,cg_fname//取り出したデータを,で分割 if stat=3 {//ファイル指定がある repeat stat gsel CGBUFFER_ID //描画先に背景メインバッファを指定 pos int(cg_x),int(cg_y) //数字を数値に変換して座標に celload dir_exe+"\\hsptv\\"+cg_fname,TEMPBUFFER_ID //とりあえず一時的に読み込み gmode 2 //黒を透明色に設定 celput TEMPBUFFER_ID,0 loop } cg_max++ //<cg>行を数える }else{ break } loop gsel WIN_ID //描画先をメインウィンドウに指定 gmode 2 pos 0,0 celput CGBUFFER_ID,0 //キャラクターバッファをメインにコピー gmode 3,,,220 pos MESBOX_POSX,MESBOX_POSY celput MESBOX_ID,0 //メッセージボックスをコピー gmode 0 redraw 1 color textmode 1 //文字の影指定 color 255,255,255 text text_wait smes_f=1 //emes実況中フラグON(ONの時にクリックされるとtext 0を実行して文字送りする) line_max-cg_max //<cg>行をページ行数から減らす pos MES_POSX,MES_POSY repeat line_max,cg_max //<cg>行の次からを指定 emes sentence(cnt) loop if smes_f=1 { smes_f=0 wait 30 //ページ文字列を表示し終わった後の待ち時間(文字送りの誤クリック防止) } next_stop=1 //次メージ待機フラグON repeat //クリック待機 pos 610,460 color 255*((cnt/5)\2),255 if (Ppage_index+1)<Ppage_max {mes "▽"}else{mes "▼"} //次のページがあれば"▽" 無ければ"▼"でクリックすると次のシーンに移ることを表す await 100 if next_stop=0 {break}//クリックされるとnext_stopが0になりrepeatを抜ける loop next next goto *Start *click_next if smes_f=1 {text 0:smes_f=0} //smes実行中なら文字列表示waitを0にして直ちに1ページ分表示 next_stop=0 //ページを止めてるフラグをクリア return



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