[技術的なことで相談してみようぜ] トピック | |
---|---|
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件を表示 |