オブジェクトが重なっている割合を判定する方法につきまして

ホーム フォーラム CF2.5使用法全般 オブジェクトが重なっている割合を判定する方法につきまして

  • このトピックには9件の返信、3人の参加者があり、最後にMidorikoにより4年、 2ヶ月前に更新されました。
10件の投稿を表示中 - 1 - 10件目 (全10件中)
  • 投稿者
    投稿
  • #33644
    Midoriko
    参加者

    お世話になっています、イベントの組み方について質問です。

    ふたつのオブジェクトが衝突する・重なっている判定は日常的に使いますが、
    それらのオブジェクトが重なっている割合(%)や
    ピクセル数を判定する方法はありますでしょうか?

    例えばPMOで接地している場合もイベント上は「重なっている」と
    判定されますが、その状態と50%埋まっているような状態、
    100%地中に埋まっている状態を判別するのが目的です。

    判定用のオブジェクトを追加することでも対応可能だと思いますが、
    オブジェクト数や処理の増加を抑えたいのと、他ケースへの応用や後学も含め
    可能であれば直接判定する方法を知っておきたいです。

    よろしくお願いします。

    #33649
    ASD
    キーマスター

    – サンプルプログラム
    https://blog.clickteam.jp/wp-content/uploads/2020/02/cf25_blog_2020-02-27_重なっているピクセル数取得.zip

    オブジェクト同士の端の座標を取得して計算することにより得られると思います。

    #33651
    Midoriko
    参加者

    ASD様
    ご回答ありがとうございます、お返事が遅れましてすみません。
    今回も綺麗なイベントをサンプルとしてご提示下さり、たいへん参考になります。
    このようにシンプルな計算式で出せるのですね。
    Abs関数で絶対値を取得できるのも知らなかったので勉強になりました。

    すみません、オブジェクトがシンプルな四角形の場合
    頂いた形で完全に対応できるようですが、
    オブジェクトに凹凸があるなど複雑な形状の場合は端の座標から計算する形では難しそうです。
    実際そのようなケースの方がずっと多くなってしまいます。

    さまざまなケースに対処したいため
    オブジェクト同士がどのような形状・動作でも
    それらが重なっている割合を汎用的に調べる方法があれば
    引き続きご教授頂けるとたいへん助かります。

    #33653
    ASD
    キーマスター

    オブジェクトの形状に対応させるなら判定オブジェクトを付けなければ難しいと思います。

    PMOで埋まっている割合がわからないと直面する問題とは具体的に何でしょうか?もしかしたら割合など求めなくても別の解決法があるかもしれません。

    #33658
    Midoriko
    参加者

    (読みづらい部分を編集したら消えてしまいました;
    多重投稿になってたらすみません)

    お返事ありがとうございます。
    やはり難しいですか‥了解しました。

    なお、具体的な問題としては、まずアイテムなどのオブジェクトを
    「壁に埋まっていない状態で、かつ接地はさせる」というのを
    簡潔にするのが目的です。
    アイテムの発生位置・数はランダムで、壁の形状などもランダム、
    壁は追加で発生することもあります。
    現在は
    1.ランダム位置にアイテム生成後、壁に重なっているかどうかを判定

    2.壁に重なって生成された場合は再び位置をランダムに

    3.重ならなくなるまで繰り返し、重ならなくなった(空中に移動できた)
    場合はフラグを立て動作で落とし、壁に触れたら停止
    という形で組んでいます。

    原因はまだ分かりませんが それでも壁に埋まってしまう場合があり、
    壁の追加発生や、今後移動する障害物を作った場合にも対応できません。
    (オブジェクト数や処理を抑えるためPMOは使っていませんが、
    使ったほうが簡単かなと思っています;)

    またPMOで制御しているキャラクターが
    複雑な動作により壁に埋まってしまった場合に、
    安全弁となるイベントを組む際にもとても有効そうだと思いました。
    (現在はキャラクターの左右・上下・中心に判定用オブジェクトを置いており、
    中心の判定が壁に触れたら「埋まってしまった」と判定させています)

    以上のように他の方法でも対応は可能なのですが、
    判定オブジェクトと処理の増加、調整の難しさなどいくつかの点が、
    重なっている割合の判定ひとつで解決できそうだったので、
    もし可能ならと思い質問させて頂きました。

    現状は難しいとのことで、差し支えなければ要望として
    開発の方へお伝え頂けると助かります。

    #33693
    noru123
    参加者

    マップチップは32×32ですか?
    それとも一枚絵ですか?

    #33694
    noru123
    参加者

    めり込まないような位置にアイテムを確実に生成できるように、ざっくり作ってみました。
    時間があまりなく、生成アイテムの数が若干合わないので、微調整が必要かもしれませんが考え方はこんな感じです。

    Attachments:
    You must be logged in to view attached files.
    #33696
    Midoriko
    参加者

    こんにちは、わざわざサンプルを作って頂きありがとうございます‥‥!

    マップ生成に関しては一枚絵を使っており、
    障害物と空間が1つのチップの中に混在しているためややこしくなっています。
    サンプルのように壁か空間かを配置事に判別できる形ではないので
    同じ方法は取れないのですが、
    一応 実際に壁部分に重なっているかどうかの判定を行うことでなんとか処理しています。

    ともあれ、配列オブジェクトの使い方など参考にさせて頂きます。
    ありがとうございました!

    #33700
    noru123
    参加者

    これは一枚絵でもマップチップでも判定できるので、障害物を一枚絵1個に変換したものを一応添付しておきます。

    Attachments:
    You must be logged in to view attached files.
    #33702
    Midoriko
    参加者

    新しいサンプルありがとうございます。
    一応 現状も障害物と重なっていないところから落とす方法を取っております。
    配列オブジェクトを使えばアイテムを作成した座標をチェックすることで
    同じ場所に重ねて配置されないようにでき、便利ですね。

    参考にさせて頂きます。

10件の投稿を表示中 - 1 - 10件目 (全10件中)
  • このトピックに返信するにはログインが必要です。