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

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

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

■21281 / inTopicNo.1)  シナリオ選択ゲーを作っているのですが
  
□投稿者/ コンボイ -(2008/11/23(Sun) 21:50:56) [ID:es8CqQoH]
    今、シナリオ選択式のゲームを作っているところなんですが
    そのシリオを選択する部分がうまくいきません。
    しかもエラーが起きて強制終了するわけでも無いので、なおさら悩んでます。
    何をしようとしているかと言うと最初はチュートリアル.Eveをクリアすると、次からはチュートリアル完.Eveをプレイできるようにしようとしてるのですが
    チュートリアル.EveをクリアしてもいつまでもElseの条件を満たしてしまっているみたいで、チュートリアル完.Eveをプレイできません。
    テキストの中身はこんな感じです。
    シナリオを選択する部分はこんな感じです
    プロローグ:
    StartBGM ー.wav
    Local 通常シナリオ
    If 通常シナリオ = 1 Then
     Set 通常シナリオ[Eve\チュートリアル完.Eve] チュートリアルシナリオクリア
    Else
     Set 通常シナリオ[Eve\チュートリアル.Eve] チュートリアルシナリオ
    EndIf
    Set 通常シナリオ[Eve\選択.Eve] インターミッションにもどる
    Do
     Ask 通常シナリオ どこへ行きますか。
     Set 変更先 選択
     If 選択 = Eve\選択.Eve Then
      Confirm (インターミッションにもどります)
     Else
      Confirm (本編がはじまります)
     EndIf
    Loop While (選択 = 0)
    If (選択 != 1) Exit
    Continue 変更先
    Exit
    スタート:
    Exit
    エピローグ:
    Exit
    そしてif文に書いてある通常シナリオ = 1 Thenを満たす為に作ったシナリオがこれです。

    @オリジナル

    #----------------------------------------------------------------------
    # スタートイベント
    #----------------------------------------------------------------------
    スタート:
    ChangeMap Map\01.map
    Launch ・・・ 5 5
    Create 味方 ・・・ 0 ・・・ 1 5 13
    Create 味方 ・・・ 0 ・・・ 1 5 13
    Create 味方 ・・・ 0 ・・・ 1 5 13
    Create 味方 ・・・ 0 ・・・ 1 5 13
    Create 敵 ・・・ 0 ・・・ 3 14 1
    Exit
    全滅 敵:
    continue Eve\チュートリアル選択.Eve
    Exit
    エピローグ:
    Set 通常シナリオ 1
    Exit
    もうかれこれ8時間くらい悩んでしまって・・・いろんな意味で泣きそうです。
    良ければアドバイスをお願いします。
    根本的に間違っていたら良ければお手本になる文を作ってくれたら嬉しいです。


引用返信/返信 削除キー/
■21282 / inTopicNo.2)  HelpのLocalコマンドをよく眺めると幸せになれます
□投稿者/ ガムニ -(2008/11/23(Sun) 23:53:27) [ID:00Rg6f7k]
    初めましてガムニと申します。

    おそらく変数(の寿命)についてちょっと勘違いをしているのかと思います。

    Localコマンドで作られた変数(サブルーチンローカル変数)は宣言されたサブルーチン、イベント内しか寿命がありません。
    つまり、別のイベントで値を変更しようがしまいがその時点ではもうその変数の寿命は尽きて死んでます。
    また、Localコマンドで作られた変数名は既存の変数名とかぶっていてもよく、宣言されたサブルーチン(イベント)内ではサブルーチンローカル変数が優先されます。

    今のイベントの流れとしては
    Ifの前で作られた変数は生まれたての赤ん坊で、その値は当然空("")です。
    このイベント内では同名の変数の中でサブルーチンローカル変数「通常シナリオ」が最優先になります。
    当然Ifの条件式に当てはまらずElseを通ります。
    プロローグイベント終了時にサブルーチンローカル変数は寿命を迎え消滅します。
    ほかのイベントで弄られようがまたIfの直前で空のサブルーチンローカル変数が宣言される。
    つまり、Ifの条件式が真になることは絶対にあり得ません。

    まあ、長々と書きましたが要は
    Local 通常シナリオ

    Global 通常シナリオ
    に書き換えればたぶん動くんじゃないかと思います。

    SRCにおける変数は大きく三種類あるのでざっくり解説しておきます。

    ・サブルーチンローカル変数
    Localコマンドで宣言された変数。
    同名の変数があった場合、そのサブルーチン(イベント)内では他の種類の変数より優先される。
    サブルーチン(イベント)が終了した時点で消える。

    ・ローカル変数
    主にSetコマンドなどで宣言された変数。
    唐突に
    あいう = 1
    のように宣言したものもこれに含まれる。
    ステージクリア時に消える。

    ・グローバル変数
    Globalコマンドで宣言された変数。
    セーブデータにも残り、ステージをまたいで使える。

    とりあえずIfの条件を満たさない問題はグローバル変数にしてあげれば解決するはずです。
引用返信/返信 削除キー/
■21283 / inTopicNo.3)  Re[2]: HelpのLocalコマンドをよく眺めると幸せになれます
□投稿者/ コンボイ -(2008/11/24(Mon) 00:34:59) [ID:es8CqQoH]
    言われた通りにしたらIf文の問題は見事解決しました。
    ↓一応変えた部分のテキストを載せますね
    Global 通常シナリオ
    If 通常シナリオ = 1 Then
    Set 通常シナリオ[Eve\チュートリアル完.Eve] チュートリアルシナリオクリア
    Else
    Set 通常シナリオ[Eve\チュートリアル.Eve] チュートリアルシナリオ
    EndIf
    感謝感激です。
    だけどま新たな問題が発生してしまいました。
    ちゃんと説明しておけば良かったのですが、チュートリアル.Eveの方は一度クリアしたらもう出来ないようにしたいのですがどうすればいいでしょうか?
    後これさえわかれば私のやりたいことは絶対完成するだけに是非とももう一度力を貸していただけませんか?
引用返信/返信 削除キー/
■21284 / inTopicNo.4)  Re[3]: HelpのLocalコマンドをよく眺めると幸せになれます
□投稿者/ ガムニ -(2008/11/24(Mon) 14:04:22) [ID:00Rg6f7k]
    選択には配列を用いているようですので、チュートリアルシナリオクリア時(選択から除外したくなった時)に
    UnSetコマンドを用いて配列の要素を消去してあげればいいのではないかと思います。

    UnSetコマンドでは変数名(配列名)だけを指定した場合その配列全てが消去され、
    インデックスを付けて指定すればインデックスのある対象一つを消すことができます。

    今回の場合は
    UnSet 通常シナリオ[Eve\チュートリアル.Eve]
    とインデックス付きで指定してやればAskでの選択で出てこなくなります。
引用返信/返信 削除キー/
■21285 / inTopicNo.5)  Re[4]: HelpのLocalコマンドをよく眺めると幸せになれます
□投稿者/ コンボイ -(2008/11/24(Mon) 14:53:39) [ID:es8CqQoH]
    ついに完成しまた!
    やりこみ系のゲームを開発することができそうです。
    本当に感謝してます。
    Helpはこれでも読んでいるはずなんですが
    私の勉強が足りてないようですね情けないです・・・
引用返信/返信 削除キー/
■21290 / inTopicNo.6)  Re[5]: 今度はユニット開発システムを作っているのですが
□投稿者/ コンボイ -(2008/11/26(Wed) 04:12:49) [ID:es8CqQoH]
    今回は単刀直入の質問になってしまいますが
    今ユニット開発システムを製作中なのですが
    ○○のランクが○○以上だった時に○○が出来るというif文の書き方を教えていただけませんか?
    if rank(ユニット名) > 0 Then
    ifend
    みたいな感じで作ってみたけどダメでした。
引用返信/返信 削除キー/
■21291 / inTopicNo.7)  ヘルプをちゃんと読むべきだと思います
□投稿者/ 中箱 -(2008/11/26(Wed) 10:43:46) [ID:1E558AWX]
    Rank関数の書式は
    >Rank(メインパイロット名またはユニットID)
    です。ユニット名を入れても動きません
引用返信/返信 削除キー/
■21293 / inTopicNo.8)  ヘルプの読みかた
□投稿者/ あかんべえ -(2008/11/26(Wed) 22:15:17) [ID:yeQFrhMa]
     あかんべえです。横槍的内容で失礼します。

     ヘルプの読みかたなのですが、Rank()の書式のような仕様情報はとても重要です。
     人間相手の場合、パイロット名・ユニットIDのかわりにユニット名で表現してもまあまあ解釈してくれますが、マシンはしゃくじじょーぎで、仕様からはずれたらアウト、理解してくれません。
     なので、日常的な文章で通用するような、感覚的・文学的な読み方ではダメで、ずっと厳密に読む必用があります。
     そこらへんを理解されてないと、本人はちゃんと読んでるつもりでも「ちゃんと読んでない」と言われてしまうこともあるんじゃないかなあ、と思い発言しました。

     また、ヘルプは通読するだけじゃなく、折に触れ繰り返し参照されるべきものと思います。今回のように何かに詰まったときはもちろん、関数などを始めて使うとき、ひさしぶりに使うときなど、めんどくさいようでも逐一、仕様を確認してから使うよう習慣にすることをおすすめします。

引用返信/返信 削除キー/



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

このトピックに書きこむ

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

Pass/

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

- Child Tree -
- Antispam Version -