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


HSPTV!掲示板


未解決 解決 停止 削除要請

2010
0408
WOLクリックで文章を読み込むには7解決


WOL

リンク

2010/4/8(Thu) 05:16:30|NO.31848

現在ノベルゲームのようなものを制作しているんですが
boxfで作った枠内に文章を表示しさらにクリックで新しい文章を読みこみたいのですが
どうすればいいでしょう
質問は
1.枠内の文章を消すにはどうするか
2.新しい文章を読み込むにはラベルを指定しなければならないか
 または簡単に読み込む命令があるか
以上の2つです。



この記事に返信する


f(飲茶中)

リンク

2010/4/8(Thu) 10:00:09|NO.31850

1.boxfで塗りつぶせ。
2.意味が分からん。とりあえず何か勘違いしてそうだから基礎を勉強すればいい。



backdrop

リンク

2010/4/8(Thu) 10:16:11|NO.31851

>質問2
いちいちファイルを読み込むとコストが高くなるので最初にバッファに保存しておきましょう。
自分で記述形式を考えてそれに合わせて#deffuncで命令を自分で定義してください(一本化)



あり

リンク

2010/4/8(Thu) 11:30:17|NO.31856

質問1は基本的に『それだけを消す』という動作は出来ないので
別のバッファに描いておいた背景・メッセージ枠を
背景⇒枠⇒文字描画の順にメイン画面に上書きコピーする、を繰り返す事で解決できます。
この方法だとメッセージ枠が半透明とかでも問題なく表示できます。

余談ですが、枠内にメッセージを納める手段として
Artlet2DモジュールのalDrawText命令を使ってみるのも面白いですね。
自動で枠内で文字を折り返して表示してくれる上にアンチエイリアスも
かけてくれるのでノベルゲーム向きじゃないかと思います。

質問2については質問の意味がよく解りませんが
メモリーノートパッド命令を使えばテキストデータの管理を
楽に行えますので目的に合うのか調べてみてください。
(『プログラミングマニュアル・基本仕様ガイド(hspprog.htm)』 内の
『3.スクリプト記述の基本』の項に説明があります。)

ちなみに上の命令を使う場合、マウスのクリックをチェックしておいて
クリックされたらnotegetで1行取り出して表示する、というような処理になります。



hatter

リンク

2010/4/8(Thu) 19:18:20|NO.31857


#if 0 /* ファイルからデータ取得 */ notesel DATE noteload "FMVmember.txt";"Story.txt" split DATE,"\n",Sentence #else /* データを作成 */ DATE="テストテスト","本日も晴天なり","","あいうえお","カキクケコ","なにぬねの","わをん!" #endif screen 0,210,70 if length(DATE)\3=1:DATE(length(DATE))="" if length(DATE)\3=2:DATE(length(DATE))="" repeat length(DATE)/3 color $00,$00,$00:boxf 0,0,210,70 color $FF,$FF,$FF:boxf 5,5,205,65 color $FF,$00,$00:pos 5,5 mes DATE(cnt*3)+"\n"+DATE(cnt*3+1)+"\n"+DATE(cnt*3+2) repeat stick key if key&256:break await 1 loop loop wait 100:end
こういう感じになるんじゃないかな〜。
質問者はファイルについては一切言及してませんが回答者の皆さんはファイル周りに
ついて多少述べているので、ファイルからのデータ取得についても書きましたが
コンパイル制御によってファイルからデータを取得せず変数にダイレクトに代入してます。

下手なスクリプトですみません。



maa

リンク

2010/4/8(Thu) 19:29:51|NO.31858

アドベンチャーゲームをHSPでゼロから作るとやりがいがありそうだけど、
吉里吉里とかNScripterのようなゲームエンジンを使って楽をするのもいいかなーと思った。



u

リンク

2010/4/8(Thu) 20:38:03|NO.31860

こちらのinoviaさんのソースなんかがノベルっぽくて参考になりそうです。
http://hsp.tv/play/pforum.php?mode=pastwch&num=29244

ついででサンプルも書いてみました。
わりと丁寧な仕上がりに

filename = dir_exe+"/sample.txt"//サンプルファイル名 /*サンプル用テキストファイルを作る*/ notesel buf buf="" buf+="むかしむかしあるところに\n" buf+="おじいさんとおばあさんが\n" buf+="住んでいました。\n" buf+="二人は幸せに暮らしましたとさ。[br]めでたしめでたし。"//[br]を改行目印にしてみる notesave filename//保存 /*----------------*/ screen 0,400,400 onexit *EXIT//終了時ジャンプ onclick gosub *CLICK//クリックされた時ジャンプ /*サンプル用テキストファイルを読み込む*/ notesel buf noteload filename//読み込み brmax=notemax//行数を格納 sdim text,260,brmax//文字列型配列だということを表しておく repeat brmax//行数分繰り返す noteget text(cnt),cnt//cnt番目の配列変数にcnt行目を代入 loop notesel al /*----------------*/ //メインループ repeat redraw 0 color 0,0,0:boxf//全体を塗りつぶす color 100,100,100:boxf 10,300,390,390//文字を表示する枠 repeat//[br]置き換え処理 bef=text(n) text(n)=strrep(text(n),"[br]","\n") if text(n)==bef:text(n)=bef:break loop color 255,255,255 pos 20,310 mes text(n)//n番目の文字を表示 redraw 1 wait 1 loop //クリックされたら *CLICK if n+1<brmax{//nが行数以下なときだけ n+=1//nに1足す } return //終了時 *EXIT delete filename//サンプル用テキストファイルを削除 end //置き換えモジュール ;面倒だったのでこちらから借りました ;http://fs-cgi-basic01.freespace.jp/~hsp/ver3/hsp3.cgi?print+200507/05070002.txt #module #defcfunc strrep str _strin,str target,str replace strin = _strin repeat await 1 position = instr(strin,0,target) if ( position == -1 ) : break strin = strmid(strin,0,position)+replace+strmid(strin,position+strlen(target),strlen(strin)-position-strlen(target)) loop return strin #global



WOL

リンク

2010/4/9(Fri) 00:23:46|NO.31865

みなさん回答ありがとうございます
色々なやり方がありましたので一番使い易いのを試してみます
まだ始めたばかりで基礎もまだあやふやな所があるのでもっと勉強した方がいいですね
ではでは



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