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


HSPTV!掲示板


未解決 解決 停止 削除要請

2013
0310
なうしき上段に改行していくメッセージウィンドウはどう作ればいいですか?7解決


なうしき

リンク

2013/3/10(Sun) 13:40:27|NO.52852

現在ゲーム用のメッセージウィンドウを作っています。
自分で作った物がこれなのですが

mesall =""

repeat
redraw 0

color 255,255,255
boxf //画面消す



mesadd = ""//同じメッセージがたくさん表示されないように追加メッセージは基本はないようにする

if mesnumber = 0 & stopper = 0 : mesadd = "メッセージ1\r":stopper = 1
if mesnumber = 1 & stopper = 0 : mesadd = "メッセージ2\r":stopper = 1
if mesnumber = 2 & stopper = 0 : mesadd = "メッセージ3\r":stopper = 1 //stopperをつけないとずっと追加メッセージが追加されちゃう

stick key
if key = 32 : mesnumber= 1 + mesnumber :stopper = 0 //エンターをおしたら追加メッセージが変わる

gosub *message //メッセージ表示に飛ぶ

redraw 1
wait 3
loop


*message

pos 0,0

font "MS ゴシック",13
color 0,0,0
mesall = mesadd + mesall //今までのメッセージにmesaddのメッセージを足す

mes mesall


return

この場合

1回目のエンター

1行目   メッセージ2
2行目   メッセージ1
3行目 

2回目のエンター
1行目   メッセージ3
2行目   メッセージ2
3行目   メッセージ1

と表示されます。
しかし私が作りたいメッセージウィンドウの理想は

エンターなし

1行目   
2行目   
3行目    メッセージ1

エンター1回目

1行目   
2行目   メッセージ1
3行目   メッセージ2

エンター2回目

1行目   メッセージ1
2行目   メッセージ2
3行目   メッセージ3

と表示されるメッセージウィンドゥなのです。
ぜひ解決策をご教授いただきたいです!



この記事に返信する


KA

リンク

2013/3/10(Sun) 13:55:28|NO.52853

>>この場合
>>1回目のエンター
>>1行目   メッセージ2
>>2行目   メッセージ1
>>3行目 
>>2回目のエンター
>>1行目   メッセージ3
>>2行目   メッセージ2
>>3行目   メッセージ1
>>と表示されます。

1:まず、メッセージを入れ替えれば表示順序は解決します。
2:最初に空改行2つ、エンター1回目で空改行1つ、2回目なし、を追加します。
これで表示位置も解決します。



なうしき

リンク

2013/3/10(Sun) 14:37:44|NO.52856

KAさん返信ありがとうございます!
そして私は自分の最初の書き込みでは十分な情報を出しきれていなかったことを謝らなくてはなりません。

メッセージが4、5、6〜とドンドン増えていった場合に、自分の組んだものの場合はそのまま
下にずーとつながっていって古い文章は画面外に消えていってくれたのですが…
どうしても理想のメッセージウィンドゥの場合にはどう書けばそうなってくれるかわからないのです。


mesall ="" screen 0,360,40 repeat redraw 0 color 255,255,255 boxf //画面消す mesadd = ""//同じメッセージがたくさん表示されないように追加メッセージは基本はないようにする if mesnumber = 0 & stopper = 0 : mesadd = "メッセージ1\r":stopper = 1 if mesnumber = 1 & stopper = 0 : mesadd = "メッセージ2\r":stopper = 1 if mesnumber = 2 & stopper = 0 : mesadd = "メッセージ3\r":stopper = 1 if mesnumber = 3 & stopper = 0 : mesadd = "メッセージ4\r":stopper = 1 if mesnumber = 4 & stopper = 0 : mesadd = "メッセージ5\r":stopper = 1 if mesnumber = 5 & stopper = 0 : mesadd = "メッセージ6\r":stopper = 1 //stopperをつけないとずっと追加メッセージが追加されちゃう stick key if key = 32 : mesnumber= 1 + mesnumber :stopper = 0 //エンターをおしたら追加メッセージが変わる gosub *message //メッセージ表示に飛ぶ redraw 1 wait 3 loop *message pos 0,0 font "MS ゴシック",13 color 0,0,0 mesall = mesadd + mesall //今までのメッセージにmesaddのメッセージを足す mes mesall return

このようにメッセージが複数の場合はどうすればいいでしょうか
お手数をかけてしまい本当にすいません。



暇人

リンク

2013/3/10(Sun) 15:18:30|NO.52858

mes描画位置を自分で管理すれば良い
ちゃんとやるならnote系命令使って一行ずつ取り出して
画面外の行は描画しないようにとかするけど・・・

pos 0,13*(2-mesnumber) //3行目開始位置にしてmesnumberが増えたら上にずれてくように mesall = mesall+mesadd //mesallの後ろにmesaddを追加

fontは一度しか変えないならメインループ前に一度すれば良い



なうしき

リンク

2013/3/11(Mon) 19:16:23|NO.52882

ありがとうございます!
文章が増えていくとmes命令では結構無理が出てくるのですね。
note命令は恥ずかしながら今知った次第であります。
一旦この命令周りを勉強して、またわからない点があれば質問させていただきます。お二方ともありがとうございました



たんす

リンク

2013/3/12(Tue) 22:52:37|NO.52910

解決済みになっていましたが、
「表示用の配列を用意して中身を入れ替えていく」方法をご紹介。
sdim mesall,100,5	//表示用配列
screen 0,360,40 font "MS ゴシック",13 color 0,0,0 repeat redraw 0 color 255,255,255 :boxf //画面消す stick key if key = 32 : mesnumber= 1 + mesnumber :stopper = 0 //エンターをおしたら追加メッセージが変わる mesadd = ""//同じメッセージがたくさん表示されないように追加メッセージは基本はないようにする if mesnumber = 0 & stopper = 0 : mesadd = "メッセージ1":stopper = 1 if mesnumber = 1 & stopper = 0 : mesadd = "メッセージ2":stopper = 1 if mesnumber = 2 & stopper = 0 : mesadd = "メッセージ3":stopper = 1 if mesnumber = 3 & stopper = 0 : mesadd = "メッセージ4":stopper = 1 if mesnumber = 4 & stopper = 0 : mesadd = "メッセージ5":stopper = 1 if mesnumber = 5 & stopper = 0 : mesadd = "メッセージ6":stopper = 1 //stopperをつけないとずっと追加メッセージが追加されちゃう gosub *message //メッセージ表示に飛ぶ redraw 1 wait 3 loop //++++++++++++++++++ *message if stopper=1{ //エンター直後の表示前にのみ実行。 repeat 3 //表示させたい行数分ループさせて mesall.cnt=mesall.(cnt+1):await //入れ替える。 loop mesall.2=mesadd //表示の最終行に新しい分を代入。 stopper=2 } //ココから先、表示作業。 color 0,0,0 //文字色は黒 pos 0,0 repeat 3 //表示させたい行数分ループさせる。 mes mesall.cnt loop return
表示させたい行数の変更も楽々ですよ。



なうしき

リンク

2013/3/17(Sun) 04:08:06|NO.52999

たんすさんありがとうございます!
もっと早く僕が気づいていればお得だった…ぬぬぬ
note命令を勉強して作ってみたのでついでに張っておきます。


noteall = "1ぎょめ\n2ぎょめ\n3ぎょめ"
notesel noteall
noteadd "たした4ぎょめ"
noteget note1,notemax-3
noteget note2,notemax-2
noteget note3,notemax-1
mes note1
mes note2
mes note3



ht.

リンク

2013/3/17(Sun) 14:47:02|NO.53006

repeatで一括で処理した方がいいですよ。

notesel noteall noteall = "1ぎょめ\n2ぎょめ\n3ぎょめ" noteadd "たした4ぎょめ" repeat notemax noteget note, (notemax - 1) - cnt mes note loop



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