0

フローレイアウトがあります。その中には約900のテーブルがあります。各テーブルは積み重ねられています。それらのサイズを変更するスライダーがあり、フローレイアウトのサイズも変更されます。

問題は、テーブルのサイズを直線的に変更する必要があることです。基本サイズは200x200です。したがって、scale = 1.0の場合、テーブルのwとhは200です。

問題の例を次に示します。

ここに画像の説明を入力してください

私の問題は、デルタが9ではなく8の場合です。増加が常に線形になるようにするにはどうすればよいですか?

void LobbyTableManagaer::changeTableScale( double scale )
    {
        setTableScale(scale);
    }

    void LobbyTableManager::setTableScale( double scale )
    {
        scale += 0.3;
        scale *= 2.0;

        float scrollRel = m_vScroll->getRelativeValue();
        setScale(scale);
        rescaleTables();
        resizeFlow();
    ...

    

    double LobbyTableManager::getTableScale() const
        {
            return (getInnerWidth() / 700.0) * getScale();
        }

    void LobbyFilterManager::valueChanged( agui::Slider* source,int val )
    {
        if(source == m_magnifySlider)
        {
            
            DISPATCH_LOBBY_EVENT
            {
                (*it)->changeTableScale((double)val / source->getRange());
            }
        }
    }

つまり、テーブルが常に直線的に増加するようにしたいのです。デルタが9回ではなく8回になる理由がわかりません。

ありがとう

4

1 に答える 1

1

「200Xテーブルスケール」の値を見てください。値は約8.8上昇しています。したがって、整数に丸めると、約80%の確率で前の値より9大きくなり、残りの20%の確率で8高くなります。

増加を毎回同じサイズにする必要がある場合は、すべてを整数で行う必要があります。それ以外の場合は、結果が9.0に近づくように、スケールの変更を調整する必要があります。

于 2012-04-06T13:38:47.973 に答える