゜ニックゲヌムの物理の抂芁。 パヌト1固䜓タむル

画像

翻蚳者から この投皿は、セガゞェネシス/メガドラむブおよび゜ニックCD甚の゜ニック・ザ・ヘッゞホッグシリヌズのゲヌムの゜ニック物理ガむドの䞀郚の翻蚳です。 次のセクションでは、ランニング、ゞャンプ、スピン、リングの喪倱、氎䞭行動、超高速、アクセシビリティ、カメラ、アニメヌションなどのトピックに぀いお説明したす。 倚くの郚分 14個 があるため、投皿の最埌に調査を远加したした。 続行する必芁がありたす-あなたが決定したす。

シリヌズの他の郚分ぞのリンク
パヌト2実行䞭
パヌト3および4ゞャンプずスピン
パヌト5ず6リングの喪倱ず氎䞭ぞの䟵入
パヌト7および8スプリングずギズモ、スヌパヌスピヌド



ご泚意

この蚘事では、゜ニックの衝突ず固䜓タむルずの盞互䜜甚に぀いお説明しおいたす。 モニタヌ、移動プラットフォヌム、ブロックなどの゜リッドオブゞェクトには、Sonicずの独自の衝突凊理手順がありたすが、これは必ずしも゜リッドタむルの動䜜ず䞀臎したせん。

はじめに

゜リッドタむルずは䜕ですか Sonicゲヌムを構成するゟヌンレベルには倚くの゜リッドオブゞェクトがありたす。そのため、環境がすべお64バむトのRAMを占有する゜リッドオブゞェクトで完党に構成されおいる堎合、ゟヌンは倧量のメモリを必芁ずしたす。 スマヌトな動きが行われたした-ゟヌンはタむルから䜜成されるため、必芁なのはタむルが固䜓䞍透過性かどうかを知るこずだけです。

ゟヌンは128x128ピクセルたたはSonic 1およびSonic CDでは 256x256ピクセルのブロックに分割され、さらに16x16ピクセルのタむルに分割されおいるこずがわかりたす。 たた、サむズが8x8ピクセルの小さなタむルに分割されたす。 ゜リッド芁玠を凊理するすべおの魔法は、タむル16x16のレベルで発生するため、このレビュヌではそれらにのみ関心がありたす。

゜ニックのこれらの゜リッドタむルずの盞互䜜甚ず衝突は、コアゲヌム゚ンゞンを圢成したす。 圌らは、床、壁、倩井、ランプ、ヒンゞの操䜜方法を決定したす。 これは膚倧で耇雑なトピックなので、私のレビュヌは他のSonicゲヌムの物理ガむドずは異なりたすが、掚論を最小限に抑えようずしたす。

立ち

画像

736$ 02E0に等しいY軞に沿った地球の䜍眮をずるず、゜ニックは座暙716$ 02CCでその䞊に立ちたす。 地䞊20ピクセルです。

抌す

゜ニックは壁にぶ぀かるず停止するはずです。 これは、ラむンずの衝突を確認するこずで実珟できたす。 コラむダヌラむントランスレヌタヌからここず以降、センサヌずいう甚語が䜿甚されおいたすが、私が遞んだ、適切なアナログず思われたす はY軞䞊のその䜍眮にあるべきではありたせんが、わずかに䜎くなければ、短いステップに気付かないでしょう。 たた、圌女は䜎すぎるこずはできたせん。そうでなければ、圌女は゜ニックが抌し出すべきでない斜面ず曲線に「気づく」でしょう。 Sonicの䜍眮からY + 4座暙での䜍眮は、通垞、高さが16ピクセル未満の階段がないためですそのような階段がある堎合、タむルではなく固䜓オブゞェクトで構成されたす。

コラむダヌラむンの幅はどれくらいですか

画像

壁の巊偎の704$ 02C0に等しいX座暙を取埗する堎合、Sonicは693$ 02B5よりも近くないはずです。 壁の右偎の831$ 033Fに等しいX座暙を取埗する堎合、Sonicは842$ 034Aより近くないはずです。 これは、䞡方向で11ピクセルの差になりたす。

したがっお、コラむダヌラむンの幅は20ピクセルで、X-10からX + 10 Sonicに匕き䌞ばされる必芁がありたす。 ゜リッドタむルが怜出されるたびに、タむルの座暙をマむナスたたはプラス11に蚭定しお゜ニックを「抌し出す」必芁がありたすが、地䞊での移動速床はれロにする必芁がありたす。 10ピクセルのみを抌し出すこずはできたせん。そうでない堎合、座暙X + 10のポむントはただタむルの境界ピクセル内にありたす。この堎合、䞀定の衝突が登録され、壁に貌り付きたす。

タむルの境界線からSonicの䜍眮を匕いた倀は11でなければならないため、Sonicの䞭心ずタむルの境界線の間には10ピクセルしかありたせん。 ゜ニックからの11番目のピクセルは、タむルの端になりたす。 したがっお、Sonicの実際の幅は20ピクセルです。

秋

゜ニックはサむトから脱出できるはずです。 圌は挫画Wile E. Coyoteコペヌテのように振る舞うこずができず、圌の䞋には䜕もないこずに気づかない。



これは、Sonicが䞋の固䜓タむルもチェックする必芁があるこずを意味したす。 これは、䞋向きのコラむダヌをさらに2行远加するこずで実珟できたす。 ゜ニックの巊偎、X-9座暙に1぀Aがありたす。 もう1぀Bは右偎のX + 9です。 Y軞に沿った䜍眮から開始し、Y + 20に䜍眮する地面レベルで足より16ピクセル以䞊䞋がらなければなりたせんただし、䜎くなりすぎないか、䜎い階段や階段から降りるず萜ちるでしょう。したくない。

コラむダヌAずBが゜リッドタむルを怜出しない堎合、゜ニックは「萜䞋」したす。空䞭にあるこずを゚ンゞンに通知するフラグが蚭定されたす。

壁ずの衝突では、Sonicの幅が20ピクセルであるこずを芚えおいたす。 ただし、地䞊怜出コラむダヌは䞭心からわずか18ピクセルです。 ゜ニックは、壁にぶ぀かるずきよりもサむトから逃げるずきの方が「2ピクセル薄い」こずがわかりたした。

゚ッゞでのバランス調敎

良い詳现-゜ニックは、サむトの端に近いバランスアニメヌションに進みたす。 これは、圌が停止したずきにのみ発生したす地面の速床は0です。

゚ンゞンはこれに぀いおどのように知っおいたすか すべおがシンプルです-コラむダヌの1぀だけがアクティブになった瞬間に、゜ニックは最前線にいたす。 AがアクティブでBがアクティブでない堎合、サむトはその右偎にありたす。 それ以倖の堎合、サむトは巊偎にありたす。

しかし、゜ニックがバランスを取り始めた堎合、コラむダヌの1人が䜕も芋぀けないずすぐに、圌は「早く」バランスを取り始め、それは愚かに芋えたす。 したがっお、これは1぀のコラむダヌのみがアクティブであり 、X軞䞊の䜍眮がアクティブなコラむダヌによっお怜出された゜リッドタむルの境界よりも倧きい堎合に発生したす。



サむトの右端の座暙を2655$ 0A5Fにするず、゜ニックは2656$ 0A60でのみバランスを取り始めたす。 䞡方のコラむダヌが䜕も芋぀けられないずき、それは2665$ 0A69に萜ちたす。

Sonic 2およびSonic CDでは 、サむトが゜ニックのビュヌず反察方向にある堎合、2番目のバランスアニメヌションがオンになりたす。

Sonic 2 、 Sonic 3、およびSonicKnucklesでは 、パッドの端にさらに近づくず、3番目のバランスアニメヌションがありたす。 䞊蚘の倀を蚭定するず、座暙2662$ 0A66にあるずきにオンになりたす。

泚バランスをずる堎合、䞀郚の機胜は䜿甚できたせん地面に抌し付ける、芋䞊げる、回転するなど。 Sonic 3Knucklesでは、プレむダヌは地面に寄り添っお回転するこずができたすただし、芋䞊げるこずはできたせん。

募配ず曲線

゜ニック・ザ・ヘッゞホッグは、曲面ず360床のルヌプを䜿甚した最初のゲヌムの1぀でした。 その時代のほずんどのゲヌムでは、環境は完党にブロックから䜜成されおいたした時には斜面から䜜成されおいたした。

圢状を滑らかに倉化させるオブゞェクトを操䜜する機胜は、Sonicゲヌムの新芏性ず魅力の基本的な偎面の1぀です。 残念ながら、これはおそらくファンゲヌムで再珟するのが最も難しい偎面です。

どのように機胜したすか

高さのマスク

コラむダヌAたたはBが゜リッドタむルを怜出するたびに、そのタむルの高さが返されたす。

タむルの高さはどうですか

各タむルには、メモリに保存されたマスクに関連付けられた倀が関連付けられおいたす。 マスクは、0$ 00〜16$ 10の範囲の16の高さ倀ず角床倀の単玔な配列です。



たずえば、この高さマスクには、高さ0 0 1 2 2 3 4 5 5 6 6 7 8 9 9 9の配列ず232の角床$ 00 00 01 02 02 03 04 05 05 06 06 07 08 09 09 09ず$ E8の角床がありたす。

䜿甚される高さ配列の倀は䜕ですか コラむダヌのX䜍眮からタむルのX䜍眮を匕きたす。 結果は、䜿甚される高さ配列むンデックスになりたす。

芋぀かった高さの倀が1610ドルの堎合、コラむダヌは最初に芋぀かったタむルの䞊の別のタむルをチェックし、その高さの倀を決定する必芁がありたす。

コラむダヌが最高の高さを怜出するず、゜ニックのY座暙はこの高さから20ピクセルを匕いたものに等しく蚭定されたす。 その角床も、最高の高さを返す゜リッドタむルの角床に等しく蚭定されたす。

コラむダヌが゜リッドタむルを芋぀けられない堎合、デフォルトでは脚のレベルY + 20が返されたす。

このメ゜ッドを䜿甚した゚ラヌ

残念ながら、元の゚ンゞンでこのメ゜ッドを䜿甚しおいるため、いく぀かの迷惑なバグがありたす。

゜ニックが傟斜したプラットフォヌムに立っおいる堎合、コラむダヌの1人がタむルを怜出せず、脚の高さを返したす。 これは、゜ニックが間違った䜍眮にあるずいう事実に぀ながりたす。



゜ニックは、右に移動するずコラむダヌBずずもに䞊昇したす。 Bがサむトから「萜ちる」ず、SonicはデフォルトでコラむダヌAのレベルに移動したす。その埌、圌はコラむダヌAずずもに䞊昇し、さらに右に移動したす。 したがっお、圌はサむトから脱出したずきに最初に立ち䞊がり、萜䞋し、再び立ち䞊がりたす。

これが目立぀領域はわずかですが、そのようなバグはGenesis / Mega Driveのゲヌムのすべおの郚分に存圚し、かなり厄介に芋えたす。

2぀目のバグは、 グリヌンヒル ゟヌンレベルずマヌブルゟヌンレベルの䜎い䞘など、䞊䞋に反察の傟斜の2぀のタむルがある堎合に発生したす。



コラむダヌBは、スロヌプから右に䞋降し始めたすが、゜ニックは、コラむダヌAによっお怜出された前のスロヌプのレベルをデフォルトのたたにしたす。これらのスロヌプは非垞に䜎いため、これにより゜ニックは䞭倮で玄1ピクセル䜎くなりたす。

しかし、それだけではありたせん。 ゜ニックは、最高のコラむダヌから角床デヌタを受信するため、右に傟斜角があるはずのように芋えおもそれに近いため、巊に傟斜角がありたす。 ゞャンプするずき、圌はこの角床でゞャンプし、予想されたように前方ではなく埌方に移動したす。

斜めの動き

これはすべお非垞に玠晎らしく、玠晎らしいです-゜ニックはさたざたな高さの衚面でスムヌズに動きたす。 ただし、゚ンゞンは別の凊理を行う必芁がありたす。 珟実的には、Sonicの速床をある角床で枛速する必芁がありたす。

角床が゜ニックの速床に圱響する2぀の方法がありたす。 1぀目は、同じ幅の平らな地面ず同時に䞘の䞊を走らないようにしたす。 2番目は、䞘を䞊るずきは速床を䞋げ、䞋るずきは速床を䞊げたす。 それぞれを順番に芋おみたしょう。

3぀の速床倉数

Sonicがブロックのみを䜿甚する通垞のプラットフォヌマヌである堎合、必芁な速床倉数は2぀だけです。X軞 Xsp およびY軞 Ysp に沿った動き、Sonicの速床の氎平および垂盎成分です。 加速 acc 、枛速 dec 、摩擊 frc がXspに远加されたす 。 ゞャンプ速床 jmp ず重力 grv がYspに远加されたす ゜ニックが空䞭にある堎合。

ただし、ランプを䜿甚しおいる堎合、゜ニックはランプに沿っお移動するず、氎平方向ず垂盎方向に同時に移動したす。 これは、 XspずYspの䞡方にれロ以倖の倀があるこずを意味したす。 acc 、 dec、たたはfrcをXspに远加するだけでは機胜しなくなりたす。 ゜ニックが壁を駆け䞊がろうずしおいるこずを想像しおみおください-圌が䞊に移動しようずしおいるので、氎平速床に远加しおも圹に立たないでしょう。

トリックは、3番目の可倉速床元の゚ンゞンが行うこずを䜿甚するこずです。これを察地速床 Gsp ず呌びたしょう。 これは、角床に関係なく、地球に沿った゜ニックの速床です。 倀acc 、 dec、およびfrcは 、 XspたたはYspではなくGspに远加されたす。

地䞊では、 XspずYspは、Sonicを移動する前の各ステップでGspから取埗されたす。 ここでは、擬䌌コヌドの䟋が適切だず思いたす。

Xsp = Gsp*cos(angle); Ysp = Gsp*-sin(angle); X += Xsp; Y += Ysp; 

角床の倉化に関係なく、速床Gspが維持されるため、゚ンゞンは垞に゜ニックが「真に」動いおいる速床を認識したす。

募配係数

゜ニックは、正確な速床を維持しながら、あらゆる䞘ずの盞互䜜甚を凊理できるようになりたした。 ただし、圌はただ䞊昇䞭は枛速し、䞋降䞭は加速する必芁がありたす。

幞いなこずに、これは募配係数 slp の抂念を䜿甚しお簡単に実珟できたす。 各ステップの始めにslp * sin angle をGspに远加するだけです。 実行䞭のslp倀は垞に0.125$ 0020ですが、回転する堎合は異なりたす。 Sonicが䞘をスピンアップするずき Gspは sin angle ず等しくない、 slpは0.078125$ 001Eです。 䞘を䞋に回転するずき Gspの笊号はsin angle の笊号に等しい、 slpは0.3125$ 0050です。

泚 Sonic 1では、 Sonicが停止し、スタンディング/埅機サむクルにある堎合、 slp倀は远加されないようです。 ただし、 Sonic 3およびKnucklesでは、この堎合でもslp倀が远加されるため、Sonicは急な斜面に立぀こずができたせん。

角床ゞャンプ

゜ニックがゞャンプ時に立぀角床もゞャンプに圱響したす。 圌は単にYspをjmpに蚭定するこずはできたせん。圌は立っおいる角床から飛び出す必芁がありたす。 したがっお、正しい倀を取埗するには、cosずsinを䜿甚しおjmp倀をXspずYspの䞡方に割り圓おる必芁がありたす。

さらにいく぀かの擬䌌コヌド

 Xsp -= jmp*sin(angle); Ysp -= jmp*cos(angle); 

モヌドの切り替え

そのため、゜ニックは䞘、斜面、敷地に沿っお走るこずができたすが、これは悪くありたせん。 しかし、これでは十分ではありたせん。 圌は、远加のコヌドなしに地球から壁や倩井に向かっお進むこずはできたせん。

なんで ランドコラむダヌAずBは、それらの真䞋にある障害物をテストし、地球の高さを芋぀けたす。 スキヌム党䜓がY軞に沿っお正確に䞊䞋に移動するように蚭蚈されおいるため、壁ぞの移行を凊理するこずはできたせん。

この問題を解決するには 4぀の異なる運転モヌドを䜿甚したす。 これには少し説明が必芁です。

4぀のモヌド

゜ニックが360床移動できる堎合、゚ンゞンは360床すべおをほが同じ方法で凊理するず想定するのが論理的です。 実際、゚ンゞンは角床を4぀の象限に分割し、䜜業を倧幅に簡玠化したす。

私が話しおいるこずをよりよく理解するために、完党なルヌプを持たず、䜎い䞘ず斜面のみを備えた、よりシンプルなプラットフォヌマヌを想像しおみたしょう。 キャラクタヌが氎平方向に移動した埌に行う必芁があるのは、フロアレベルに到達するたで䞊䞋に移動するこずだけです。 次に、床の角床を枬定する必芁がありたす。 角床はGspを䞋げるために䜿甚され、それ以䞊の目的には䜿甚されたせん。 キャラクタヌは垞に氎平に移動し、フロアレベルに到達するたで厳密に䞊䞋に移動したす。

゜ニックに関するゲヌムでもほずんど同じこずが起こりたす。 角床があたりにも急になった堎合にのみ、゜ニックは「象限」を倉曎し、フロアモヌドから右壁モヌドに切り替えたす倩井モヌド、巊壁、床モヌドに戻るなど。 い぀でも個々のモヌドで、゜ニックは通垞のプラットフォヌマヌのように動䜜したす。 マゞックは、これらの4぀のモヌドず、それらの間のスマヌトなスムヌズな切り替えを組み合わせたものです。

しかし、゜ニックはどのようにしおい぀モヌドを切り替えるのでしょうか

フロアモヌドで224$ E0より倧きい角床が怜出されるず、゚ンゞンは右壁モヌドに切り替わりたす。 基本的に、すべおは同じたたで、コラむダヌのみが䞋郚ではなく右偎をチェックし、゜ニックは垂盎ではなく氎平に「フロア」レベルに移動したす。

右壁モヌドで224$ E0未満の角床が怜出されるず、゚ンゞンはフロアモヌドに戻りたす。

他のトランゞションも同様に機胜したす。

公正な疑問が生じるかもしれたせん-私たちが正しい壁モヌドにいるずき、地球衝突噚はどこにありたすか それらはそこにありたすが、90床回転したす。 コラむダヌAは、゜ニックの䞭心に察しおX-9ではなくY + 9に䜍眮しおいたす。 コラむダヌBはX + 9ではなくY-9です。 コラむダヌラむンは垂盎ではなく氎平になり、脚のレベルを超えお16ピクセルX座暙+ 20で゜ニックの「䞋」に20ピクセル䌞びたす。

はい、コラむダヌが動くため、モヌドが切り替わるステップで゜ニックを新しい䜍眮に「プッシュ」できたす。 ただし、動きはほんの数ピクセルであり、通垞のゲヌムでは完党に感知できたせん。

別の偎面私が蚀ったように、固䜓タむルは高さの配列で構成されおいたす。 ここでのキヌワヌドは「高さ」です。 適切な壁モヌドでどのように動䜜したすか 意倖なこずに、元の゚ンゞンでは、各゜リッドタむルには2぀の盞補的な高さがありたす。 1぀は氎平方向に䜿甚され、もう1぀は垂盎方向の移動に䜿甚されたす。

巊の壁ず倩井のモヌドはどうですか 高さの4぀の配列は必芁ありたせんか いいえ、この圢匏のタむルは高さの通垞の配列を䜿甚するため、反転するだけです。 Sonicは、倩井モヌドでは、芋぀かった高さの倀を䜿甚しお、䞊ではなく䞋に移動する必芁があるこずを認識しおいたす。

これら4぀のモヌドのおかげで、Sonicはあらゆる皮類の茪郭、内郚および倖郚曲線などを移動できたす。 以䞋に、角床の倀を持぀画像の䟋をいく぀か瀺したす。これらの画像は、私たちが話しおいるこずを説明しおいたす。





壁や倩井から萜ちる

右壁、巊壁、たたは倩井モヌドの堎合、゜ニックは絶察Gsp倀が 2.5$ 0280を䞋回るず䜎䞋したすこの時点でのGspは0に等しくなりたすが、 XspずYspは倉化しないため、゜ニックは空䞭をその経路に沿っお移動し続けたす これは、その䞋に土地がある堎合でも起こりたす。

スラむドバック

゜ニックが䞊蚘の方法で萜ちるず、氎平制埡ロックアりトタむマヌは31$ 1Eに蚭定されたす゜ニックが地面に觊れるたでタむマヌはカりントダりンしたせん。 タむマヌ倀がれロに等しくなく、゜ニックが地䞊にいる間、圌はプレむダヌがボタン「右」ず「巊」で゜ニックの速床を倉曎するこずを蚱可したせん。 タむマヌ倀はステップごずに1ず぀枛少するため、ロックは玄0.5秒続きたす。 この時間䞭、゜ニックが地面に萜ちた速床ず速床だけが動きに圱響するため、゜ニックはランプを滑り降りたす。

空䞭ステヌタス

゜ニックが空䞭にあるずき、角床、 Gsp 、 slpなどに぀いお心配する必芁はありたせん。 必芁なのは、地面ずの接觊が怜出されるたでXspずYspを䜿甚しお移動し、その埌地面モヌドに切り替えるこずです。

ただし、゜ニックには空䞭を移動するための珍しいコラむダヌのセットがあり、詳现に怜蚎する䟡倀がありたす。

空borneコラむダヌ

暪型コラむダヌ

゜ニックは地面にいるずきず同じように壁にぶ぀かるはずです。 したがっお、氎平コラむダヌの䜍眮は、その䜍眮Yから始たり、X-10からX + 10たで䌞びおいたす。 ゜リッドタむルずの衝突では、゜ニックはタむルの境界にプラス/マむナス11で「抌し蟌み」、地面にいたす。

違いは、このコラむダヌラむンが垂盎コラむダヌAおよびBよりも広く、土地の存圚を怜出するこずですもう少し䞋に戻りたす。 ぀たり、氎平コラむダヌラむンは、 Xspがたったくない堎合でも、Sonicが通過したブロックを怜出できたす。 したがっお、極端な゚ッゞに圓たるず、固䜓オブゞェクトから滑り萜ちたす。

゜ニックが氎平コラむダヌのこの線ずの衝突を怜出するず、圌のXspは、壁から離れずに壁に向かっお移動した堎合にのみリセットされたす。 さもなければ、圌は壁にくっ぀いお、それらを通り過ぎお飛びたす。

垂盎コラむダヌ

゜ニックコラむダヌAずBは、地䞊ずほが同じように空䞭で動䜜したす。 違いは、゜リッドタむルが怜出されたずきに、゜ニックの高さがすぐにタむルの高さから20ピクセルを匕いた倀に等しく蚭定されないこずです。 代わりに、この高さは既にその高さより䜎い堎合にのみ蚭定されたす。 そうでなければ、圌は圌に近づいたずきに床に匵り付いおいただろう。

コラむダヌが圌の足の䞋たでこれたで匕き䌞ばされた堎合、なぜ圌はゞャンプするステップで地面を再び発芋できず、決しお圌が床から萜ちないのですか 簡単です。Yspがれロ以䞊の堎合を陀き、圌はそれらを無芖したす。したがっお、䞋に移動するずきだけ地球を怜出したす。

゜ニックは空䞭で䞊䞋に動くこずができるので、倩井ずその䞊にある曲線にヒットできるように、䞊から2人のコラむダヌCずDがチェックする必芁がありたす。 CずDはAずBの正確な鏡面反射です-それらは同じX䜍眮ず長さを持ち、䞋向きではなく䞊向きのみです。゜ニックは倩井を怜出し、それらから離れ、床ずは異なり䞊䞋に移動したす䞋に移動したずきにのみ怜出されたす。 䞋に移動したり、隙間のある壁にしがみ぀いたり、䞊の曲線の偎面にゞャンプしたりするずきに、「倩井」実際にはブロックの䞋郚を打぀こずができたす。

床を飛び越える

゜ニックがゞャンプしたずきにすぐに飛ぶこずができるサむトがありたす。 それらは、 グリヌンヒルゟヌン 、 ゚メラルドヒルゟヌン 、 パヌムツリヌパニックゟヌンなどの䞘陵緑地でよく芋られたす。 このようなパッドを構成する゜リッドタむルは、AおよびBコラむダヌによっおのみ怜出できる特殊なタむプずしお゚ンゞンによっおマヌクされ、CおよびDコラむダヌず氎平コラむダヌラむンによっお無芖されたす。

地球の再発芋

゜ニックが地面にあるずき、 XspずYspはGspから取埗されたす 。 萜䞋したり、地面を壊したりする堎合、 XspずYspには、空䞭の軌道を継続するために必芁な倀が既に含たれおいたす。 しかし、゜ニックが着陞するずき、着陞時に利甚可胜なXspずYspからGspを蚈算する必芁がありたす。 cosおよびsinを䜿甚しお正確な倀を取埗するず考えるかもしれたせんが、そうではありたせん。 実際、もっず単玔なこずが起こり、湟曲した倩井にぶ぀かったずきず湟曲した地面に着いたずきずでアルゎリズムが異なるので、個別に怜蚎したす。

䞋に移動するずき

怜出された地球の角床が240〜255$ F0〜$ FFの範囲にあるおよびそれらの鏡面反射が0〜15$ 00〜$ 0F堎合、 Gspには倀Xsp が割り圓おられたす。 角床が224-239 $ E0〜 $ EF16-31$ 10〜$ 1Fの範囲にある堎合、 Xspの絶察倀がYspより倧きい堎合にのみ、 GspにXspの倀が割り圓おられたす。 それ以倖の堎合、 GspはYsp * 0.5 * -signcos angle に等しくなりたす。 角床が192-223$ C0〜$ DF32-63$ 20〜 $ 3Fの範囲にある堎合、 Xspの絶察倀がYspより倧きい堎合、 GspはXspず等しくなりたす。 それ以倖の堎合、 Gspには倀Ysp * -signcos angle  が割り圓おられたす。

䞊に移動するずき

怜出された倩井の角床が160-191$ A0〜BF64-95$ 40〜$ 5Fの範囲にある堎合、゜ニックは倩井に取り付けられ、 Gspは倀Ysp * -signcos angle を取りたす。 角床が96〜15960〜9米ドルの範囲内にある堎合、゜ニックは通垞の倩井のように頭に圓たり、頭に付着したせん。 Yspは無効化され、 Xspは倉曎されたせん。

ヘルプ角床の倉換

Genesis / Mega Driveのゲヌムでは、角床倀は0$ 00から255$ FFたでの16進圢匏で䜿甚されるため、円は以前のように360の郚分に分割されず、256になりたす。 GMLなどの他の蚀語では、反時蚈回りにカりントされるため、32$ 20は45°ではなく、315°です。

元の16進数の角床をGMLで䜿甚できる角床に倉換するには、次の匏を䜿甚したす擬䌌コヌドで蚘述。

 return (256-hex_angle)*1.40625; 

泚釈



曎新小数倀を远加したした。

Source: https://habr.com/ru/post/J276669/


All Articles