ログイン
ユーザ名:

パスワード:



パスワード紛失

新規登録
メインメニュー
オンライン状況
129 人のユーザが現在オンラインです。 (2 人のユーザが コミュニティ を参照しています。)

登録ユーザ: 0
ゲスト: 129

もっと...

[技術的なことで相談してみようぜ] トピック

2009-03-19 05:56:07

教えて先人達!
konnpasu
きっと、教えてくれる人が書き込んでくれると信じて書き込む場所です。

コメント
| 1 |
3件中 1-3件を表示

2009-03-19 06:03:42

1: konnpasu
そりでは私が手始めに、教えて先人達!


私、ただいまスパロボWのオープニングのように、文字がスクロールするサブルーチンを作っているのですが、どうもうまく動きません。

スタート:
Set 文字バッファ[1] "テストだよっ"
Set 文字バッファ[2] "すばらしい"
スクロール文字表示 文字バッファ 12 0.5
Exit

スクロール文字表示:
Local 文字列 = Args(1)
Local L_Y = 470
Local 文字大きさ = Args(2)

If IsNumeric(文字大きさ) != 1 Then
Set 文字大きさ 12
EndIf

Local 流れるスピード = Args(3)
If IsNumeric(流れるスピード) != 1 Then
Set 流れるスピード 1
EndIf

Font (文字大きさ & pt) Pゴシック RGB(255, 255, 255)

Local Count = 0

Wait Start
Do While (((L_Y + (Count(文字列) * 文字大きさ) + 8) + 文字大きさ) > 0)
ClearPicture
Incr L_Y (-1 * 流れるスピード)
Refresh
For i = 1 To (Count(文字列) + 1)
PaintString - (L_Y + (i * 文字大きさ) + 8) $(文字列[i])
Next
Incr Count 1
Wait Until (Count * 0.5)
Loop
ClearPicture
Refresh
Return

と、このようにコードを組んでいるのですが、引数1(Args(1))の内容が取得できません。
Count(文字列)や、Talk内で文字列[1]を表示させようと思うのですが、
実行結果はCount(文字列) = 0 だったり、文字列[1]=""だったりします。
配列はサブルーチンに引数としてArgs()関数で渡せないのでしょうか?

もし、解決法があればお願いいたします。

2009-03-19 16:56:26

2: NINJA
とりあえず配列をまるごと引数として渡す手段はないんじゃないかな、と
引数1を"文字バッファ"とした場合文字バッファという文字列として扱われるようで
Count(Args(1))は巧く動きませんでした
シンプルに以下のような形でどうでしょうか

スタート:
Set 文字列[1] "テストだよっ"//文字バッファを使わない 毎回決め打ち的に文字列に格納しておく
Set 文字列[2] "すばらしい"
スクロール文字表示 12 1//0.5だとやたら遅い気がしたので
Exit

スクロール文字表示:
#Local 文字列 = Args(1)//ローカル化解除
Local L_Y = 470
Local 文字大きさ = Args(1)//文字バッファ使わないので引数の番号がずれます

If IsNumeric(文字大きさ) != 1 Then
Set 文字大きさ 12
EndIf

Local 流れるスピード = Args(2)
If IsNumeric(流れるスピード) != 1 Then
Set 流れるスピード 1
EndIf

Font (文字大きさ & pt) Pゴシック RGB(255, 255, 255)

Local Count = 0

Wait Start
Do While (((L_Y + (Count(文字列) * 文字大きさ) + 8) + 文字大きさ) > 0)
ClearPicture
Incr L_Y (-1 * 流れるスピード)
For i = 1 To (Count(文字列) + 1)
PaintString - (L_Y + (i * 文字大きさ) + 8) 文字列[i]//$()でくくる必要ないので
Next
Refresh//前の位置だと文字がちらつくのでこちらに移動
Incr Count 1
Wait Until (Count * 0.5)
wait 0//文字表示処理程度で必要はないだろうけど入れておくと応答なしになりにくく低スペックPCにも優しい仕上がりに
Loop
ClearPicture
Refresh
Unset 文字列//連続使用時の誤作動防止
Return



##以下別案

文字バッファ = "テストだよっ すばらしい"
#のようにリストにしておく

スクロール文字表示:
Local 文字列 i
Array 文字列 文字バッファ " "
#リストを配列に変換する

このくらいしか思いつかず
リストにすることで消し忘れてもセーブデータが大きくなりにくいんですが、
横に長くなると見づらいので最初から配列に入れるかリストにするかはお好みで

ところで一番上まで文字が流れた後若干おかしな動作をするんですが、ちょっと説明しにくいので実際実行してみてください

2009-03-19 23:33:09

3: konnpasu
どうも、ご回答いただきありがとうございます。
文字スクロールはNINJA様の提案していただいた方法で解決いたしました。

そして、おかしな動作というモノなんですが、
どうやらこれはPaintStringの仕様のようで、
以下のようなコードを組んで試してみたところ、

http://kokopasu.hp.infoseek.co.jp/TestCord.txt
(コードを直にフォームに書いたところ、XSS攻撃と勘違いされたので、アドレスとなります)

PaintStringで使用している座標が負(マイナス)の値になると、
意図した動作にならないようです。
X座標が負の値になると画面左端に、
Y座標が負の値になると画面下方に固定される形となりました。
(変数の値自体は負の値になっています。)
PaintPictureでは上記の現象が確認できなかったことから、
これは単純にSRC側のバグなのでは?とか思ったりしています。

こちらの回避方法としては、
画面の上下を黒で塗りつぶして隠してしまおうと思っています。

何はともあれ、ご提示していただいた方法で解決いたしました。
ご回答していただき、誠にありがとうございました。
| 1 |
3件中 1-3件を表示


検索
サイト情報
サイト管理者

三笠