フォーラムへの返信
-
投稿者投稿
-
MYTH参加者
>>MOKUZUさん
こんにちは。
配列の箱という例えですが、これは棚の中に箱を入れて好きな場所から中身を取り出せる、ということになります。
三次元の配列はいくつも棚が重なって立体的になっている…ということだと思います。棚は横と縦にそれぞれ番号がついており、これがインデックスです。これを指定することでどの箱を取り出すかを指定できるというわけです。
インデックスを(3,4)で指定すれば、箱は棚の左から三番目、上から四番目の場所から取り出されます。
アクションで「現在の場所」を変更できますが、これは「箱の位置をxだけ指定する」などインデックスを省略したとき、y座標はそのままで指定したx座標から箱を出す…など残りの情報を補ってくれたり、インデックスに1を追加して隣の箱を取り出したり…など何かと便利です。配列オブジェクトに格納できる値は文字列か数字かを予め決めておかなければならないため、今回はプロパティの「配列の種類」を数字配列にしています。
サンプルではフレーム開始時に値を読み込み、カウンターに反映します。
左クリックでグローバル変数に五つの乱数を生成、その後zキー押下で値を記録します。
乱数は何度でも変更できます。
再起動時に値が変更されているのが確認できると思います。私の語彙力の低さが露呈するような文章で申し訳ないのですが、参考になれば幸いです。
Attachments:
You must be logged in to view attached files.MYTH参加者>>MOKUZUさん
私もフォーラムにおいて何度も初歩的な質問でお世話になっていますので、自分で試してみて難しいようであれば遠慮なく質問されてもよろしいかと思います。
(ASDさんはスゴイ、本当にスゴイ)CF2.5のユーザー向けにDiscordチャンネルもあり、そちらでは初歩的な質問でも自由に聞けますので、そちらを利用されるのも手だと思いますよ(^^)/
CF2.5に関しては情報が少ない(ヘルプだけだと解らないことが沢山ある)ので、貴重な情報源になること請け合いです。
(結構高度な質問が飛び交ってますが…)配列は便利なオブジェクトで、試してみると手放せなくなります(私も最近使い始めました)。
二次元や三次元の箱を構築して、そこに値を記録できるという認識です。
文字列か数字で選択できるのも強みですよね。
編集する場所は指定することもできるほか、インデックスで隣の箱へ順番に移動することもできます。
また、最初に指定した配列の範囲外に値を書き込むと、配列が拡張できたりします。
配列の内容をファイルで入出力ができるのも大きいです。高速ループは少し慣れが必要ですが、つまりは「他のイベントより多い回数実行してくれる!」ということだと考えています。
foreachループもややこしく、私自身よくわかっていません(´;ω;`)
wikiではこちらのページで何とか少し理解出来ましたので、よろしければ確認なさってください。私もCF2.5を使い始めてまだ2年弱程の半端者ですが、解る範囲であればフォーラムやDiscordチャンネルなどで微力ながらお手伝い致します。
(イベントの理解を試みると、どのような分野の内容でも勉強になるので有難い…)MYTH参加者>>MOKUZUさん
そのままアプリケーションに使用していただけるということで、大変光栄に思います。
Str$やVal関数など、名前が難しそうだしよくわからない…と自分も最初は思いましたが使い方は意外と簡単で、使い慣れるとかなり便利になります。
数式には文字列しか入力できないものと数字しか入力できないものとで決まっているので、私もただ入力できる形にしているという認識で使っています(^O^)
(条件の「2つの一般値を比較」などは例外的にどちらでも入力できます)一からいくつもプログラムを作ることが出来るというのは非常に凄いことだと思います(自分は同じジャンルのものばかり作っているので…)。
今回の検証で私としても大変参考になりました。こちらこそ有難うございました。MYTH参加者補足の説明です。
ノードの移動先イベントやそのタイマーイベントに関してですが、数字をそれぞれあてはめずに変数の値を用いることで短縮することができます。
今回の場合は変数の「現在位置」に従ってパスを変更しています。
しかしCF2.5では文字列と数字は明確に区別されているので、そのままでは使用できません。Str$は便利な関数で、数字を文字列に変換することができます。逆に文字列を数字に変換したい場合はValを用います。
サンプルでは数字を文字列に変換しているので、パス動作の「01」など名前の数字が一桁になっているノードの前についている0は無くしています。
MYTH参加者>>MOKUZUさん
こんにちは。
パス動作は使い方が難しい部分ですよね。
どうにかパス動作のまま戻す方法はないかと模索した結果、成功したのでサンプルを添付いたします。
パス動作は始めたての頃に少し触ったぐらいで使い方はよくわからなかったのですが、今回試してみて判明したのは、パス動作開始後に発動すると便利な二つのパス動作のアクションです。
「ノードに移動」は指定したノードで移動を停止します。
「ノードを分岐」は指定したノードからの移動を開始します。
「分岐」という言い方はわかりづらいですが、つまりはパス動作が分岐するのではなく開始位置が変更できるという意味だと思われます。サンプルではフレーム移行時にグローバル変数でプレイヤーのx座標とy座標を記録し、同時に一度座標を記録したことを意味する「移動保存」の変数を1にしています。
「移動保存」が1の時、すごろくのフレーム開始時に保存した座標から位置を復元します。
開始時の移動も最初のノードを一つ消していますので高速移動は用いていません。また、パス動作だけで移動と停止を扱うのは面倒なので、プレイヤーの動作を「停止」と「パス動作」の二つに分け、移動する時だけパス動作にしています。これはサイコロの目が確定したときに「ノードを分岐」で開始ノードを変更して移動を開始する際に行います。
スクロールに関しては全ての処理が済んでからの方が正確に動作すると考えて最も下に配置しましたが、今回の場合は特に変化はないかもしれません。
内容に関しては以上です。説明は拙くなりましたがサンプルで是非ご確認ください。
- この返信は5年、 4ヶ月前にMYTHが編集しました。
Attachments:
You must be logged in to view attached files.MYTH参加者全て並べ替える方も作りました。
トランプは一つのオブジェクトにまとめられ、乱数のプールも一つになっています。
ここでアニメーションフレーム13以降のハートの番号は13~25になりますので、比較時には二値の差が13である場合を同じ数字として判定しています。
トランプのマークが三つや四つになる場合はそのままではいけないので、更に条件に差の値を26、39と適宜追加すると適用できると思います。
また、トランプクリック時のイベントの条件に「フラグ0がオフの時」と追加されていますが、これはクリック数が0の時に一度選択しただけで2に増加するのを防ぐためです。クリック数の増加と同時にフラグはオンに、一度左クリックから手を離すことでフラグはオフになり二枚目を選択可能になります。このイベントは異なるトランプを区別するのに必要となります。サンプルが二つありますが差の計算方法を改善したものが1.zipです。
変更点は以上の通りです。ご確認願います(^^ゞ
Attachments:
You must be logged in to view attached files.MYTH参加者>>MOZUKUさん
こんにちは。
オブジェクトに値を割り振ってランダムに並び替えるのは難しいですよね。
そこでここは発想の逆転で、最初で配置されているオブジェクトにランダムな値を与えよう!ということになります。
かといって通常の乱数生成だと値が被ったりしてかなり面倒だったりします。
そこで便利なのが、範囲を指定した乱数のプールを作り、そこから重複しない値を取り出してくれる「Random Multipool object」です。サンプルにおいて各トランプにはフレーム開始時にこのプールからforeachループで番号を与え、トランプの数字はそれに連動して変更されます。
また、表向きにしたトランプ同士の数字の比較はそのままだと難しいので、それぞれカードを表向きにした時に番号をグローバル変数に記録し、比較の際はそれを利用しています。
この乱数生成のエクステンションは存在自体は知っていたものの、私自身今回で初めて使ったものなのであまりまとまってはいないイベントですが、ちゃんと動作はします!
それから、クローバーとハートの位置は入れ替わっていませんが同様のエクステンションでトランプを一つのオブジェクトにまとめて応用すればできると思います(´・ω・`)Attachments:
You must be logged in to view attached files.MYTH参加者>>kiyoakiraさん
こんにちは。
仰られているのは経験値の累計が一定数に達した場合体力の増加量を増やす、ということでよろしいでしょうか。
つまり、体力の増加量は通常で5、経験値の累計が20以上で8、30以上で11、50以上で14と3ずつ増えていくならば、体力の増加量は累計値によって以下のように定まります。1~9→変化なし
10~19→5増加
20~29→5+3増加
30~49→5+3+3増加
50~→5+3+3+3増加サンプルでは、体力の増加量はイベントによって順番に3ずつ増えていきます。
そして体力の増加が終わって初めて8行目のイベントで経験値を減らします。
体力増加イベントの条件の中に「経験値≧10」が含まれていますが、これは一度体力を増加した後に同じイベントを実行し続けることのないようにするための条件です。
イベント行は上から順番に実行されますので、最後の経験値減少のイベントによって経験値は10未満となるため、体力増加イベントは続けて実行されなくなります。また、経験値減少のイベントは経験値を10減少する内容で組まれていましたが、この場合減少する前の経験値が20以上のとき適用できませんので、「経験値 Mod 10に変更」にしました。
Modは割り算の余りを計算してくれます。これによっていかなる値にも対応します。拙い説明になりましたが、参考になればと思いますm(__)m
Attachments:
You must be logged in to view attached files.MYTH参加者お役に立てたようで何よりです!
エディタ同期に関しても、説明頂いたおかげで違いを理解することができました。
こちらこそありがとうございました。MYTH参加者こんにちは。
フレームを跨いだフラグ管理についてですが、グローバル変数や文字列を利用するのは確かに面倒ですよね。
フラグはグローバルでは扱えないので、代わりにリストオブジェクトを用意して、ムービーの名前を閲覧後に文字列として追加し、その行が含まれているムービーだけを閲覧可能とするのが良いと思われます。
リストオブジェクトはアクションでリストファイルを保存・ロードする事ができます。
フレーム移行時に保存、移行先のフレームの開始時にロードすればグローバルな値のように扱えます。オブジェクト同期の範囲については、共通のプロパティの中に「グローバルオブジェクト」の項目があり、それが有効になっているオブジェクトはフレームを跨いでも変更が反映されるみたいです。
エディタ同期の「同じ名前と種類」と「同一のオブジェクト」の違いに関しては、自分もよくわかりません…
どなたか回答お願いします?MYTH参加者と思ったら既に回答ありましたね!(´・ω・`)
足し算でも分けないとなのですか…参考になりました。MYTH参加者CF2.5上では普通に計算すると小数点以下は切り捨てられる仕様みたいですね…
自分もこの仕様に長いこと気づかず色々苦労しまた(´;ω;`)
これを回避するには、式の中に「.0」のように小数を入れるのがいいです!
または式の中に利用する関数や変数に小数が含まれていると小数で計算してくれます。
オブジェクトのプロパティで設定する変数も小数点以下は入力できないので、計算に利用する際はフレーム開始時などに×1.0するとその後の計算は正しく行われます。
wikiに詳細があると思いますので、そちらも参照してください!MYTH参加者bbaさん>>
私も初心者なのですが、私なりに色々と試行した結果上手くいきましたので僭越ながら回答致しました。
説明が少々わかりづらくなってしまった部分もありましたがご参考にして頂けたようで光栄です。基本的には時間に関する値は日付&時計オブジェクト以外にも音楽や動画の再生位置など1/1000秒で表されることが多いようです。
比較してフレームは記事に記載されています通り基本的に1秒間に60回の処理が行われます。ここで条件を常に実行にし、値を1ずつ増加・減少させ、60につき1秒とすることでカウンターとします。つまりここでは1/60秒表示となります。もう一つサンプルを作成致しました。こちらはフレーム数依存でのカウントとなりますが、できるだけタイマー依存のサンプルと同じ形になるようにしています。
別個にフレーム数によるカウントを行う変数を持ったオブジェクトを用意し、その値を3600で割った商が分に、その余りを60で割った商が秒になります(数式は「(残り時間-分*3600)/60」を変形した形になっています)。
下部に表示されているのは残りのフレーム数(1/60秒)です。
こちらも合わせてご覧いただければ幸いです。Attachments:
You must be logged in to view attached files.MYTH参加者bbaさん>>
こんにちは。
こちらで簡易的に作成致しました。
カウントダウンを変更のアクションから、カウントダウン値を取得し、2秒増加させています。
ここでは1000が1秒なのでカウントダウン値に2000を足しています。
日付&時計オブジェクトに関してですが、ヘルプには数式でカウントダウン値を取得するとミリ秒表示となるとの記述がありましたが、変更時に入力する値はミリ秒であるものの数式からカウントオブジェクトで表示させたところなぜか1/100秒表示となりました。よって残り時間増加の数式においてカウントダウン値は10倍しています。
サンプルではzキー入力で2秒増加します。また、日付&時計オブジェクトは若干扱いづらいです。カウントダウンを作成したい場合は経過フレーム数を用いたイベントをお勧めします。
詳しい部分はこちらの記事に記載されています。CF2.5のゲームは『タイマーベース』ではなく『フレームベース』で作ろう
Attachments:
You must be logged in to view attached files.MYTH参加者>>garamさん
余計なことかもしれませんが、CF2.5上でアプリケーションを実行する際にショートカットキーから起動していると、F7キーはフレームを実行、F8キーはアプリケーションを実行という形になり、私の経験上F7キーで実行した場合フレーム移行のイベントを実行しようとすると、アプリケーションが終了するか何も実行しないかのいずれかになります。
フレーム移行のイベントをテストしたい場合はF8キーもしくは「アプリケーションを実行」の項目を選択するのが良いと考えます。
私自身フレーム関係のイベントで無意識にF7で実行していて失敗した経験がありますので、
もしかしたらそれが原因になっているかもしれません。- この返信は5年、 10ヶ月前にMYTHが編集しました。
-
投稿者投稿