2

まず、少しのコンテキスト (私がコーディングにかなり慣れていないという事実に加えて)... 私はボード ゲームを開発しており、そのゲームのテーブルトップ シミュレーター バージョンのために、一連の 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ワークショップにあります。

本当にありがとう!

4

1 に答える 1