Openapoc: 都市景観で破壊されたタイルがたくさんあると、ウルトラスピード​​でゲームが停止するように見えます

作成日 2018年10月11日  ·  10コメント  ·  ソース: OpenApoc/OpenApoc

いくつかの建物が襲撃によって倒されたときにのみ発生するように見えるので、破壊されたタイルに関連していると思います

超高速に配置すると、街並みは信じられないほど遅いように見えます
再生できないところまで

添付の保存を見つけてください

SuperHuman_Slow.zip

!BUG! HIGH PRIORITY !BUG! low priority Help Wanted

最も参考になるコメント

修正のPRは次のとおりです(手動でのみ確認済み)。
https://github.com/OpenApoc/OpenApoc/pull/563

全てのコメント10件

ミッションの建設車両などの敵対的な車両も影響を与えるようです

セーブゲームの後半からのさらなる例
save_SuperHuman 1.zip

車両も動けなくなっているようです
image

スタックした車両を見つけました
メガフライヤーの上にあります。
save_SuperHuman 1.zip

スタックした車両(建設車両31)をデバッグしています。
セーブゲーム時のミッションは次のとおりです。

W 7613175674 bool OpenApoc::CityView::handleMouseDown(OpenApoc::Event *): CLICKED VEHICLE Construction Vehicle 31 at {42.7708,63.5,7.5}
W 7613244067 bool OpenApoc::CityView::handleMouseDown(OpenApoc::Event *): Mission GotoLocation {43,63,2}
W 7613263414 bool OpenApoc::CityView::handleMouseDown(OpenApoc::Event *): Mission RecoverVehicle 
W 7613286861 bool OpenApoc::CityView::handleMouseDown(OpenApoc::Event *): Mission GotoBuilding BUILDING_WAREHOUSE_THREE

ただし、宛先(43,63,2)はadjustTargetToClosestFlyingによって(43,63,7)に書き換えられます。
その時点以降、車両はsetPathToを呼び出すたびに、(43、63、7)とランダムな近くのターゲットに移動しようとする間で振動します。

After setPathTo: Vehicle [Construction Vehicle 31] path: (41,63,7) -> (41,63,7) -> (42,63,7) -> (43,63,7)
After setPathTo: Vehicle [Construction Vehicle 31] path: (43,63,7) -> (43,63,7) -> (42,64,6) -> (41,63,5) -> (41,62,4)
After setPathTo: Vehicle [Construction Vehicle 31] path: (41,62,4) -> (41,62,4) -> (41,62,5) -> (41,62,6) -> (42,63,7) -> (43,63,7)
After setPathTo: Vehicle [Construction Vehicle 31] path: (43,63,7) -> (43,63,7) -> (43,62,7) -> (42,61,6)
After setPathTo: Vehicle [Construction Vehicle 31] path: (42,61,6) -> (42,61,6) -> (43,62,7) -> (43,63,7)
After setPathTo: Vehicle [Construction Vehicle 31] path: (43,63,7) -> (43,63,7) -> (44,64,6) -> (45,65,5) -> (45,65,4)
...

この@ashenomo <3を調べてくれてありがとう

あなたが解決策を見つけることができれば私は大いに感謝するでしょう

理想的には、車両がループでスタックしていることを認識し、ループを強制する適切な目的地であるランダムなターゲットのチェックが不足していると思われるため、適切で明確な最終目的地への新しいミッションを生成する必要があります

車両がこれらのループでスタックすると、ランディングチューブタイルまたはメガフライヤーファクトリーにあることがよくあります。

どこかに悪いタイルタイプがない限り、メガフライヤーファクトリーが特にそのような問題を引き起こす理由はわかりませんか?

これは、目的地が別の車両によって占有されているときにトリガーすることを目的とした「サイドステッピング」ロジックのように見えます。 ターゲットは一時的に近くの空のタイルに変更されます。 車両がそのタイルに到達すると、元のターゲットに再び移動しようとします。

しかし、この場合、どういうわけかサイドステッピングを引き起こしている車両はCV31です。つまり、それはそれ自体と衝突しようとしていると考えています。 コード
これを示すために追加した追加のログ:

W 14531114914 void OpenApoc::VehicleMission::setPathTo(OpenApoc::GameState &, OpenApoc::Vehicle &, Vec3<int>, int, bool, bool):  ** setPathTo for [Construction Vehicle 31] to (43,63,2), maxIter:450, cV:Y, giveUp:N, currentPath n:0
W 14531141711 void OpenApoc::VehicleMission::setPathTo(OpenApoc::GameState &, OpenApoc::Vehicle &, Vec3<int>, int, bool, bool):  *** adjustTargetToClosestFlying: [Construction Vehicle 31] (43, 63, 2), piNe: N
W 14531234219 static bool OpenApoc::VehicleMission::adjustTargetToClosestFlying(OpenApoc::GameState &, OpenApoc::Vehicle &, Vec3<int> &, bool, bool, bool &): Target (43,63,7) contains vehicle [Construction Vehicle 31]. This will trigger a target adjustment.

車両が自分自身を避けようとしないことを確認するために追加のチェックを追加することは良い考えのように聞こえます。
とはいえ、サイドステッピングでこれが解決しない理由はわかりません。

さらにいくつかのデバッグノート:

  • 車両の使命は次のとおりです。
W 417133364405 bool OpenApoc::CityView::handleMouseDown(OpenApoc::Event *): Mission GotoLocation {43,63,2}
W 417133397242 bool OpenApoc::CityView::handleMouseDown(OpenApoc::Event *): Mission RecoverVehicle 
W 417133421554 bool OpenApoc::CityView::handleMouseDown(OpenApoc::Event *): Mission GotoBuilding BUILDING_WAREHOUSE_THREE
  • 43,63,2は到達不能です-それはMEGAFLYER_TWOの建物によって占められています。
  • チラシは上に行くことによって最も近い到達可能なタイルを探します。 この場合は43,63,7です。
    Screen Shot 2019-04-26 at 0 18 30
  • pickNearestは、このGotoLocationミッションではfalseです。したがって、車両が正確な場所に到達するまで完了しません。 それは不可能です。
  • それがRecoverVehicleミッションに続いていることを考えると、おそらく墜落した車両は43,63,2になり、この輸送機関はそれを回復するために割り当てられました。 以前のセーブゲームを試して、これらのミッションがどのように作成されたかを確認します。
  • 前のコメントで述べたチェックを追加すると(回避する車両を探すときに自分自身を考慮しないでください)、車両がループに入るのを防ぎますが、代わりに43,63,7でスタックします。

この以前のセーブゲームを見てください:

いくつかの建物が襲撃によって倒されたときにのみ発生するように見えるので、破壊されたタイルに関連していると思います

超高速に配置すると、街並みは信じられないほど遅いように見えます
再生できないところまで

添付の保存を見つけてください

SuperHuman_Slow.zip

Blazer Turbo Bike 49(破壊されたHadesブロックの近く)は、破壊された道路タイルである(86,78,2)に到達しようとしています。 しかし、スタックした建設車両と同様に、この車両のすべてのティックでsetPathToが呼び出されているのがわかります。これは、おそらく速度低下の一因となっています。

修正のPRは次のとおりです(手動でのみ確認済み)。
https://github.com/OpenApoc/OpenApoc/pull/563

このページは役に立ちましたか?
0 / 5 - 0 評価