長時間運転したときの課題(と対策)
先日のアップデートを機にこまごまとした動作を見直したのでまとまった回数運転して様子を見ました
思ったより安定しません(苦笑
調子良ければ100周いけますがダメな時は数週でダウンします
サンプル増やすとある程度傾向も見えてきました
停止状況その1
・NOXメモリ使用量が増大して気絶
ありがちっちゃありがちですが、稼働時間とともにNOXのメモリ使用量はじりじり増加していきます
スワップ用領域をSSD上に64GBほど確保しているのですが稼働16時間ほどでカツカツになる感じです
ゲームを再起動させると若干改善しますが最終的にはNOX本体再起動しないとアカン感じなので放置
停止状況その2
・操作逸脱して破綻
メニューボタン押して画面に反映されるまでのラグ想定が甘いために不要なタップを発生させて
その後のゲーム挙動が想定外(いないはずのメニューに飛んでしまう)の状況に陥ります
ラグ待ち時間を気持ち長めにすることで対応しているのですがレアケースまで含めて考えると
想定外の挙動に行った先を拾って復旧させるロジックを追加しないとダメですね
面倒なので多分そこまでやりません
停止状況その3
・タップ入力無視されて破綻
押したはずなのにゲーム内に入力が通らないことがちょこちょこ起こります
これも上記ラグと関係があるような無いような感じですが無視される状況に若干傾向あるあたり闇深いです
ひとまず発生傾向高い操作部分は気持ち細かく状況監視ロジックをあてがってリトライかかるように修正します
(上記その2の地雷を踏まないように)
停止状況その3
・画像認識失敗して破綻
幸いこれまでに見えないものが見えて暴走することはありませんでしたが、見えてるものを見てくれないことがあります
サンプル画像の取り込み方や判定閾値の見直しでなんとかしたいところですがプランモードの経路設定部分は
どうにも安定しなかったので以下のような姑息な手段で対応
chkimgx("plan_mode.bmp",NOXid) //プランモードボタン位置
P_adb_BTN(G_IMGX_X+delta_X +randomx(140),G_IMGX_Y+delta_Y +randomx(40),1000+randomx(500),"PlanMode")
sleep(3+randomx(2))
for i = 1 to 1
Sw_X = 690 + random(5)
Sw_Y = 200 + random(10)
Mv_X = random(10)-40
Mv_Y = 710 + random(20)
CMD = "cd /d D:\Program Files\Nox\bin & nox_adb -s " + nox_port + " shell input touchscreen swipe " + Sw_X + " " + Sw_Y + " " + (Sw_X + Mv_X) + " " + (Sw_Y + Mv_Y) +" 350"
print "MAP scroll 1 X1:" + Sw_X + " Y1:" + Sw_Y + " X2:" + (Sw_X + Mv_X) + " Y2:" + (Sw_Y + Mv_Y)
DOSCMD(CMD) //scroll
sleep((500+randomx(300))/1000)
next
tim = gettime() + 10 //タイムオーバー判定基準
while true //1T目的地
sleep(1)
ifb chkimgx("dest_1T.bmp",NOXid,x1,y1,x2,y2,1,10,-1) then
print "Dstn 1T X:" + G_IMGX_X + " Y:" +G_IMGX_Y
break
endif
ifb tim < gettime() then
P_random_scroll
tim = gettime() + 10 //タイムオーバー判定基準
endif
wend
//目的地選択
P_adb_BTN(G_IMGX_X +delta_X -80 +randomx(40),G_IMGX_Y +delta_Y -45 +randomx(40),1000+randomx(300),"Dstn 1T")
tim = gettime() + 10 //タイムオーバー判定基準
while true //目的地選択
ifb chkimgx("dest_2T.bmp",NOXid,x1,y1,x2,y2,1,10,-1) then
print "Dstn 2T X:" + G_IMGX_X + " Y:" +G_IMGX_Y
break
endif
ifb tim < gettime() then
P_random_scroll
tim = gettime() + 10 //タイムオーバー判定基準
endif
wend
//目的地選択
P_adb_BTN(G_IMGX_X+delta_X -30 + randomx(40), G_IMGX_Y+delta_Y -70 + randomx(40), 500+randomx(500),"Dstn 2T")
MAPの表示倍率をデフォルトで対応するように見直したためにスクロールさせないと順路と目的地を視界に納められません
この辺の座標設定がアレだったり手前にオーバーレイされる斜め十字の模様が邪魔だったりするせいか
見えてる目標が見えないため動作が不安定になっていました
プランモードの経路設定(1T目標、最終目標)でタイムオーバー判定したときはちょっぴり画面をスクロールさせます
だいたい1、2回やり直せば画像を見つけてくれる感じです