ホーム › フォーラム › CF2.5使用法全般 › 同オブジェクト同士の条件設定につきまして
-
投稿者投稿
-
2021-01-02 4:53 am #34356Midoriko参加者
あけましておめでとうございます。お世話になっています。
おかげ様で無事バージョンアップでき、一段落しました。
色々と助かりました。質問です。
「異なる(または同じ)特性を持つ複数の同オブジェクト」を
1つのイベント条件に含める方法を教えて下さい。
過去には片方だけの条件を見るケースしかなく、
何となくで実装できてしまったので理解しておきたいです。例えば、
『変数A = 1 の[アクティブ1]が
変数A <> 1 の[アクティブ1]と重なったとき』
『変数A = 1 の[アクティブ1]が
変数A = 1 の[アクティブ1]と重なったとき』
というそれぞれの条件設定はどのようにすればよいのでしょうか。
新規プロジェクトでざっくり試してみましたが、
forEachLoopを使っても使わなくてもうまくいきません。よろしくお願いします。
2021-01-04 1:51 am #34361ASDキーマスター同じオブジェクト同士が衝突してそれぞれに異なるアクションをさせるのに単一のイベント行だけでは無理です。
・[アクティブ1]が[アクティブ1]と重なったとき
・変数A = 1 [アクティブ1]
- 変数A = 1 の[アクティブ1]に対してのアクション・[アクティブ1]が[アクティブ1]と重なったとき
・変数A <> 1 [アクティブ1]
- 変数A <> 1 の[アクティブ1]に対してのアクションのように2行に分ける必要があります。
しかし、この場合の副条件は、衝突する自分側の状態しか判定できませんので、相手側の状態も考慮する場合には、やはり別の判定オブジェクトなどを付随させてそれと衝突させるようにし、同一オブジェクト同士の衝突にならないように組むしかないでしょう。– サンプルプログラム
https://blog.clickteam.jp/wp-content/uploads/2021/01/cf25_blog_2021-01-04_同じオブジェクト同士の衝突.zip2021-01-04 10:31 am #34362Midoriko参加者いつもお世話になっています。
お返事とサンプルありがとうございます。やはり条件ごとに判定用のオブジェクトを用意して組むのが安定のようですね。
なるほどです、大変参考になりました。今年もよろしくお願いいたします。
2021-01-12 11:21 pm #34393Midoriko参加者追加の質問があります。
実際やってみて気づいたのですが、判定用オブジェクトを作るとして、
結局どのようにイベントを組むのがベターなのか悩んでいます。
どちらのオブジェクトの状態も考慮する場合です。『変数A = n の[アクティブ1]が、
変数A <> n の[アクティブ1]と重なったとき』
という条件を実現したいとします。変数Aに入るのは0と1だけ、というケースなら判定用オブジェクト2種類で良いのですが、
例えば0~99まである場合、変数Aの値に応じて100通りの判定用オブジェクトを当て、
それぞれに条件を作るというのは非現実的です。判定用オブジェクトを同一のオブジェクトグループとして扱うと、
結局判定用オブジェクトを利用しない場合と同じ壁にぶつかるように思います。*書いていて思いついたのですが、オブジェクト[判定管理]を作っておき、
forEachLoopを使って[判定管理]の【[アクティブ1]の「固定値」】番目の変数に
それぞれの変数Aを代入しておき比較‥‥?
のような形で何となく‥‥できるような‥‥?ちょっと自信がありません。
また他に良い方法があれば教えて頂ければ幸いです。実際ゲームで代入する変数は1~5なので最悪全パターンを
総当たり形式で作っても良いのですが、後学のためお願いいたします。2021-01-15 8:27 am #34394Midoriko参加者お疲れ様です。たぶんイケた‥と思いますのでご報告です。
『変数A = n の[アクティブ1]が、
変数A <> n の[アクティブ1]と重なったとき』
を[アクティブ1]と[アクティブ1 判定]の2種類のオブジェクトで実現します。1.すべての[アクティブ1]の同レイヤーに[判定]を重ねておきます。
(forEachLoopを使い固定値を変数に入れてペアリング)
このとき、ペアリングしている[アクティブ1]の変数Aを判定の変数Aにも入れておきます。2.
・[アクティブ1]のループ中
・[判定]のペアリング用変数 = [アクティブ1]の固定値
・[判定]と[アクティブ1]が衝突(または重なっている)
・[判定]の変数A <> [アクティブ1]の変数A
と、「本体同士・判定同士の衝突」ではなく「判定オブジェクトと本体の衝突」
のようにすることで何とか動きました。
ペアリングしている[アクティブ1]や変数Aが等しいものでは条件は満たされず
変数Aが異なるオブジェクトに当たった場合にだけ実行されます。
判定用オブジェクト1種類のみ・イベント1行ですべて網羅できます。若干ゲリラ的な感じもしますし、変数Aが同じものをぶつける場合には
異なる組み方をしなければいけないので
(ペアリングされている[アクティブ1]で実行されてしまうため)、
よりベターな方法があれば教えて頂ければ助かります。2021-01-16 12:50 pm #34395MYTH参加者>>Midorikoさん
こんにちは。
以前フォーラムで同じような質問をした者です。
この手のトピックについて非常に興味がありながら今まで決定的な解決策を知らず、Midorikoさんの仰る方法に沿って組もうとしているのですが中々上手くいきません。
ForEachループ内で[アクティブ1]と[判定オブジェクト]をペアリングした場合、その他のインスタンスである[アクティブ1]や[判定オブジェクト]はそのイベント行内で扱うことができないように思います(間違っていたらすみません)。
よろしければサンプルプロジェクトを頂けないでしょうか?
私の理解力が足らず申し訳ないのですが、後学のため是非にお願いしたいです。2021-01-16 2:35 pm #34396Midoriko参加者こんにちは、お返事ありがとうございます。
ん””~ 了解です。
一応ウチで作ってるゲームのその部分のプログラムだけ抜き出しました。
なんで動いてるかと言われても解説はできませんが‥‥・[判定]のペアリング用変数 = [アクティブ1]の固定値
見直したらこの条件は入れていませんでした。35行目です。
ともあれ、同特性のオブジェクトと異なるものとで住み分けはできています。素人の作ったものなのでどうかと思いますが、
多少でも参考になりましたら幸いです。Attachments:
You must be logged in to view attached files.2021-01-16 4:18 pm #34398MYTH参加者>>Midorikoさん
プロジェクトのご提示に感謝いたします。
私はデベロッパ版は非導入のためデータグリッドオブジェクトの含まれるmfaデータは閲覧できませんでした(不甲斐ないです)が、ペアリングが必要ないとのことでしたので此方でどうにか再現できました。
添付ファイルのような内容で正しいでしょうか?仰る通りにいざ確認してみると、これはまたどういった流れで動作しているのかいまいち解りかねますね…
色々と試行錯誤してみましたが、どうやら条件文はForEachループに加えて必ず「[アクティブ1]と[判定]が衝突(または重なっている)」と「[判定]の変数A <> [アクティブ1]の変数A」の組み合わせでなければならず、それ以外でどれかの[アクティブ1]と[判定]を前後で入れ替えても正しく動作しなくなるようでした。サンプルプロジェクト内だと何故か最初から中央のオブジェクトに衝突判定が行われてしまっているのでまだ不完全です。
これが解明できれば、常に衝突した二つのオブジェクト同士のインスタンスを正確に特定したり、さらなる効率化や安定化が図れるように感じます。実現すればForEachにおけるかなりの伸展になるはず…!
Attachments:
You must be logged in to view attached files.2021-01-16 7:40 pm #34400Midoriko参加者お返事ありがとうございます!
サンプルも組んで頂きありがとうございます。
たぶん非常に近い挙動だと思います。
こちらも、一応データグリッドオブジェクトを削除したものをアップし直しますね。
開けなかったとのことで失礼しました。これで大丈夫でしょうか‥‥?仰るようにForEachの解明に繋がるなら少しでもお力になれればと思います。
わたしは基礎知識不足なので、MYTH様やキーマスターのASD様に
突っ込んだところを探ってもらえれば非常に助かりますね。Attachments:
You must be logged in to view attached files.2021-01-17 2:26 am #34403ASDキーマスター>サンプルプロジェクト内だと何故か最初から中央のオブジェクトに衝突判定が行われてしまっているのでまだ不完全です。
判定の作成アクションで、作成座標を親となる本体オブジェクトに関連付けずに設定しているので、子となる判定オブジェクトは、どの親の固定値と比較値を引継ぐかが、ランダムになります。
判定オブジェクトの作成位置に本体オブジェクトが設置されているため、判定オブジェクトが各本体オブジェクトに位置同期する前に重なり判定が発動し異なる比較値の判定と重なったとして色が変わったのでしょう。親子関係を持たせるオブジェクトを作成時は座標を親オブジェクトに関連付けると、その親から値等を引き継ぐようになります。
– サンプルプログラム
https://blog.clickteam.jp/wp-content/uploads/2021/01/cf25_blog_2021-01-17_衝突インスタンス判定2.zip2021-01-17 10:47 am #34404MYTH参加者>>Midorikoさん
サンプルを頂き感謝します!
これを完全に解らなくとも組むことができたのは凄いことだと思います。
お陰様で新たに知識を深めることができました。
ForEachループの理解にはやはり十分な時間が必要ですね…
貴重な機会をいただきありがとうございます。>>ASDさん
サンプルの修正ありがとうございます!
オブジェクトの作成時に座標を関連付けることで、値が引き継げる…
基礎的かもしれませんがかなり重要なことを学びました。
もっと勉強しようと思います。衝突判定については、衝突が即時条件である時点でForEachループは不要だったんですね…
恐らくこれが現状一番良い方法のように感じます。今回は非常に良いサンプルプロジェクトを頂きました。
ご両名ともに感謝いたします。2021-01-17 12:58 pm #34405Midoriko参加者MYTH様、ASD様、貴重なサンプルと情報ありがとうございます!
子オブジェクト作成時に親座標に重ねるのは、
なんとなくその方が分かりやすいと思って無意識に行っていましたが
そんな仕掛けがあるんですね。わたしも大変勉強になりました。ForEachは深い‥‥
今回困っていた部分がひとつ片付きましたし、
ForEachは避けて通れないので今後にも色々活かせそうです。
本当にありがとうございました‥‥! -
投稿者投稿
- このトピックに返信するにはログインが必要です。