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


HSPTV!掲示板


未解決 解決 停止 削除要請

2012
1112
ホエールtextを実行しながら背景を動かす4解決


ホエール

リンク

2012/11/12(Mon) 22:10:32|NO.50609

HSP初心者で、この掲示板も初です。
何か至らない点がありましたら、どうぞ遠慮なく教えてください。

よろしくお願いします。

質問です。

text命令で文字を表示しながら、その背後ではキャラクターを動かしたいです。

text命令を使うとwaitと同じようにループが止められてしまうので、どうしたものか悩んでいます。

ループにしたがって一文字ずつ表示することも考えましたが、とてもじゃないですけど苦痛すぎて話になりません。

頭の弱い私に、どうか知恵をお貸しください。



この記事に返信する


晩御飯

リンク

2012/11/12(Mon) 22:57:05|NO.50611

>ループにしたがって一文字ずつ表示することも考えましたが、とてもじゃないですけど苦痛すぎて話になりません。
話にならないのであれば諦めるべきでしょうね
もし話に乗るのであればカウンタ変数とstrmidあたりを合わせると良いのではないでしょうか



cats

リンク

2012/11/12(Mon) 23:13:05|NO.50613

初心者さんなので分かりやすく書いたつもりですがどうでしょう。

元の文字列の入った変数からある別の変数に1文字分ずつ取り出し、
それを画面に表示しています。


X=30 ;キャラの初期位置 Buf="ここに入力したい文字を書く。\n複数行でも良い。\nキャラを動かしながらでも文字が出る。" Buf2="" ;表示分の文字列を入れる変数 Lpcnt=0 ;ループの回数 Count=0 ;文字の進んだ分を入れる変数 repeat redraw 0 ;画面のちらつき防止 color 255,255,255:boxf ;画面真っ白に塗りつぶし color 255 ;キャラの色(赤) X+ ;キャラの位置変更 pos X,5:mes "キャラ⇒■";キャラ描画 Lpcnt+ if Lpcnt\10=0{ ;ここの10が速さになる(少ないほど早い) //ポイント //画面に表示される分をBuf2に入れる // //strmid(p1,p2,p3) //p1...文字を取り出す元の変数 //p2...何バイト目から始めるか //p3...何バイト取り出すか Buf2=strmid(Buf,0,count) count+=2 ;文字が2バイト進む } color ;黒に設定 pos 100,100:mes Buf2 ;Buf2の内容を描画 await 5 ;ウエイト redraw 1 ;画面描画 loop



ホエール

リンク

2012/11/13(Tue) 00:17:30|NO.50616

>catsさん

おお、まさにこんな感じです!
見慣れぬ命令に頭を悩ませることになりそうですが、何とか思い通りのものが出来そうです!

ありがとうございました!



kanahiron

リンク

2012/11/13(Tue) 19:14:53|NO.50628

※使いやすくしました 前のは消してます

catsさんのスクリプトで、半角文字が入っているとバグるみたいです(strmidは文字数ではなくバイト)
で、改良しました
少しの改良のはずが、気付いたらモジュールを作ってました(謎)


#module text2Ex改 #define global text2setting(%1=1) text2setting_ %1 #deffunc text2setting_ int p10 if p10 <= 0:return 1 dim Buflen,p10 dim cnt_,p10 dim count,p10 sdim temp,64,p10 dim temp_,p10 sdim p2_,256,p10 //最大文字数を256Bに決め打ちしています 適宜変えてください sdim p3_,256,p10 //最大文字数を256Bに決め打ちしています 適宜変えてください setflag = 1 setcnt = (p10-1) return 0 #deffunc text2reset int p20 if setflag = 0:return 1 if p20 < 0:return 2 if p20 > setcnt :return 2 Buflen.p20 = 0 cnt_.p20 = 0 count.p20 = 0 temp_.p20 = 0 p2_.p20 = "" p3_.p20 = "" temp.p20 = "" return 0 #define global text2(%1,%2=10,%3=0) text2_ %1,%2,%3 #deffunc text2_ str p2,int p1 ,int p4 if setflag = 0:return 1 if p4 < 0:return 2 if p4 > setcnt :return 2 if Buflen.p4 = 0 { Buflen.p4 = strlen(p2) p2_.p4 = p2 } cnt_.p4++ if cnt_.p4 \ p1 = 0{ if count.p4 > Buflen.p4{ mes p3_.p4 return 5 } else { temp_.p4 = peek(p2_.p4,count.p4) if (0x81 <= temp_.p4 & temp_.p4 <=$9f) | (0xe0 <=temp_.p4 & temp_.p4 <= 0xef){ getstr temp.p4,p2_.p4,count.p4,,2 p3_.p4 += temp.p4 count.p4+=2 } else { temp.p4 = strf("%c",(peek(p2_.p4,count.p4))) p3_.p4 += temp.p4 count.p4++ } } } mes p3_.p4 return 0 /* 解説 text2setting int p1(1) text2を使うループに入る前に、1または同時に複数使う数を指定します(基本的にはスクリプトの最初) 指定した数だけ内部にバッファを作ります バッファは同時に使うことができます またバッファは0番から数えます( 3つ作ったら、0,1,2番のバッファが作られる) 作成したバッファを完全に初期化したい時にもtext2settingが使えます text2reset int p1 text2settingで作成したバッファの(p1)番目を初期化します text2 str p1,int p1(10),int p3(0) p1は使うtext表示したい文字列です p2は表示スピードです これはループの速度によって変わります p3は使用するバッファです 現在のカレントポジションにp3がtext風に書かれます 共通戻り値 stat = 0 正常終了 stat = 1 text2settingでバッファが作成されてない stat = 2 引数の値が異常 text2限定戻り値 stat = 5 すべて表示完了 text2Ex module by kanahiron */ #global //以下サンプル X=0 Buf2="ここに入力したい文字を書くんだよ!\n複数行でも構わないよ!\nキャラを動かしながらでも文字が出る!" text2setting 2 ;2つ同時に使いたいので2 endflag1 = 0 endflag2 = 0 repeat redraw 0 color 255,255,255:boxf:color 255 X+=3 :if X > 565:x = 30 pos X,5:mes "キャラ⇒■":color pos 100,100:text2 "ここに入力したい文字を書く。\n複数行でも良い。\nキャラを動かしながらでも文字が出る。" //書くのはたったこれだけ バッファや速度を指定しないとき引数は省略できる(バッファ=0,速度=10) if stat = 5: break //stat = 5は書き終わり //バッファ0が書き終わったらbreak pos 100,350:text2 Buf2,3,1 //text2resetでリセットすればbuf2を自由に変えられる if stat = 5:text2reset 1 //書き終わったらリセット redraw 1 await 1000/30 loop wait 100 cls text2reset 0 //バッファ0を初期化 text2reset 1 //バッファ1を初期化 endflag2 = 0 repeat redraw 0 color 255,255,255:boxf:color 255 X+=3 :if X > 565:x = 30 pos X,5:mes "キャラ⇒■":color pos 100,100:text2 "こんにちは。\nkanahironと申します",4 if stat = 5:endflag1=1 pos 100,350:text2 Buf2,6,1 if stat = 5:endflag2=1 if endflag1 & endflag2 :break //バッファ0と1両方が書き終わったらbreak redraw 1 await 1000/30 loop endflag1 = 0 endflag2 = 0 stop

若干使い方が難しいかもしれません
でも使えればスクリプトが大幅に短くなるはずです

わからないことがあったらどうぞ質問してください
また上記モジュールは若干のミスがある可能性があります ご了承ください



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