【質問フォーム】
【重要!】 質問する前に必ず、過去に同じ質問がないか検索してください!
もし以下のケースで困った場合は、まずリンク先の文書内に答えがないか探してください。
・まずはこの中からお探し下さい → パーフェクトガイド
・バグかな?と思ったときは → よくある質問
・基本システムの設定方法が分からない場合 → 基本システム講座(by 藤田るいふ氏)
・イベントコマンドなどの仕様が分からない場合 → 公式マニュアル
※書き込む前に少なくとも1日2日は、自分で探したり挑戦する努力をしてみてください。
上記のことを全部やってもどうしても分からなかった場合だけ、以下のフォームから質問してください。
> [やりたいこと]
> STGゲームを作っています。
> そこで主人公の撃った弾が敵に命中したら弾が消えるという処理を
> 実装したいのですができません。
>
> [やってみたこと]
> ネットでみたウディタ解説やSTG作成動画を参考に自機弾発射とそれにたいする当たり判定を作成しました。
> 解説を参考にピクチャ表示の弾をループ中断からのピクチャ消去という風に
> コモンを組んでみたのですがピクチャが消えてくれません。
> 当たり判定それ自体は正常に機能しているようで弾が当たった際敵はきちんと指定した通りの反応を見せています。
> ピクチャ番号の指定などは再三確認しているので番号指定の問題ではないはずです。
>
> コモンの内容は添付画像を見てもらいたいです。
> 御覧のように発射処理と当たり判定を別コモンにしてあります。
> 並列実行(常時)の発射処理に呼び出し時のみの当たり判定を呼び出す形です。
>
> 発射処理と当たり判定のコモンを一つにまとめたりそれぞれのコモンを双方ともに並列実行(常時)にするなどの工夫も行いましたがいずれも結果はかわりませんでした。
>
> なお使用ウディタは3.184です。
ループの中にピクチャ表示があるので、これだとピクチャを消去してもすぐに再表示してしまうでしょう。
現状の設定では…
■回数付きループ [ 20 ]回
|■ピクチャ表示
|■ウェイト:1
と言った設定順ですが、これを…
■ピクチャ表示
■回数付きループ [ 20 ]回
|■ウェイト:1
と言ったように、ループ処理が始まる前にピクチャ表示を置けば、再表示は無くなるでしょう。
[やりたいこと] STGゲームを作っています。 そこで主人公の撃った弾が敵に命中したら弾が消えるという処理を 実装したいのですができません。
[やってみたこと] ネットでみたウディタ解説やSTG作成動画を参考に自機弾発射とそれにたいする当たり判定を作成しました。 解説を参考にピクチャ表示の弾をループ中断からのピクチャ消去という風に コモンを組んでみたのですがピクチャが消えてくれません。 当たり判定それ自体は正常に機能しているようで弾が当たった際敵はきちんと指定した通りの反応を見せています。 ピクチャ番号の指定などは再三確認しているので番号指定の問題ではないはずです。
コモンの内容は添付画像を見てもらいたいです。 御覧のように発射処理と当たり判定を別コモンにしてあります。 並列実行(常時)の発射処理に呼び出し時のみの当たり判定を呼び出す形です。
発射処理と当たり判定のコモンを一つにまとめたりそれぞれのコモンを双方ともに並列実行(常時)にするなどの工夫も行いましたがいずれも結果はかわりませんでした。
なお使用ウディタは3.184です。
|
私が知る限りではそのような処理が可能なコモンや変数は見つかりませんでした。
要望スレッドで提案してみてはどうでしょうか?
[やりたいこと]
・コマンド入力ウインドウ「変数操作」より、
代入先に「可変DB」を指定し、
可変DBに「文字列」を格納したい。
[やってみたこと]
※以下はコモンイベント内でのみ実行しています。
前提条件:
・UDB[14:0:0]には「文字列」を設定できる。
・UDB[14:0:0]には「サンプル」という文字列が格納されている。
・可変DB[0:0:0]には「文字列」を設定できる。
・可変DB[0:0:0]には何も設定されていない。
1、以下の変数を初期化する。
・コモン変数10番 = 1014000000(データを呼ばない)」
・コモン変数11番 = 0
・コモン変数12番 = 0
・コモン変数13番 = 0
2、イベントコマンドの「変数操作」より、以下の可変DBに値を代入する。
・[可変DB]
タイプ = コモン変数11番(0)
データ = コモン変数12番(0)
内容 = コモン変数13番(0) = コモン変数10番(1014000000)
[やってみた結果、どううまくいかないか]
この処理を実装したコモンイベントを呼び出して実行したところ、
上記の手順2の実行時にアプリケーションが停止し終了してしまいます。
このときエラーメッセージ等は表示されません。
試しに以下の条件で実行してみたところ、アプリケーションは終了せず正常に動作しているようでした。
・UDB[14:0:0]には「数値」を設定できる。
・UDB[14:0:0]には「10」という数値が格納されている。
・可変DB[0:0:0]には「数値」を設定できる。
・可変DB[0:0:0]には何も設定されていない。
このことから、「変数操作」から文字列に関する操作をしようとするとこの現象が発生するようです。
説明書やその他サイトなどの情報を探してみても似た現象を見つけられませんでした。
もちろん自分の探し方が悪いのだと思いますが、このような仕様について詳しい情報をお持ちの方はいらっしゃいますか?
また、このような現象について色々記載しているサイトなどご存知であればぜひ教えて頂きたいです。
> ■可変DB書込:DB[ 敵一時情報@ARPGコモン : CSelf25[敵計算] : マップイベントID ] (22 : - : 0) = CSelf20[敵チェッカー]
> ここの設定は「DBへ代入↑」ではなく「変数に代入→」では?
> コモン素材の設定では「変数に代入→」になっています。
無事解決しました
ありがとうございます
■可変DB書込:DB[ 敵一時情報@ARPGコモン : CSelf25[敵計算] : マップイベントID ] (22 : - : 0) = CSelf20[敵チェッカー]
ここの設定は「DBへ代入↑」ではなく「変数に代入→」では?
コモン素材の設定では「変数に代入→」になっています。
[やりたいこと]
創る人氏のコモン↓
hhttps://silsec.sakura.ne.jp/WolfRPGEditor/CommonList/html/tdv207. ..... 1119579201
に前回制作した飛び道具コモンを組み込み、命中したらダメージを与えられるようにしたい
[やってみたこと]
とりあえず照らし合わせられるようにARPGコモンの当たり判定から当たり判定をコピペして
■変数操作: CSelf4[当たり判定] = 0 + 0
▼
▼
■変数操作+: CSelf10[矢画面X] = ピクチャ:8888 の X座標
■変数操作+: CSelf11[矢画面Y] = ピクチャ:8888 の Y座標
▼
■変数操作: CSelf10[矢画面X] += Sys104:Xスクロール値 + 0
■変数操作: CSelf11[矢画面Y] += Sys105:Yスクロール値 + 0
■変数操作: CSelf10[矢画面X]〜CSelf11[矢画面Y] /= Sys118:[読]タイルサイズ + 0
■変数操作+: CSelf17[イベントID] = X:CSelf10[矢画面X] Y:CSelf11[矢画面Y]のイベントID
▼
▼
▼
▼
▼
▼ 敵サーチ開始
■条件分岐(変数): 【1】 CSelf17[イベントID] が 0 以上
-◇分岐: 【1】 [ CSelf17[イベントID] が 0 以上 ]の場合↓
|■デバッグ文:\cself[17]
|■変数操作: CSelf16[チェックID] = CSelf17[イベントID] + 0
|■デバッグ文:\cself[16]
|■変数操作: CSelf4[当たり判定] = 1 + 0
|■DB読込(可変): CSelf22[敵の数] = 可変DB[タイプ敵一時情報@ARPGコモン(22)のデータ数]
|■変数操作: CSelf25[敵計算] = -1 + 0
|■回数付きループ [ CSelf22[敵の数] ]回
| |■変数操作: CSelf25[敵計算] += 1 + 0
| |■デバッグ文:\cself[25]
| |■可変DB書込:DB[ 敵一時情報@ARPGコモン : CSelf25[敵計算] : マップイベントID ] (22 : - : 0) = CSelf20[敵チェッカー]
| |■デバッグ文:バグ?
| |■デバッグ文:\cself[20]
| |■条件分岐(変数): 【1】 CSelf20[敵チェッカー] が CSelf16[チェックID] と同じ
| |-◇分岐: 【1】 [ CSelf20[敵チェッカー] が CSelf16[チェックID] と同じ ]の場合↓
| | |■デバッグ文: いたぞぉぉぉ!
| | |■DB読込(可変): CSelf26 = 可変DB[ 敵一時情報@ARPGコモン : CSelf25[敵計算] : 生存フラグ ] (22 : - : 3)
| | |■条件分岐(変数): 【1】 CSelf26 が 1 と同じ
| | |-◇分岐: 【1】 [ CSelf26 が 1 と同じ ]の場合↓
| | | |■DB読込(可変): CSelf27[無敵かどうか] = 可変DB[ 敵一時情報@ARPGコモン : CSelf25[敵計算] : 被ダメフラグ ] (22 : - : 6)
| | | |■条件分岐(変数): 【1】 CSelf27[無敵かどうか] が 0 と同じ
| | | |-◇分岐: 【1】 [ CSelf27[無敵かどうか] が 0 と同じ ]の場合↓
| | | | |■デバッグ文:ヒット
| | | | |■
| | | |◇分岐終了◇
| | | |■
| | |◇分岐終了◇
| | |■
| |◇分岐終了◇
| |■
|◇ループここまで◇◇
|■
◇分岐終了◇
■
としました。
ダメージ判定に関しては後ほど追加する予定です。
[やってみた結果、どううまくいかないか]
なぜか敵に当たった際、0番目のマップイベントを参照してしまいます
また、0番目のマップイベントを参照後なぜか攻撃が当たらなくなってしまい、さらに当たり判定が0番目のマップイベントに移動します
> NPCが表示されない原因が分からないので優しい有識者の方、ご教授お願いします…初心者ユーザーです。
>
> 環境↓
> ウディタ バージョン3.176
> Windows10
> 画面サイズ 640×480
> マス 32px
>
> 〇やりたいこと(以下箇条書きにて失礼します)
> ・ゲームのオープニング作り
> ・主人公(プレイアブルキャラ)を自動実行で動かすのを前提
> ・同マップ内にいるNPC(登場人物2)を画面外から登場させ、指定位置で主人公と会話させ、別の指定位置まで動かす。
> ・その後、NPCは話しかけると会話できる状態にし、動かせるようになった(自動実行解除)主人公がマップ移動、または一定の条件を満たした後にNPCがいなくなる。
>
> ▼質問
> エディタ上では表示されているNPCが、テストプレイだと姿が見えません…(´・ω・`)(添付画像の赤枠の部分)いるはずなのに見えない状態を解消したいです。
>
> 公式ガイドやBBS、講座などいろいろ調べましたが同じ症状が見つからず…
> 条件分岐や変数なども試しましたが、5000万エラーが出たり、上手くいった(NPCが表示され、動く)と思っても、今度は主人公が動かなくなったり、ループが始まったりと…一進一退…お手上げです…
>
> 現状→NPC(イベント作成)のコマンドは空、並列実行、起動条件=V0が2と同じ。
>
> 自動実行にすると5000万エラーが出ます…メインのマップイベント(ID:00)のコマンド状態は画像の通りなのですが、何が間違っているのか教えていただければ幸いです。よろしくお願いいたします!
Ev1の方は「並列実行」ではなく「決定キーで実行」で良いかと思います。
イベントコマンドには、オープニング終了後の会話イベントを設定すれば良いでしょう。
Ev1の起動条件変数を「V0 が 2 と同じ」にしている場合は
■変数操作: V0[] = 3 + 0
を実行すると、Ev1が消えてしまいます。
オープニング終了後もそのままEv1を表示し続ける場合は、オープニングイベントには
■変数操作: V0[] = 3 + 0
を設定しないで、別のマップへ場所移動する時や一定の条件を満たした時に
■変数操作: V0[] = 3 + 0
を実行してEv1を消せば良いでしょう。
あと動作指定の「X:12,Y:8 に接近」は1回の実行で1歩しか移動しません。
そのため、以下のように設定して、指定した場所に到着するまでは、何度も「〜に接近」が実行するように設定してください。
■ループ開始
|■動作指定:[ウェイト] Ev1 / 移動速度を設定 => 4 / X:12,Y:8 に接近
|■変数操作+: このEvのセルフ変数0 = Ev1 の X座標(標準)
|■変数操作+: このEvのセルフ変数1 = Ev1 の Y座標(標準)
|■条件分岐(変数): 【1】 このEvのセルフ変数0 が 12 と同じ
|-◇分岐: 【1】 [ このEvのセルフ変数0 が 12 と同じ ]の場合↓
||■条件分岐(変数): 【1】 このEvのセルフ変数1 が 8 と同じ
||-◇分岐: 【1】 [ このEvのセルフ変数1 が 8 と同じ ]の場合↓
|||■ループ中断
|||■
||◇分岐終了◇
||■
|◇分岐終了◇
|■
◇ループここまで◇◇
動作指定では「動作を繰り返す」にチェックを付けないでください。
なお、
■条件分岐(変数): 【1】 V0[] が 1 と同じ
-◇分岐: 【1】 [ V0[] が 1 と同じ ]の場合↓
|■文章:???
|■
◇分岐終了◇
や
■条件分岐(変数): 【1】 V0[] が 2 と同じ
-◇分岐: 【1】 [ V0[] が 2 と同じ ]の場合↓
|■動作指定:[ウェイト] Ev1 / 移動速度を設定 => 4 / X:12,Y:8 に接近
|■
◇分岐終了◇
のような条件分岐を設定していますが、今回の処理では必ず条件分岐の条件を満たしている状態(必ず分岐内のイベントが実行する)になっているので、この条件分岐を設定せずに、単に
■文章:???
だけ、
■動作指定:[ウェイト] Ev1 / 移動速度を設定 => 4 / X:12,Y:8 に接近
だけを設定しても問題ありません。
> [やりたいこと]
> hhttps://donichi-game.com/howto-arpg02-arrow/
> に出ている、画像で矢を放ち、ヒットしたマップイベントが光るコモンを作ろうとして苦戦しています。
> バージョンは2.24です。
> [やってみたこと]
> URL先を参考に
> 矢自体を放つコモン↓
> ■変数操作+: CSelf10[玉座標X] = 主人公 の 画面X座標
> ■変数操作+: CSelf11[玉座標Y] = 主人公 の 画面Y座標
> ■変数操作: CSelf10[玉座標X] -= Sys118:[読]タイルサイズ / 2
> ■変数操作: CSelf11[玉座標Y] -= Sys118:[読]タイルサイズ + 0
> ■変数操作+: CSelf12[発射元の向き] = 主人公 の 向き(1〜9)
> ■条件分岐(変数): 【1】 CSelf12[発射元の向き] が 2 と同じ 【2】 CSelf12[発射元の向き] が 8 と同じ
> -◇分岐: 【1】 [ CSelf12[発射元の向き] が 2 と同じ ]の場合↓
> |■変数操作: CSelf12[発射元の向き] = 0 + 0
> |■変数操作: CSelf14[玉移動値X] = 0 + 0
> |■変数操作: CSelf15[玉移動値Y] = Sys118:[読]タイルサイズ + 0
> |■
> -◇分岐: 【2】 [ CSelf12[発射元の向き] が 8 と同じ ]の場合↓
> |■変数操作: CSelf12[発射元の向き] = 1800 + 0
> |■変数操作: CSelf14[玉移動値X] = 0 + 0
> |■変数操作: CSelf15[玉移動値Y] = Sys118:[読]タイルサイズ * -1
> |■
> -◇上記以外
> |■条件分岐(変数): 【1】 CSelf12[発射元の向き] が 4 と同じ 【2】 CSelf12[発射元の向き] が 6 と同じ
> |-◇分岐: 【1】 [ CSelf12[発射元の向き] が 4 と同じ ]の場合↓
> | |■変数操作: CSelf12[発射元の向き] = 900 + 0
> | |■変数操作: CSelf14[玉移動値X] = Sys118:[読]タイルサイズ * -1
> | |■変数操作: CSelf15[玉移動値Y] = 0 + 0
> | |■
> |-◇分岐: 【2】 [ CSelf12[発射元の向き] が 6 と同じ ]の場合↓
> | |■変数操作: CSelf12[発射元の向き] = 2700 + 0
> | |■変数操作: CSelf14[玉移動値X] = Sys118:[読]タイルサイズ + 0
> | |■変数操作: CSelf15[玉移動値Y] = 0 + 0
> | |■
> |-◇上記以外
> | |■条件分岐(変数): 【1】 CSelf12[発射元の向き] が 1 と同じ 【2】 CSelf12[発射元の向き] が 3 と同じ
> | |-◇分岐: 【1】 [ CSelf12[発射元の向き] が 1 と同じ ]の場合↓
> | | |■変数操作: CSelf12[発射元の向き] = 450 + 0
> | | |■変数操作: CSelf14[玉移動値X] = Sys118:[読]タイルサイズ * -1
> | | |■変数操作: CSelf15[玉移動値Y] = Sys118:[読]タイルサイズ + 0
> | | |■
> | |-◇分岐: 【2】 [ CSelf12[発射元の向き] が 3 と同じ ]の場合↓
> | | |■変数操作: CSelf12[発射元の向き] = 3150 + 0
> | | |■変数操作: CSelf14[玉移動値X] = Sys118:[読]タイルサイズ + 0
> | | |■変数操作: CSelf15[玉移動値Y] = Sys118:[読]タイルサイズ + 0
> | | |■
> | |-◇上記以外
> | | |■
> | |◇分岐終了◇
> | |■条件分岐(変数): 【1】 CSelf12[発射元の向き] が 7 と同じ 【2】 CSelf12[発射元の向き] が 9 と同じ
> | |-◇分岐: 【1】 [ CSelf12[発射元の向き] が 7 と同じ ]の場合↓
> | | |■変数操作: CSelf12[発射元の向き] = 450 + 0
> | | |■変数操作: CSelf14[玉移動値X] = Sys118:[読]タイルサイズ * -1
> | | |■変数操作: CSelf15[玉移動値Y] = Sys118:[読]タイルサイズ * -1
> | | |■
> | |-◇分岐: 【2】 [ CSelf12[発射元の向き] が 9 と同じ ]の場合↓
> | | |■変数操作: CSelf12[発射元の向き] = 3150 + 0
> | | |■変数操作: CSelf14[玉移動値X] = Sys118:[読]タイルサイズ + 0
> | | |■変数操作: CSelf15[玉移動値Y] = Sys118:[読]タイルサイズ * -1
> | | |■
> | |-◇上記以外
> | | |■
> | |◇分岐終了◇
> | |■
> |◇分岐終了◇
> |■
> ◇分岐終了◇
> ■ピクチャ表示:8888 [左上]ファイル「Picture/エネルギー弾.png」 X:CSelf10[玉座標X] Y:CSelf11[玉座標Y] / 0(0)フレーム / パターン 1 / 透 255 / 通常 / 角 CSelf12[発射元の向き] / 拡 100% / カラー R[100] G[100] B[100]
> ■回数付きループ [ 10 ]回
> |■ピクチャ移動:8888 相対X:CSelf14[玉移動値X] Y:CSelf15[玉移動値Y] / 1(0)フレーム / パターン 同値 / 透 同値 / 通常 / 角 同値 / 拡 100% / カラー R[100] G[100] B[100]
> |■イベントの挿入: CSelf13 = コモン217:[ ヒットチェック ]
> |■条件分岐(変数): 【1】 CSelf13 が 1 と同じ
> |-◇分岐: 【1】 [ CSelf13 が 1 と同じ ]の場合↓
> | |■ループ中断
> | |■
> |◇分岐終了◇
> |■ウェイト:3 フレーム
> |■
> ◇ループここまで◇◇
> ■ピクチャ消去:8888 / 0(0)フレーム
> ■
> と
> 命中計算コモン
> ■変数操作: CSelf4[当たり判定] = 0 + 0
> ▼
> ▼
> ■変数操作+: CSelf10[矢画面X] = ピクチャ:8888 の X座標
> ■変数操作+: CSelf11[矢画面Y] = ピクチャ:8888 の Y座標
> ▼
> ■変数操作: CSelf12[矢マスX] = CSelf10[矢画面X] / Sys118:[読]タイルサイズ
> ■変数操作: CSelf13[矢マスY] = CSelf11[矢画面Y] / Sys118:[読]タイルサイズ
> ▼
> ▼
> ■変数操作: CSelf14[スクロールマス数X] = Sys104:Xスクロール値 / Sys118:[読]タイルサイズ
> ■変数操作: CSelf15[スクロールマス数Y] = Sys105:Yスクロール値 / Sys118:[読]タイルサイズ
> ■変数操作: CSelf12[矢マスX] -= CSelf14[スクロールマス数X] + 0
> ■変数操作: CSelf13[矢マスY] -= CSelf15[スクロールマス数Y] + 0
> ▼
> ▼
> ▼
> ▼ 敵サーチ開始
> ■変数操作: CSelf16[チェックID] = -1 + 0
> ■回数付きループ [ 100 ]回
> |■変数操作: CSelf16[チェックID] += 1 + 0
> |■変数操作+: CSelf17[イベントID] = X:CSelf12[矢マスX] Y:CSelf13[矢マスY]のイベントID
> |■条件分岐(変数): 【1】 CSelf17[イベントID] が 0 以上
> |-◇分岐: 【1】 [ CSelf17[イベントID] が 0 以上 ]の場合↓
> | |■デバッグ文:\cself[17]
> | |■変数操作: CSelf4[当たり判定] += 1 + 0
> | |■キャラエフェクト:キャラ[CSelf17[イベントID]][フラッシュ] R200/G0/B0 (20)フレーム
> | |■
> |◇分岐終了◇
> |■
> ◇ループここまで◇◇
> ■
> を作りました。
> [やってみた結果、どううまくいかないか]
> 玉は出るのですが、座標があらぬ方向を示しているのか目の前のマップイベントに当たっても反応しません。
> それどころか変な方向のマップイベントが反応したりします。
> 数式からタイルサイズを消したりなどもしてみましたが、それでも全く反応しません。
>
> どうすれば解決出来るでしょうか。
コモンイベント「ヒットチェック」(命中計算コモン)の中で
■変数操作: CSelf12[矢マスX] -= CSelf14[スクロールマス数X] + 0
■変数操作: CSelf13[矢マスY] -= CSelf15[スクロールマス数Y] + 0
の「−=」の部分は「+=」だと思われる。(リンク先の設定例が間違えている)
100回のループ処理は、同じ座標で100回イベントIDを調べても意味が無いと言えそう。
コモンイベント「ヒットチェック」は、以下のようになるかと思います。
■変数操作: CSelf4 = 0 + 0
■変数操作+: CSelf10 = ピクチャ:8888 の X座標
■変数操作+: CSelf11 = ピクチャ:8888 の Y座標
■変数操作: CSelf10 += Sys104:Xスクロール値 + 0
■変数操作: CSelf11 += Sys105:Yスクロール値 + 0
■変数操作: CSelf10〜CSelf11 /= Sys118:[読]タイルサイズ + 0
■変数操作+: CSelf17 = X:CSelf10 Y:CSelf11のイベントID
■条件分岐(変数): 【1】 CSelf17 が 0 以上
-◇分岐: 【1】 [ CSelf17 が 0 以上 ]の場合↓
|■変数操作: CSelf4 = 1 + 0
|■キャラエフェクト:キャラ[CSelf17][フラッシュ] R200/G0/B0 (20)フレーム
|■
◇分岐終了◇
■
取りあえずこれで最低限の当たり判定の処理はできるでしょう。