まず、少しのコンテキスト (私がコーディングにかなり慣れていないという事実に加えて)... 私はボード ゲームを開発しており、そのゲームのテーブルトップ シミュレーター バージョンのために、一連の UI を作成しました。プレーヤーがテーブルの中央にあるボタンを押すたびにポップアップするメニュー アクション (プレーヤーはまず、特定の仕事の入札を送信することを発表する必要があり、ボタンを押すと、その仕事の RFP 入札プロセスが開始されます)。プレーヤーがボタンを押すと、UI は、他のすべてのプレーヤーに、問題のジョブの入札に参加するかどうかを尋ねるプロンプトを配信します。
参加しているすべての入札者は、市場での評判とともに有効な入札を入力します。これは、入札プロセスに勝った場合にジョブから収集する全体的な料金に影響します。次に、スクリプトが最低入札額を見つけて、ジョブの勝者を決定します。
この入札単価調整メニューの最初の 2 つのフィールドは編集可能ですが、3 番目 (料金) は読み取り専用です。手数料の数値は、他の 2 つに入力された値に応じてリアルタイムで調整されます。料金の計算式は ですeffective bid + (reputation * 5) = fee
。
私が経験している問題は、プレーヤーが最初の 2 つのフィールドのいずれかから値を削除すると (たとえば、ハイライトしてバックスペースを押すことによって)、次のエラーがゲームのチャット ボックスに表示されることです。
Error in Script (Custom Assetbundle - 64453f) function <adjustReputationBlue>:
chunk_3:(555,4-55): attempt to perform arithmetic on a string value
数値が削除されるとすぐにエラーが nil 値によって引き起こされるという仮定の下で作業していたので、演算が実行される前に最初の 2 つのフィールドの nil 値を 0 にリセットする条件付きロジックを追加しようとしました。しかし、それはうまくいかなかったので、少し困惑しています。
関連する Lua コードは次のとおりです (ボタンの ttslua ファイルにあります)。
function adjustBidBlue(Player, value, id)
effective_bid_blue = value
feeAdjustBlue()
end
function adjustReputationBlue(Player, value, id)
reputation_blue = value
feeAdjustBlue()
end
function feeAdjustBlue()
if effective_bid_blue == nil then
effective_bid_blue = 0
end
if reputation_blue == nil then
reputation_blue = 0
end
fee_blue = effective_bid_blue + reputation_blue * 5
UI.setAttribute("fee_blue", "text", fee_blue)
end
関連する XML コードは次のとおりです (グローバル UI ファイルにあります)。
<InputField
id="effective_bid_blue"
active="false"
characterLimit="4"
characterValidation="Integer"
fontSize="26"
height="44"
offsetXY="-285 -150"
onValueChanged="64453f/adjustBidBlue"
shadow="rgba(0,0,0,0.5)"
shadowDistance="2 -2"
showAnimation="FadeIn"
animationDuration="0.25"
visibility="Blue"
width="85">
</InputField>
<InputField
id="reputation_blue"
active="false"
characterLimit="2"
characterValidation="Integer"
fontSize="26"
height="44"
offsetXY="-95 -150"
onValueChanged="64453f/adjustReputationBlue"
shadow="rgba(0,0,0,0.5)"
shadowDistance="2 -2"
showAnimation="FadeIn"
animationDuration="0.25"
visibility="Blue"
width="85">
</InputField>
<InputField
id="fee_blue"
active="false"
characterValidation="Integer"
fontSize="26"
height="44"
offsetXY="95 -150"
readOnly="true"
shadow="rgba(0,0,0,0.5)"
shadowDistance="2 -2"
showAnimation="FadeIn"
animationDuration="0.25"
width="85"
visibility="Blue">
</InputField>
完全なコードを見たい場合は、GitHub にあります。そして、これがSteamワークショップにあります。
本当にありがとう!