フォーラムへの返信
-
投稿者投稿
-
MYTH参加者
>>Midorikoさん
こんにちは。
ループやインスタンスに関する重要な情報が簡潔にまとまっていて、とても解りやすく感じました。
触りたての時に、こういったものもチュートリアルとして確認しておきたかったくらいです。。
「同一オブジェクトの中の特定のオブジェクト」などは文章だけでなく実際に見てみないとさっぱりです。ForEachループでの処理に関してですが、オブジェクトの選択時にフラグを有効にしているのであれば、そのフラグの状態を条件に含めることでそのイベント行ではインスタンスの特定情報が含まれることになるので、ループを用いずとも同様の処理が行えると考えます。
もしも違った動作を想定していた場合は申し訳ありません。Attachments:
You must be logged in to view attached files.MYTH参加者>>yotubaさん
こんにちは。
拡大機能の都合上、画像の底面や右辺にあたる箇所をホットスポットにするとわずかにその外側にも画像が拡大されるため、拡大するほどにずれが発生することになります。
アニメーションエディタ等でホットスポットを指定する場合、クイックムーブ機能を用いると画像の中央や端を指定することになりますが、右辺側か底面側に設定する場合にはさらにその1px外側(X:31→32、Y:31→32など)に指定することで、ずれを回避することができます。Attachments:
You must be logged in to view attached files.MYTH参加者>>daiさん
こんにちは。
黄色のオブジェクトのような、一部で前面表示とするオブジェクトは単一であればForeachループを用いずとも各々の変数と比較することで再現することができます。
複数のオブジェクトが必要な場合を考慮し、今回は「青色のオブジェクトの変数と比較」「青色のオブジェクトと重なっている」を用いてそれぞれ対象と比較し順序を変更しています。この手法を用いていても黄色のオブジェクト同士が接近しすぎていれば正しい動作にならないため、それも改善しなければならないとすれば単純な順序変更以外での方法を考える必要が出てくるものと思われます。
(複雑な動作になりそうなので直ぐには思いつかないです…)Attachments:
You must be logged in to view attached files.MYTH参加者>>yotubaさん
こんにちは。
CF2.5に標準搭載されているリストオブジェクトは、複数のデータをリストとして扱うことができるほか、任意のパスを指定することでフォルダリストやファイルリストを取得できる機能があります。今回はフォルダ内の全てのファイルについてアクティブピクチャオブジェクトに読み込ませていますが、画像ファイルに限定するなど任意の拡張子について指定したい場合は逐一ファイル名を比較する必要があります。
Attachments:
You must be logged in to view attached files.MYTH参加者>>nodoame57さん
こちらの動作はいかがでしょうか。
アニメーション表示用のオブジェクトを一つにまとめ、数式によりアニメーションシーケンスを番号で指定することで、キャラ番号に応じたアニメーションに変更しています。
キャラクター毎のアニメーションは必ず順番通りに設定されなければならない点にご留意ください。ゲームの仕様次第では「キャラごとに異なる動作をする」「キャラの持つアニメーション数に違いがある」といったような場合より良い構成で組む方法もあるかもしれませんが、今回はこのようにシンプルな形をとっています。
数式の詳細はプロジェクトファイルをご確認ください。
Attachments:
You must be logged in to view attached files.MYTH参加者>>Midorikoさん
サンプルを頂き感謝します!
これを完全に解らなくとも組むことができたのは凄いことだと思います。
お陰様で新たに知識を深めることができました。
ForEachループの理解にはやはり十分な時間が必要ですね…
貴重な機会をいただきありがとうございます。>>ASDさん
サンプルの修正ありがとうございます!
オブジェクトの作成時に座標を関連付けることで、値が引き継げる…
基礎的かもしれませんがかなり重要なことを学びました。
もっと勉強しようと思います。衝突判定については、衝突が即時条件である時点でForEachループは不要だったんですね…
恐らくこれが現状一番良い方法のように感じます。今回は非常に良いサンプルプロジェクトを頂きました。
ご両名ともに感謝いたします。MYTH参加者>>Midorikoさん
プロジェクトのご提示に感謝いたします。
私はデベロッパ版は非導入のためデータグリッドオブジェクトの含まれるmfaデータは閲覧できませんでした(不甲斐ないです)が、ペアリングが必要ないとのことでしたので此方でどうにか再現できました。
添付ファイルのような内容で正しいでしょうか?仰る通りにいざ確認してみると、これはまたどういった流れで動作しているのかいまいち解りかねますね…
色々と試行錯誤してみましたが、どうやら条件文はForEachループに加えて必ず「[アクティブ1]と[判定]が衝突(または重なっている)」と「[判定]の変数A <> [アクティブ1]の変数A」の組み合わせでなければならず、それ以外でどれかの[アクティブ1]と[判定]を前後で入れ替えても正しく動作しなくなるようでした。サンプルプロジェクト内だと何故か最初から中央のオブジェクトに衝突判定が行われてしまっているのでまだ不完全です。
これが解明できれば、常に衝突した二つのオブジェクト同士のインスタンスを正確に特定したり、さらなる効率化や安定化が図れるように感じます。実現すればForEachにおけるかなりの伸展になるはず…!
Attachments:
You must be logged in to view attached files.MYTH参加者>>Midorikoさん
こんにちは。
以前フォーラムで同じような質問をした者です。
この手のトピックについて非常に興味がありながら今まで決定的な解決策を知らず、Midorikoさんの仰る方法に沿って組もうとしているのですが中々上手くいきません。
ForEachループ内で[アクティブ1]と[判定オブジェクト]をペアリングした場合、その他のインスタンスである[アクティブ1]や[判定オブジェクト]はそのイベント行内で扱うことができないように思います(間違っていたらすみません)。
よろしければサンプルプロジェクトを頂けないでしょうか?
私の理解力が足らず申し訳ないのですが、後学のため是非にお願いしたいです。MYTH参加者>>minadukiさん
noru123さんのご回答も踏まえ、範囲指定が動作するよう組んでみました。
また、蛇足かもしれませんが方向反転時に角度が維持されるようになっております。
イベント処理の関係から、照準のアニメーションの左方向は削除して構成しております。ご了承ください。Attachments:
You must be logged in to view attached files.MYTH参加者>>Midorikoさん
こんにちは。
以前制作した、配列オブジェクトの編集ツールを改変したものです。
部分部分で使い勝手の悪い所もあるかもしれませんが、mfaデータですのでご自由に改良できます。
詳細は同梱のreadmeをご参照ください。微力ながら、アプリケーション制作の一助となれば幸いです。
Attachments:
You must be logged in to view attached files.MYTH参加者>>Midorikoさん
こんにちは。
オブジェクト共通のアクション「破壊」は例外的で、イベント内の順番に関わらず全てのアクションの実行後に発動するという仕様があります。
このため「破壊→生成」の順番で組んだイベントも「生成→破壊」の順番で実行されてしまっているようです。
この仕様につきましてはイベントグループ「実行用」を非アクティブに、「テスト用」をアクティブにしてから実行してご確認ください。また、可変文字列が反映されないという問題に関しましては、オブジェクトのインスタンス特定の仕様によるものだと思われます。
インスタンス特定のイベントの中でインスタンスの併存による問題が生じてしまう場合には、条件の同じイベント行をインスタンス毎に分けることで解決できます。Attachments:
You must be logged in to view attached files.MYTH参加者>>minadukiさん
こんにちは。
アクティブオブジェクトとPMOの生成アクションが、各変数に固定値を記録するアクションよりも後に設定されていたようです。
この場合、「生成→ペアリングして生成→…→ペアリングして生成→ペアリング」という形になりますので、結果的にペアリングが遅れた状態となってしまいます。ご提示いただいたサンプルデータはこのアクションの順番を変えることで改善しました!
また、オブジェクト同士のペアリングを行う場合、固定値の記録はどちらか一方のオブジェクトが行っていれば、即時条件(緑色の条件)で主体にするオブジェクトに関わらず各イベント行内における変数比較で主体のオブジェクトを変える(「固定値と比較」などを利用して主体にする)ことで、十分に機能させることができます。(猛烈に伝わりにくい説明で申し訳ないです)
ぜひサンプルプロジェクトをご確認いただければと思います。
インスタンス特定につきましてはこちらの質問も是非ご確認ください。
Attachments:
You must be logged in to view attached files.MYTH参加者>>Midorikoさん
こんにちは。
CF2.5のForeachループという機能はかなり便利ですが、同時に少しまどろっこしい部分もありますよね。
また、あまり詳細な解説のあるサイトがない機能でもあります。私も完全に理解出来ているとは言えません…
使っていてある程度解ったことを述べさせていただきます。「高速ループをオブジェクトの個数分実行する」という説明をされたりしますが、Foreachループにはもっと重要な役割があります。
フレームエディタ上で複製したり、アクション「オブジェクトを作成」で生成するなどしてできた複数の同一オブジェクトは、イベントで制御する際に「どのオブジェクトに対して実行するか」の情報が必要になるので、それを複数のオブジェクトの中から絞る必要があります。
これを「インスタンスの特定」と呼びます。高速ループにインスタンス特定の機能が備わったものがForeachループです。
インスタンス特定に関しては以下のトピックをご覧ください。
私は説明が本当に下手なので…基本的に、オブジェクトのインスタンスを特定するのは「そのオブジェクトの条件」だけです。
固定値の比較の条件においてもそうであり、カウンターオブジェクトをペアリングしたい場合は「カウンターの条件による変数比較」である必要があります。
イベントエディタでは視覚上同じでも、使っている条件のオブジェクトによって全く動作が異なってくるため、特に注意しなければなりません。Foreachループを発動したオブジェクトに対してペアリングするには、「そのオブジェクトの条件による変数比較」を用いますが、今回のカウンターオブジェクトのように変数を持たせることができない場合は「固定値を比較」を用いてください。
また、Foreachループは各オブジェクトのアクションから発動するものなので、条件として呼び出す時にも発動したオブジェクトと同一のものを指定してください。異なるオブジェクトにしてしまうと正しく機能しなくなります。
サンプルプロジェクトには幾つかの失敗例も追加していますので、合わせてご覧いただければと思います!
Attachments:
You must be logged in to view attached files.MYTH参加者>>KIRINさん
こんにちは。
仰られているように、変数のイベントは組み方によっては違うアクションでも同様の結果にすることはできます。
これらに動作上の差異はないと思われますが、状況に応じてどのアクションを選ぶかによって数式の簡潔さや組みやすさ、後から確認する際のわかりやすさなどが変わります。MYTH参加者>>Midorikoさん
こんにちは。
色々検証してみましたが、おそらくFindString関数は行内の先頭部分でしか判定しないようです。
リストオブジェクトの数式だけでは検索イベントにおいて不十分に思えますので、サンプルプロジェクト内では標準機能である特別オブジェクトの数式「文字列内の文字列を検索」を利用し、一致した項目を削除するという一連の動作を高速ループによって実行しています。標準搭載のオブジェクトは、基本的にオブジェクトのプロパティから「バージョン情報」タブ(黄色い吹き出しのアイコン)からヘルプを参照して確認できます。
また、特別オブジェクトの数式に関しましても以下のページにて詳細に解説がなされています。こちらのページには私も幾度となくお世話になっています。是非ご確認ください。
数式の内容につきまして
リストオブジェクトの数式「文字列を検索」(FindString関数)について
(ヘルプページ→リストオブジェクト→数式を参照)FindString( “リスト”, >検索する文字列<, >フラグ< )
>検索する文字列<を、リストオブジェクト内の>フラグ<番号の行の位置から検索します。
行の末尾まで達した場合は先頭から再び検索を開始します。特別オブジェクトの数式「文字列内の文字列を検索」について
(数式リファレンス→文字列を参照)Find(>検証する文字列<, >検索する文字列<, >最初の文字<)
>検証する文字列<を検索対象、>検索する文字列<を検索項目として、>最初の文字<の文字番号から検索を開始します。
検索項目が存在すればその位置を返し、存在しなければ-1を返します。Attachments:
You must be logged in to view attached files. -
投稿者投稿