12

ユーザーが画面に触れたときに、噴霧器のような効果を作成しようとしています。

ユーザーには色を選択するオプションがあるため、効果はユーザーの色の選択に基づいている必要があります。

そのスプレー効果を実装する方法は?

4

4 に答える 4

12

キャンバス上の一般的な描画パーツを使用するだけです...次に、描画先の半径を指定します。次に、「ランダム」関数を使用して、ユーザーが押している間、半径を使用して定義した円の領域内に(x)個のドットを描画します。より正確なヘルプが必要な場合は、私に知らせてください。

[編集]これは非常に擬似コードになります。しかし、これからコードを非常に簡単に機能させることができるはずです。

// This needs to happen in the down press on the canvas
if(currentBrush == Brush.SPRAY_CAN){
    int dotsToDrawAtATime = 20;
    double brushRadius = 1.0; // This is however large they set the brush size, could be (1), could be whatever the max size of your brush is, e.g., (50), but set it based on what they choose

    for (int i = 0; i < dotsToDrawAtATime; i++){
        // Pick a random color for single dot to draw
        // Get the circumference of the circle (2*pi*brushRadius), based on the X/Y that the user input when they pressed down. Pick a random spot inside that area, and draw a single dot. As this is a for loop, it will happen 20 different times for this one occurrence.
    }
}

[編集2]これを使用する場合は、Iain_bの方法を組み込むことを強く検討します。彼のポストを考慮に入れてください。

[編集3]これが画像です...多分これはあなたが理解するのに役立つでしょう...

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

[編集4]

これは、単純化するためにlain_bの追加部分で更新された私のコードです。

// This needs to happen in the down press on the canvas
if(currentBrush == Brush.SPRAY_CAN){
    int dotsToDrawAtATime = 20;
    double brushRadius = 1.0; // This is however large they set the brush size, could be (1), could be whatever the max size of your brush is, e.g., (50), but set it based on what they choose

    for (int i = 0; i < dotsToDrawAtATime; i++){
        // Pick a random color for single dot to draw
        ...

        // Get the location to draw to
        int x = touchedX + Random.nextGaussian()*brushRadius;
        int y = touchedY + Random.nextGaussian()*brushRadius;

        // Draw the point, using the random color, and the X/Y value
        ...
    }
}
于 2012-08-13T16:49:12.097 に答える
5

うーんIMO論理的に私は:

  • スプレー缶のサイズ/面積/半径をユーザーが選択できるようにし、画面に触れたときにタッチの座標を取得します。

  • 次に、タッチポイントを円の中心として使用して、スプレー缶の半径を計算します。

  • スプレー缶の半径内で一定量のランダムなピクセルの描画/色付けを開始します(ユーザーが同じ領域/同じ半径内で長く保持するほど、実際のスプレー缶のようにスポットを完全に埋める可能性が高くなります)。

于 2012-08-13T16:49:05.687 に答える
3

これは、上記の回答 (DavidKroukamp 、RyanInBinary) への追加です。十分なレポがないため、コメントできません。ピクセル分布にはガウス分布を使用します。思ったよりずっと簡単です:

int x = touchedX + Random.nextGaussian()*radius;
int y = touchedY + Random.nextGaussian()*radius;

はタッチ イベントの場所TouchedX / Yです (および x 、y は描画するピクセルの座標です)。より自然な分布になると思います。( Random-> java.util.Random)

于 2012-08-13T17:08:45.350 に答える