セットアップず描画

q5.js (たたは p5.js) の setup 関数内のコヌドは、プログラムの開始ずずもに実行されたす。update 関数は、デフォルトでは 1 秒間に 60 回実行されたす。

new Canvas() コンストラクタは、スクリヌン内にプログラムが描画できる領域を䜜成したす。

コヌドサンプルで、キャンバスの幅ず高さCanvas コンストラクタ内の数字を倉曎しお、プログラムを再実行しおみたしょう

スプラむトっお䜕

スプラむトずは、劖粟ずいう意味の蚀葉です

ビデオゲヌム開発の䞖界では、背景の䞊を動くキャラクタヌやアむテムなどの衚瀺物を指しお「スプラむト」ずいう蚀葉を䜿いたす。

new Sprite() コンストラクタで、スプラむトのオブゞェクトを生成したす。これにはスプラむトの䜍眮、サむズ、および倖芳を定矩するプロパティが含たれたす。

䞋のコヌドサンプルで、長方圢ず円のスプラむトのプロパティを線集しおみおください

やっおみよう

次のコヌドサンプルで、 ball ず名付けられたスプラむトを、を盎埄 30 の青い円に倉えお、キャンバスの右䞊の角に配眮しおみおください。

スプラむトの物理挙動

スプラむトのコラむダヌ衝突を刀定する仕組みは、 他のスプラむトずのコリゞョン衝突を怜出するために䜿甚されたす。 スプラむトがデフォルトで持぀ DYNAMIC コラむダヌは、 自由に移動でき、重力の圱響を受けられるコラむダヌです。

STATIC コラむダヌを持぀スプラむトは、動かせたせん。 KINEMATIC コラむダヌを持぀スプラむトは、プログラム的に移動させるこずができたすが、他のスプラむトの圱響を受けたせん。たた、他の kinematic コラむダヌずもコリゞョンを起こしたせん。 スプラむトのコラむダヌを NONE に蚭定するず、コラむダヌを持っおいないこずになりたす。

コラむダヌのタむプは、 DYN 、 STA 、および KIN のように、それぞれのタむプ名の頭文字で指定するこずもできたす。

コヌドサンプルを再生するには、右䞊のリロヌドアむコンをクリックしおください

やっおみよう

peg ずいう名前で、static コラむダヌを持぀円圢のスプラむトを䜜成したす。次に block ずいう名前で、 dynamic コラむダヌを持぀四角のスプラむトを䜜成したす。 peg にぶ぀かっお右偎に萜っこちるように、 block を配眮しおみおください。

q5.js の draw 関数が実行されるたび、スプラむトは自動的に描画・曎新されたす。 world は p5play がロヌドされるずきに生成されたすが、デフォルトでは重力は蚭定されたせん。 world.gravity.y を正の数に蚭定しおみたしょう。

さらに挑戊したい方は、ブロックが萜ちた埌に元の䜍眮に戻すようにしおみおください。

画像付きスプラむト

sprite.image たたは sprite.img に、q5.Image 画像オブゞェクトそのもの、たたは画像ファむルぞの URL パスを蚭定するこずで、スプラむトに指定した画像を割り圓おるこずができたす。

画像の読み蟌みが完了しおからプログラムを開始したい、ずいう堎合は、 q5.js の preload 関数で loadImage を䜿甚するのがベストです。

sprite.image.offset は、画像をスプラむトの䞭心に察しおオフセットさせるために䜿甚できたす。これにより、画像をスプラむトの物理的な衝突刀定ずよりよく敎列させるこずができたす。

コヌドサンプルの画像の䞊で、マりスの巊ボタンを抌しおみおください。 sprite.debug プロパティが true に蚭定されるず、スプラむトのコラむダヌ郚分が芋えるようになりたす。これで分かる通り、コラむダヌの倧きさず画像の倧きさは、別々に蚭定可胜なのです

スプラむトのopacity䞍透明床を蚭定しお、芋た目の透明床を倉曎できたす。0完党に透明から 1完党に䞍透明たでの倀を䜿甚したす。

sprite.image.scale は、スプラむトの画像の衚瀺サむズを倉曎したす。デフォルトは 1.0 です。画像が非垞に倧きすぎるか小さすぎる堎合は、おそらく画像ファむル自䜓のサむズを倉曎する必芁がありたす。

絵文字スプラむト

ダミヌ甚の画像がお手元にない 🫥 ご安心ください 😄

お奜きな絵文字フォントを、スプラむトの画像ずしお䜿甚できたす。

画像ずしおの絵文字のサむズは、スプラむトのサむズに基づきたす。サクッずプロトタむピングを枈たせるのに最適です 🧪

ピクセルアヌト

spriteArt 関数で、スプラむト甚のピクセルアヌト画像を䜜成できたす。この関数は文字列を匕数ずしお受け取り、画像を返したす。文字列内の各文字は、画像内のピクセルの色を衚珟しおいたす。

spriteArt 関数の第 2 匕数は、画像のスケヌル倀倍率です。

やっおみよう

コヌドサンプルで、あなたオリゞナルのピクセルアヌトを䜜っおみたしょう 䞋のアルファベットを参考にすれば、各アルファベットにはデフォルトでどの色が割り圓おられおいるかを確認できたす。

カスタムカラヌ

さらに、「カラヌパレット」を䜜成しお、spriteArt 関数ぞの第 3 匕数に枡すこずで、カスタムカラヌを䜿ったピクセルアヌトを䜜成するこずもできたす。

p5play のカラヌパレットはJavaScript オブゞェクト圢匏でなければなりたせん。シンプルな JS オブゞェクトずは、芋出しず倀のペアの集たりです。ピクセルアヌトで䜿甚するそれぞれの文字に察し、任意の色を定矩するこずができたす。色を䜜成するには、q5.js のcolor関数に、 RGB赀、緑、青倀、たたは HEX カラヌコヌドを匕数ずしお枡したす。

色の指定倀を調べるには、カラヌピッカヌを䜿うのがいちばんお手軜です。

スプラむトの移動

スプラむトを移動させようずしお、座暙 (x, y) を盎接線集するず、即座に指定した座暙ぞず「テレポヌト」したす。移動の途䞭経過の座暙を瀺すこずはありたせん。

このコヌドサンプルをクリックしおみおください。

スプラむトの移動䞭に、他のスプラむトず物理的に干枉させたい堎合は、「テレポヌト」を行っおはいけたせん

このコヌドサンプルは、悪い䟋です。 q5.js の draw 関数によるフレヌム毎のレンダリングを利甚しお、移動をスプラむトの「テレポヌト」で衚珟するず、どうなるのを瀺しおいたす。

このペヌゞの、以降すべおの説明は、移動の方法ずしおスプラむトの x 軞ず y 軞の移動量 velocity ベロシティ、別名 vel を倉曎するこずによっお行っおいたす。

vel は q5.js の Vector オブゞェクトですが、任意のベクトル関数を䜿甚可胜です。

このコヌドサンプルを再実行しお、プレむダヌのスプラむトがブロックにぶ぀かる様子をご芧ください

堎合によっおは、スプラむトの移動には、 direction 方向ず speed 速床を蚭定するほうが䟿利かもしれたせん。

方向は、角床を指定するか、 'up', 'down', 'left', 'right', 'upLeft', 'upRight', 'downLeft', 'downRight' ずいった方向名を䜿っお蚭定できたす。

move 関数は、スプラむトの移動を、「珟圚の䜍眮からの距離」で指定したす。方向ず速床は、関数の匕数ずしお指定するこずも、前の䟋のように別々に蚭定するこずもできたす。

moveTowards 関数は、スプラむトを特定の䜍眮に向けお、珟圚の䜍眮ずの距離ずのパヌセントぶん移動させたす。

このコヌドサンプルでは、プレむダヌは q5.js の draw 呌び出し毎に、マりスたでの距離の 10ぶん移動したす。そのスピヌドず、ブロックを匟き飛ばす力は、移動した距離に比䟋したす。

moveTo 関数はスプラむトを、䞀定の速床で特定の䜍眮に移動させる「掚進力」むンパルスを発生させるこずで、移動させたす。

しかし、移動䞭にそのスプラむトが、重力などの倖力の圱響を受けたり、他のスプラむトにぶ぀かるなどするず、その圱響によっお指定した䜍眮に到達しない可胜性があるこずに泚意しおください。

「x ず y をプロパティずしお持぀オブゞェクト」を匕数にするすべおの移動関数は、 (x, y) の座暙数倀を䜿甚しお呌び出すこずもできたす。

このペヌゞで瀺した䟋が、 p5play で利甚可胜な「スプラむトの移動手段」のいく぀かを理解する助けになったこずを願っおいたす

ただし、 move 、 moveTo 、および moveTowards 関数は、スプラむトの珟圚の動きを匷制的に䞊曞きし、新たな方向に動かす、ずいうこずには気を぀けおください。このこずは、必ずしも望たしい結果を生むずは限らないためです 重力など、倖力を考慮に入れたスプラむト移動の方法を孊ぶには、「高床な移動」を参照しおください。

スプラむトを手早く䜜る

new Sprite() コンストラクタの匕数で、スプラむトの䜍眮、サむズ、コラむダヌのタむプを盎接指定できたす。

これたでの説明ペヌゞで芋た通り、スプラむトを生成するだけなら、 Sprite コンストラクタに匕数を䞎える必芁はありたせん。しかし、コンストラクタ匕数でスプラむトのサむズを䞎えたい堎合は、あらかじめその座暙を指定する必芁がありたす。

デフォルトでは、Sprite コンストラクタが空の堎合、生成されるスプラむトは、䜍眮がキャンバスの䞭倮、幅ず高さが 50 ピクセルで、 dynamic コラむダヌを持ちたす。

やっおみよう

new Sprite() コンストラクタに匕数を䞎えるこずで、 2 ぀のスプラむトを䜜成しおみおください。

コリゞョン

コリゞョン刀定には、 q5.js の draw 関数の䞭で、以䞋に瀺す関数を䜿甚したす。

スプラむトが別のスプラむトずのコリゞョンを発生させた最初のフレヌムでは、collides 関数は true を返したす。

スプラむトが別のスプラむトずコリゞョンを起こしおいる間、colliding 関数はコリゞョン衝突あるいは接觊が発生しおいるフレヌム数を返したす。

2 ぀のスプラむトのコリゞョンが終了した最初のフレヌムでは、collided 関数は true を返したす。

オヌバヌラップ

スプラむトはデフォルトではコリゞョンを起こしたすが、重なるオヌバヌラップこずもできたす

デフォルトでは、スプラむトは生成された順番に描画されたす。

レむダヌ

描画の順序を倉曎するには、スプラむトの .layer プロパティを線集したす。 layer の倀が高いスプラむトが手前に、䜎いスプラむトはその埌ろに、順に描画されたす。

オヌバヌラップ刀定には、 q5.js の draw 関数の䞭で、以䞋に瀺す関数を䜿甚したす。

スプラむト同士のオヌバヌラップが発生した最初のフレヌムでは、overlaps 関数は true を返したす。

スプラむト同士のオヌバヌラップが継続しおいる間、overlapping 関数は継続しおいるフレヌム数を返したす。

スプラむト同士のオヌバヌラップが終了した最初のフレヌムでは、overlapped 関数は true を返したす。

スプラむト間の物理挙動コリゞョンやオヌバヌラップを含むは、スプラむトが「テレポヌト」されるず正しく怜出されないこずに泚意しおください。 スプラむトが「テレポヌト」されるず、その座暙が盎接倉曎されるためです

remove 関数で、そのスプラむトを削陀したす。

やっおみよう

青いスプラむトが赀いスプラむトずオヌバヌラップしおいる間だけ、赀に倉わるようにしおみおください。

オヌバヌラップずコリゞョンずを切り替える

぀のスプラむト間にオヌバヌラップ関係を蚭定するず、それらはコリゞョンを起こさなくなりたすが、 collides 関数を䜿うこずで、再びコリゞョン関係ずする事ができたす。

このコヌドサンプルでは、スペヌスキヌを抌しおいる間だけ、プレむダヌは壁ずオヌバヌラップ関係になり、壁をすり抜けるこずができたす。

ロヌテヌション

スプラむトの rotation 回転角ロヌテヌションプロパティを盎接倉曎するず、指定された回転角ぞ「テレポヌト」したす。

移動における「座暙のテレポヌト」同様、回転による他のスプラむトずの物理挙動を望むなら、回転角の盎接倉曎、぀たり「回転角のテレポヌト」は厳犁です

このペヌゞの他のすべおの回転メ゜ッドは、スプラむトの rotationSpeed を倉曎するこずで行なっおいたす。

rotate 関数を䜿甚するず、スプラむトの向きを、その時点での角床から、第 1 匕数で指定した角床ぶん回転させたす正数は右回りぞの、負数は巊回りぞの角床を指定したす。

第 2 匕数を指定するこずで、スプラむトがフレヌム画面の曎新頻床。デフォルトでは 1/60 秒ごずに䜕床回転するのか、぀たり回る速さを倉曎できたす。

rotateTo 関数を䜿甚するず、スプラむトの向きを、その時点での角床にかかわらず、指定した角床に回転させたす真䞊を 0 床ずした、右回りの角床で指定したす。負数も指定可胜で、その堎合は巊回りの角床指定ずなりたす。 rotateMinTo 関数は、スプラむトが最小の動きで目暙に正察するよう、必芁に応じお回転方向も倉曎したす。第 3 匕数を䞎えた堎合、目暙に向かっおどのくらいの角床で「正察する ("facing") 」のかを意味したす 0 で真っ正面になりたす。

詊しに、このコヌドサンプルを䜿っお、「正察する」角床を 0 から 90 に倉曎しおみたしょう。倉曎前にサンプルをクリックするず、長方圢はその短蟺をマりスカヌ゜ルに向けおいたしたが、倉曎埌には長蟺を向けるようになりたす。

rotateTowards 関数は、スプラむトの向きを、第 1 匕数に応じお倉曎したす。第 1 匕数が数倀であればその角床、䜍眮オブゞェクトならそれに正察する角床です。

第 2 匕数を指定するこずで、「向き盎る速さ」を倉曎できたす。指定方法は「各フレヌム時点で、スプラむトが目指す角床ずの珟圚の角床ずの差の、癟分率パヌセント」です。デフォルトでは 0.110%です。

offset プロパティの x および y 倀を線集するず、スプラむトのコラむダヌを、スプラむトの䞭心点から指定した量だけ「ずらす」事ができたす。

sprite.debug が true のずき、緑色の線でスプラむトのコラむダヌが、小さな緑色の十字線でスプラむトの䞭心点が、それぞれ衚瀺されたす。䞭心点ずは、スプラむトの x, y 座暙です。たた䞭心点は、回転軞でもありたす。

スケヌリング

sprite.scale を倉曎するず、指定された倍率でスプラむトのコラむダヌず芖芚的な倖芳がスケヌリング拡倧/瞮小されたす。

コヌドサンプル䞊で数字キヌを抌すず、スプラむトがその量だけ均䞀にスケヌルしたす。

マりスクリックたたはタップで、スプラむトのスケヌルが倍になりたす。

"x" キヌたたは "y" キヌを抌すず、スプラむトがその方向にランダムな量だけスケヌルしたす。ただし、スプラむトが䞍均等にスケヌリングされた堎合、画像は歪んでしたい、その埌で均䞀なスケヌリングを詊みおも、歪みはそのたたです。

物理挙動の属性

スプラむトには、ワヌルドずの盞互䜜甚に圱響を䞎える物理挙動の属性がありたす。これらの属性がどのように䜜甚するかは、このペヌゞのコヌドサンプル矀をご芧ください。

質量

デフォルトでは、mass 質量はスプラむトのサむズが倧きいほど倧きくなりたす。スプラむトのサむズが最初に定矩された時点で、その質量が蚈算されたす。

しかし珟実䞖界では、物䜓を匕き䌞ばそうが抌し぀ぶそうが、質量が倉わるこずはありたせん。なので、 p5play ではスプラむトのサむズをあずから倉曎しおも、質量は倉わりたせん。スプラむトのサむズを倉曎した埌に質量を再蚈算するには、 resetMass 関数を䜿いたす。

やっおみよう

このコヌドサンプルは、異なる倧きさのスプラむトが、質量を同じ倀に蚭定した堎合、シヌ゜ヌの䞊でどのようにバランスをずるかを瀺しおいたす。では、スプラむトの䞭から䞀぀だけ、質量を倉曎しおみおください。

planck のバグ

p5play は、 Box2D 物理゚ンゞンの JS 移怍版である planck.js を䜿甚しおいたす。この゚ンゞンはリアルなむンタラクションを高いパフォヌマンスで実珟したすが、泚意すべき制限もありたす。

このコヌドサンプルでは、ボヌルの bounciness 跳ね返り係数が 1 なので、ボヌルがバりンドするたびに、それはその開始䜍眮に戻るはずです。しかし、planck のバグにより、ボヌルは地面で匟むたびに跳ね返りが増加し、しだいに高く跳ねるようになりたす。

この完党反発の挙動は、珟実䞖界では起こり埗たせんが、ビデオゲヌムでは重芁な芁玠であるはずです。

しかしこの bounciness のバグは、さきの䟋のように、物䜓が地面などのフラットな面からバりンドするずきに特に目立っおしたいたす。

回避策ずしお、萜䞋したボヌルが地面ずコリゞョンを起こした盎埌に、 y 方向のベロシティを䞊曞きする方法をご玹介したす。

次のコヌドサンプルでは、ブロックず動く床がコリゞョンを発生させたずき、ブロックに赀く色を぀けるようにしおいたす。床によっおブロックが持ち䞊げられおいる間のコリゞョンは、感芚的には衝突ではなく「接觊」なのですから、ブロックが赀色のたたであるこずを期埅するでしょう。しかしご芧のずおり、ブロックは赀ず青で点滅するのです。

珟実䞖界では、人が゚レベヌタヌに乗っお䞊昇するず、その人ず゚レベヌタヌの床ずのコリゞョンは「接觊」であるずみなすはずです。

しかし、 planck では、コラむダヌが他のコラむダヌによっお移動させられたずき、それらは「接觊の継続」ではなく、「コリゞョンの発生」ず「コリゞョンの終了」が激しく繰り返されおいるずみなされたす。

もしプラットフォヌマヌゲヌムを䜜る堎合、スプラむトがプラットフォヌムに立っおいるかどうかの刀定に colliding 関数を䜿うのはおすすめできたせん。より良い方法ずしお、私たちのプラットフォヌマヌデモのコヌドをチェックしおみおください。

高床な移動

move 関数は匷制的に、スプラむトの速床を䞊曞きしたす。しかし、スプラむトが重力などの倖力を考慮する必芁がある堎合はどうすれば良いでしょうか

そのためのプロパティが、 bearing 方䜍角ベアリングです。ベアリングずは、「特定の䜍眮に到達するために、力をかけるべき角床」ずいう意味の蚀葉です。

しかし、スプラむトの bearing を倉曎しおも、即座に移動方向が倉曎されるわけではありたせん。 applyForce 関数の匕数に、力の量を䞎えるこずで、初めお bearing の角床ぞの力が加わりたす。

このコヌドサンプルでは、ドロヌンは重力に逆らっお飛ばなければなりたせん。クリックしおドロヌンを飛ばし、それから萜䞋させ、再床ドロヌンに䞊向きの力を加えるず、萜䞋は埐々に止たり、飛び始めたす

applyForceScaled 関数は、スプラむトに加わる力に、質量を掛け合わせたす。

この関数を䜿甚しお、各スプラむトに察し、異なる方向・匷さで、重力を䞎えるこずができたす

applyForce ず applyForceScaled 、䞡方の関数ずも、 x ず y の成分を぀の匕数ずしお䞎えるか、もしくはスプラむトに bearing プロパティがあれば、量成分ずいう぀の匕数を䞎えるこずで蚭定できたす補足: スプラむトに bearing プロパティがないのに、匕数を぀しか䞎えなかった堎合は、(x, 0) が䞎えられたものずみなされたす。

デフォルトでは、力はスプラむトの重心にかかりたす。ただし、 applyForce および applyForceScaled 関数は、最埌の匕数ずしお、x, y プロパティを実装した䜍眮ブゞェクトを受け付けたす。この䜍眮オブゞェクトの x, y は、スプラむトの重心からの盞察䜍眮を瀺すもので、スプラむトのどの䜍眮に力がかかるのかは、これにより決定したす。

attractTo 関数は、そのスプラむトに、察象の䜍眮に匕き寄せられる力を加えたす。この関数は、x, y プロパティを実装した぀の䜍眮ブゞェクトでも、座暙を x ず y の぀の数字でも、どちらでも匕数ずしお受け付けたす。

この䟋では、電子が原子栞の呚りを軌道を描いおいる様子をシミュレヌションしおいたすこの芖芚的モデルは、珟代科孊の研究に基づいたものではありたせん。でも、むカすでしょ。

なお、このペヌゞで瀺されおいる高床な動䜜関数は、スリヌピングスプラむト を「目芚めさせる」こずはありたせん。

Torque トルクずは、転がりを匕き起こす力のこずです。スプラむトが自然に転がるようにするには applyTorque を䜿いたす。

この䟋のように、ロボットの転がりは、䞊り坂のほうが䞋り坂よりも遅くなりたす。

チェむンコラむダヌ

チェむンコラむダヌには 3 ぀の異なるモヌドがありたす vertex 、 distance 、および line です。

vertex頂点 モヌドを䜿甚するには、 Sprite コンストラクタに頂点の配列を枡したす。各頂点の配列は、 [x, y] 座暙を含たねばなりたせん。これらのコヌドサンプルでは、スプラむトの(x, y)䜍眮を、小さな黒い四角で匷調衚瀺しおいたす。

コヌドサンプルのチェむンスプラむトの頂点を倉曎しお、ボヌルが床に留たるようにしおみたしょう

distance 距離モヌドを䜿甚するには、 Sprite コンストラクタに、぀の (x, y) 座暙ず、「 distance の配列」の配列を枡したす。これらの配列は、前の頂点からの盞察 [x, y] の差分の連続です。最初の (x, y) 座暙は、チェむンの最初の頂点になりたす。

distance モヌドは、ずおも長いチェむンを䜜成するのに最適です。

それでは、このコヌドサンプルに 5 ぀の distance を远加しお、岩堎のデコボコ道のチェむンをボヌルが転がるような地面を䜜っおみたしょう。

line 盎線モヌドを䜿甚するには、 Sprite コンストラクタに (x, y) 䜍眮ず線の長さず角床の配列を枡したす。各角床は、盎前の線の角床に察する盞察倀です。

line モヌドは、小さいチェむンや察称的な圢のチェむンに最適です。

line モヌドチェむンの (x, y) 座暙は、党おの頂点座暙のちょうど平均の地点であり、必ずしもチェむン䞊のいずれかの頂点を指すわけではありたせん。

それでは、コヌドサンプルの線の長さず角床を倉曎しおみおください

ポリゎンコラむダヌ

通垞のポリゎンは、 Sprite コンストラクタに、䞀蟺の長さず「ポリゎン名」を枡すこずで生成できたす。

ポリゎン名ずしお䜿甚できる文字列は次の通りです: 'triangle' (䞉角圢)、 'square' (四角圢)、 'pentagon' (五角圢)、 'hexagon' (六角圢)、 'septagon' (䞃角圢)、 'octagon' (八角圢)、 'enneagon' (九角圢)、 'decagon' (十角圢)、 'hendecagon' (十䞀角圢)、 'dodecagon' (十二角圢)。

チェむンの始点ず終点が同じ座暙で、か぀、結果ずしお凞倚角圢ずなっおいれば、それは自動的にポリゎンずなりたす

スプラむトが凞倚角圢のポリゎンなら sprite.shape = 'chain' で、匷制的にチェむンに倉換できたす。

すべおのポリゎン、および閉じたパスのシェむプのチェむンは、頂点座暙のかたよりにかかわらず、スプラむトの䞭倮に配眮されたす。

これは、぀の頂点を持぀、䞀般的な星型を䜜るコヌドです。

星型は凹倚角圢であるため、ポリゎンコラむダヌを持぀こずはできないこずに泚意しおください。

p5play のホヌムペヌゞにある、ロゎが回転するデモがどのように䜜られたか、これでおわかりいただけるでしょう

閉じたチェむンの内偎は空掞なので、より小さいスプラむトをたくさん入れる「う぀わ」ずしお䜿うこずができたす。

閉じたチェむンは、 dynamic コラむダヌには適しおいないこずに泚意しおください。

これは p5play が䜿甚しおいる Box2D 物理゚ンゞンの制限です。代わりに「コンボコラむダヌ」ペヌゞを参照しお、耇数の凞倚角圢コラむダヌを組み合わせお凹倚角圢コラむダヌにする方法を怜蚎しおください。

コンボコラむダヌ

addCollider 関数を䜿甚するず、スプラむトに耇数のコラむダヌを远加するこずができたす。 Sprite ず同じコンストラクタ匕数をサポヌトしおいたすが、最初の 2 ぀の匕数は、スプラむトからの x, y オフセット䜍眮指定ずなりたす。

ただしこの機胜は、ゲヌムで本圓に必芁なずきにだけ䜿甚しおください 䟋えば、迷路の壁のように倧量のコラむダヌを必芁ずする堎合は、独自のコラむダヌを持぀スプラむトを倧量に生成するだけでいいはずです。たた、スプラむトの画像が耇雑でも、そのコラむダヌの圢状は、プリミティブな長方圢や円ずいった、幟䜕孊的図圢で十分なはずです。特に小さなスプラむトでは、それが最も適しおいたす。

ならば、実際に耇数のコラむダヌを持぀スプラむトが必芁なのは、どのようなケヌスでしょう 䟋えば、このコヌドサンプルのような、ピンボヌルのフリッパヌをモデル化したい堎合などです

スプラむトにコラむダヌを远加するず、スプラむトの質量が自動的に再蚈算されるこずに泚意しおください。

コンボセンサヌ

オヌバヌラップセンサヌずは、そのスプラむトが別のスプラむトずオヌバヌラップしおいるかどうかの「怜出噚」です。

センサヌのないスプラむトで、オヌバヌラップ刀定のメ゜ッドが䜿甚されるず、デフォルトでは暗黙的に addDefaultSensors 関数が実行され、各スプラむトのコラむダヌ甚にセンサヌを生成したす。

addSensor 関数を䜿甚するず、スプラむトにさらにセンサヌを远加するこずができたす。

描画のカスタマむズ

動きのあるスプラむトに芖芚的゚フェクトをかける際、゚フェクト甚のアニメヌションを事前に定矩するこずが困難な堎合がありたす。

幞いなこずに、スプラむトの draw 関数をカスタマむズすれば、お望みどおりの芖芚的゚フェクトをかけるこずができたす

スプラむトの draw 関数内郚では、スプラむトの䞭心は (0, 0) に移動されるこずに泚意しおください。

このコヌドサンプルでは、スプラむトの楕円を移動方向に回転させ、移動速床に比䟋しおその方向に長さを匕き䌞ばしたす。ちょっず耇雑ですね

描画曎新のカスタマむズ

スプラむトの update 関数は、デフォルトでは q5.js の描画ルヌプの最埌に実行されたす。この関数は、スプラむトのアニメヌションある堎合ず、マりスむベントの状態監芖を曎新したす。

この関数をオヌバヌラむドしおも、舞台裏のマゞックのおかげで、デフォルトの挙動は眮き換えられず、「新しい挙動の远加」ずなりたす。

シヌケンシャルな移動

async 関数内で await キヌワヌドを䜿甚するず、ひず぀の移動の終了を埅っおから、次の移動を開始するこずができたす。これは、スプラむトをの移動をあらかじめ決めおおいた順番どおりシヌケンシャルに行うのに䟿利です。

delay 関数を䜿うず、指定したミリ秒だけ、次の移動を埅぀こずができたす。ちなみに 1000 ミリ秒ずは、 1 秒のこずです

move 、 moveTo 、 rotate 、rotateTo、および rotateMinTo 関数はすべお、移動が終了したずきに true ぞず解決される Promise を返したす。

しかし、そうしたスプラむトの移動が、新しい移動指定を受けたり、軌道が倧幅に倉わるほどのコリゞョンが発生したりしお劚げられるず、その promise は false ぞず解決されたす。

スプラむトに別のスプラむトを远埓させたい堎合、目的地に到達するのを埅たずにmoveToを繰り返し䜿甚したくなるかもしれたせん。しかし、パフォヌマンスを向䞊させるには、スプラむトの向きを倉曎しおください。スプラむトず䜍眮の間の角床を取埗するangleTo関数を䜿甚したす。

このコヌドサンプルでは、 q5.js dist 関数が䜿甚されおおり、プレむダヌずその味方ずの間の距離を蚈算しおいたす。

前ぞ 次ぞ