はじめに

type {_X:float where 0.000000 <= _X, _X <= 1.000000}

UIで使用されるOpacityには、このような型が採用されています。これは、0.0 ~ 1.0の間でしか数値を入れることができないようにする制限を持たせる機能で、

This variable expects to be initialized with a value of type type{_X:float where 0.000000 <= _X, _X <= 1.000000}, but this initializer is an incompatible value of type type{20.000000}.

もしその範囲外の値を入れようとすると、このようなエラーが表示されます。

問題点

多くの場合、ゲームの処理の関係上で動的にOpacityを変更したくなる場合があります。

var Opacity:float = 0.5

NewColorBlock := color_block:
    DefaultOpacity := Opacity

# This variable expects to be initialized with a value of type type{_X:float where 0.000000 <= _X, _X <= 1.000000}, but this initializer is an incompatible value of type float.

しかし、このようにfloat型を直接渡すと、「対応していない型」というエラーが出てしまいます。

解決方法

var Opacity:float = 0.5

if(ValidOpacity := type{_X:float where 0.000000 <= _X, _X <= 1.000000}[Opacity]):
    NewColorBlock := color_block:
        DefaultOpacity := ValidOpacity

では、どうすればよいかですが。

解決方法は非常に簡単で、Opacityで要求されている「型: type{_X:float where 0.000000 <= _X, _X <= 1.000000}」でキャストしてあげるだけです。すると、もしOpacityが0.0 – 1.0の範囲に収まる場合は、ValidOpacityに変換された数値が入ります。逆に、範囲外であればifは失敗してしまいます。

opacity := type{_X:float where 0.000000 <= _X, _X <= 1.000000}

Function():void=

    var Opacity:float = 0.5
    
    if(ValidOpacity := opacity[Opacity]):
        NewColorBlock := color_block:
            DefaultOpacity := ValidOpacity

ちなみに、このような記述をすることで少しだけ可読性を上げることもできますが…必須ではないです。

送信中です