SRC質問掲示板Mk2
(現在 過去ログ50 を表示中)

HOME HELP 新規作成 新着記事 トピック表示 検索 掲示板新着情報RSS配信新着情報 過去ログ

[ 最新記事及び返信フォームをトピックトップへ ]

■9579 / inTopicNo.1)  【開発版】Args()を使ったインクルードの不具合
  
□投稿者/ 小一郎 -(2003/07/30(Wed) 03:05:17)
    こんにちは小一郎です。
    開発版にて以下のインクルードを使用して、ルーチンを実行すると
    画面が延々とスクロール現象を起こして、操作不能の状態になります。

    1.6系では問題なく作動するので、開発版へのバグ報告を行いたい
    のですが、生憎私が作ったシナリオでの不具合ではないために
    インクルードの内容を把握しておらず、何が問題を起こしているのか
    理解しておりません。

    バグ報告をスムーズに行うために、トラブルの原因を解説して頂きたく
    書き込みをいたしました。尚、転載に関してはご本人の承諾を得て
    いますのでその点はご理解ください。

    こちらにシナリオを用意してありますので、併せて
    解析にご利用ください。

    http://www.geocities.co.jp/Playtown-Queen/4708/LastSummer.lzh



    ##### インクルード #####

    スクロール:

    Set 現在X Args(1)
    Set 現在Y Args(2)
    Set 行き先X Args(3)
    Set 行き先Y Args(4)
    Set 待機時間 Args(5)

    Do While 1

    If ((現在X = 行き先X) And (現在Y = 行き先Y)) Then
    Break
    Endif

    If (現在X > 行き先X) Then
    Incr 現在X -1
    Goto スクロールループエンド
    Endif

    If (現在X < 行き先X) Then
    Incr 現在X 1
    Goto スクロールループエンド
    Endif

    If (現在Y > 行き先Y) Then
    Incr 現在Y -1
    Goto スクロールループエンド
    Endif

    If (現在Y < 行き先Y) Then
    Incr 現在Y 1
    Goto スクロールループエンド
    Endif

    スクロールループエンド:
    Wait 待機時間
    Center 現在X 現在Y

    Switch Args(6)
    Case カーソル表示
    ClearPicture
    PaintPicture Cursor.bmp - - 透過
    Case ライト表示
    ClearPicture
    PaintPicture Light.bmp - - 透過
    EndSw

    Refresh

    Loop

    Return




    ##### イベントファイル ######



    wait 10
    Talk 神取
    色付きの夢を見ることができる人間は数少ない。:それはなぜだと思う?
    end
    center 神取
    show
    スクロール 10 8 10 4 0.2
    create 敵 斗和子 0 斗和子 15 10 4
    create 敵 『最強』のヒロ 0 ヒロ 15 11 4



引用返信/返信 削除キー/
■9580 / inTopicNo.2)  Re[1]: 【開発版】Args()を使ったインクルードの不具合
□投稿者/ ヒロキ -(2003/07/30(Wed) 06:46:30)
    おはようございます、ヒロキです。

    件のインクルード中では、Gotoコマンドで「スクロールループエンド」という
    ラベルに飛んでいますが、「スクロール」サブルーチンの下に定義されている
    「スクロール2」サブルーチンにも、同様の名前のラベルが存在します。

    で、「Goto スクロールループエンド」が実行されたときに
    「スクロール」内ではなく、「スクロール2」内の
    「スクロールループエンド」ラベルに飛んでいるようです。

    そして、「スクロール2」のループ内の

    > If (ス現在X < 行き先X) Then
    > Incr 現在X 1
    > Goto スクロールループエンド
    > Endif

    という部分で、「ス現在X」という存在しない変数(=0)と
    変数「行き先X」(>0)が比較されるため、常に条件が成立してしまい
    変数「現在X」の増減が正しく行われず、
    結果として無限ループに陥ってしまうようです。


    したがって、トラブルの主たる原因は
    安定版と開発版でのGotoコマンドの挙動の違い、
    ということになります。

    ですが、同一イベントファイル中に複数存在するラベルに対して
    Gotoを実行した際、いずれのラベルに飛ぶのかは定義がなされておりません。

    ですのでこれは、
    「スクロール2」中の「スクロールループエンド」ラベルを別の名前に変える、
    またはGotoコマンドを使わないようサブルーチンを改変する、など
    シナリオ側の対処に留めるべきで、
    バグとして報告することではないと思います。


    最後に
    「スクロール」サブルーチンからGotoコマンドを取り除いた
    ものを例示しておきますので、よろしければ参考にでもしてください。

    スクロール:
    # Call スクロール 初期X 初期Y 行き先X 行き先Y 待機時間
    Local 現在X 現在Y 行き先X 行き先Y 待機時間
    Set 現在X Args(1)
    Set 現在Y Args(2)
    Set 行き先X Args(3)
    Set 行き先Y Args(4)
    Set 待機時間 Args(5)

    Do While 1

    If ((現在X = 行き先X) And (現在Y = 行き先Y)) Then
    Break
    ElseIf (現在X > 行き先X) Then
    Incr 現在X -1
    ElseIf (現在X < 行き先X) Then
    Incr 現在X 1
    ElseIf (現在Y > 行き先Y) Then
    Incr 現在Y -1
    ElseIf (現在Y < 行き先Y) Then
    Incr 現在Y 1
    EndIf

    Wait 待機時間
    Center 現在X 現在Y
    Switch Args(6)
    Case カーソル表示
    PaintPicture Cursor.bmp - - 透過
    Case ライト表示
    PaintPicture Light.bmp - - 透過
    EndSw

    Refresh

    Loop

    Return

    以上です。それでは
解決済み!
引用返信/返信 削除キー/
■9581 / inTopicNo.3)  一点だけ
□投稿者/ ANSI -(2003/07/30(Wed) 07:39:36)
    概ねヒロキさんと同じですので、補足という感じですけど。

    安定版と開発版で動作が異なるのは、ラベルが重複した場合、
    安定版では「最初に定義されたラベル」が、開発版では「最後に定義されたラベル」が
    有効とされるからです。これは仕様だと思われます。
    安定版では最初に定義されたラベル(スクロール内のラベル)が有効とされるので、
    特に問題は生じなかったのでしょう。

    解決方法も、ヒロキさんが提示された方法で問題ないと思いますが、
    個人的にはラベル名を変更するよりも、Gotoを使わないサブルーチンを
    使用するのをお勧めいたします。

    記述そのものも、Gotoを使わない方がスマートでわかりやすいですし、
    仮にラベル名を変更しても、絶えずラベルの重複という危険性は付きまといますので。

    それでは。
引用返信/返信 削除キー/
■9615 / inTopicNo.4)  Re[1]: 【開発版】Args()を使ったインクルードの不具合
□投稿者/ 小一郎 -(2003/07/30(Wed) 23:16:42)
    こんにちは小一郎です。

    システムではなく、ラベル運用の問題と言うことで了解しました。
    Args()の問題と思ったので、システムのバグと認識したようです。
    掲示板に報告していたら、迷惑をかけていたかもしれません。
    解説を頂き、ありがとうございました。

    小一郎

解決済み!
引用返信/返信 削除キー/



トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

Pass/

HOME HELP 新規作成 新着記事 トピック表示 検索 掲示板新着情報RSS配信新着情報 過去ログ

- Child Tree -
- Antispam Version -