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


HSPTV!掲示板


未解決 解決 停止 削除要請

2009
0110
雷光ノベルゲーム。HSPの本を参照したけど・・・7解決


雷光

リンク

2009/1/10(Sat) 17:41:12|NO.22631

現在ノベルゲーム(ひぐらしのなく頃に風)を作っているのですが、本を参照しても
・ボタンを押して次の行にいくシステムですが、一行ごとでしか出せない
・一行ずつ消して書くだからチラチラする
・最初の行に戻る
というバグなんですが、長めの作品なので、テキストを何個も作り読む、という本のやり方ですが、どうすればいいですか。命令だけでもいいです。



この記事に返信する


tsuka

リンク

2009/1/10(Sat) 17:50:16|NO.22633

一つ目のは、その処理(読み込んで表示)を二回繰り返せばいいのでは?
二つ目の「・一行ずつ消して書くだからチラチラする」はredraw命令でどうにか出来そうな気がします

まぁとりあえずそのバグを再現できるスクリプトを貼らないと適切な回答が出来ないと思いますよ



雷光

リンク

2009/1/10(Sat) 22:08:14|NO.22664


sdim idt,256 sdim moj,64,32 notesel txbf noteload"dtw1.txt" po=0 pos 320,280 button"次",*bo *main noteget cgfn,po*2 picload cgfn noteget idt,po*2+1 i=0 :c=0 repeat 32 getstr moj(cnt),idt,i,"," i+=strsize loop font msgothic,16,1 if c>0 {pos 8,8 repeat c : mes moj(cnt) :loop } stop *bo po+ :if po>notemax/2-1 :po=0 goto*main
です。
本からの出典です



××

リンク

2009/1/10(Sat) 22:17:58|NO.22665

変数cに代入する文章が抜けているんだと思われて
mes命令が実行されないもんだから何も表示されないです・・・(^ ^;)



SYAM

リンク

2009/1/10(Sat) 22:29:45|NO.22666

××さんのご指摘どおり、変数cが更新されていないため何も表示されないでしょうね。
そこが直ったものとして、3つの質問に回答します。

…その前に、
まずテキストデータの形式が分からないといけませんよね。。。

-------
1ページ目の画像ファイル名
1ページ目の一行目,二行目,三行目
2ページ目の画像ファイル名
2ページ目の一行目,二行目,三行目



-------
…で、合っているでしょうか?

>ボタンを押して次の行にいくシステムですが、一行ごとでしか出せない

そんなことは無いように見えます。
「,」で区切れば、このスクリプトのままで何行も書けるようになっていますよ。


>一行ずつ消して書くだからチラチラする

redraw命令でなんとかしてみましょう。


>最初の行に戻る

*bo の処理の中で、おもいっきりそのように書いてありますね。
最後までいったら po=0 にしているでしょう。


本に書かれたもの、とのコトですが
とりあえずすべての行のすべての命令が、いったい何のためにどんな処理をしているのか、読み取る努力をしてみてください。
それができていれば、1番目と3番目の質問はたぶん自分だけで解決できていたと思います。
(できなかった、つまり意味がわからなかったならそのことを質問した方がいいですね。)

サンプルを改造することは、とてもいい勉強方法です。
でも、「ここは何をしているんだろう?」という疑問は放置してはいけません。
読み飛ばした部分が実は重要な処理をしている部分だったら、改造もなんにもできませんからね。



××

リンク

2009/1/10(Sat) 22:40:32|NO.22667


sdim idt,256 sdim moj,64,32 notesel txbf noteload "dtw1.txt" po=0 pos 320,280 button"次",*bo *main redraw 0 //ここで画面の更新を止めます 詳しくはredraw命令で調べてみてください noteget cgfn,po*2 picload cgfn //picloadで画像を読み込みますが,画面の更新はしません noteget idt,po*2+1 i=0 :c=0 repeat 32 getstr moj(cnt),idt,i,',' i+=strsize if strsize=0 : c=cnt : break loop font msgothic,16,1 if c>0 { color 255,255,255 : boxf 0,0,400,400 color 0,0,0 : pos 0,0 repeat c mes moj(cnt) //このmes命令はパソコンの内部で行われ,実際に画面の更新はしません loop } redraw 1//ここで画面を更新します stop *bo po+ if po*2+1>notemax : dialog "終わり" : end //poは現在読み込んでいる行 //po=notemaxとは終端まで読み込んだということなので //ここで終わりにします goto*main
もうSYAMさんがFAなんですけどせっかくなので貼っておきます

まず
TABキーを使うなどして,スクリプトを見やすくすることをお勧めします
そのままだと
・repeatがどこまで続いてloopで終わるのか
・if{ 〜 } の括弧の始まりと終わりが
分かりづらいと思いますので

△海離好リプトは
・テキストデータの一行を1ページとして、
・テキストデータの","で区切られたところまでを1行として読み込む
仕様になっています
1ページに複数行表示したい場合は","で区切るといいです

ちらつき防止にはredraw 命令を使いましょう
redraw命令の意味が分からない場合はエディタでredrawと打ってF1を押してみてください

ず能蕕旅圓北瓩襪里盪斗佑任后*boのifの中を良く見てください



SYAMさんもおっしゃいましたが
スクリプトを本のまま打ち込むだけでは力はつきません
実行した結果が なぜ そういう結果になるのかを理解しましょう



雷光

リンク

2009/1/10(Sat) 22:49:18|NO.22668

すいません。
後でじっくりここを参考に自作してみます。



雷光

リンク

2009/1/12(Mon) 17:13:07|NO.22739

解決クリック



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