自分が取り組んでいるペイントプログラムがあり、不透明度に取り組み始めました。現在、背景色をブラシの色と比較し、アルファに基づいて2つを平均してから、新しいピクセルを設定しています。マウスが下がっている間、継続的に変化しているものを継続的にサンプリングしないように、描画しているものの一部を横にキャッシュする必要があります。50ピクセルをスタックまたはキューに入れて、画面がいっぱいになると画面上のピクセルの変更を開始し、マウスを上にするとすべてのコンテンツを画面に完全に空にすることで、これを修正できると考えました。私が知りたいのは、より効率的なもの、2つのスタック(座標と色の1つ)または座標と色に解析する文字列の1つのスタックです。TLDR:より効率的なのは、異なるデータ型の2つのスタックです。
1 に答える
あなたの質問は必要以上に長くて混乱しているように見えますが、あなたが尋ねているのは次のとおりだと思います。
ペイントプログラムをデザインしています。ユーザーが白い背景に50%不透明な黒いピクセルをペイントしている場合、それらを灰色で表示したいと思います。私の問題は、ユーザーが自分自身と交差する曲線を描いたり、マウスカーソルを同じ場所にしばらく置いたままにすると、繰り返されるピクセルがどんどん暗くなることです。50%が黒、次に75%、次に87.5%...これは欲しくない。マウスボタンが押されている限り、曲線が何度交差しても、ピクセルを2回「ペイント」することはできません。
この質問はそれ自体に答えます。ピクセルが2回ペイントされないようにする唯一の方法は、最後にマウスボタンを押してからどのピクセルがペイントされたかを追跡することです。交換
image[mouse.x][mouse.y] = alpha_average(image[mouse.x][mouse.y], current_color, current_alpha);
と
if (not already_painted[mouse.x][mouse.y]) {
image[mouse.x][mouse.y] = alpha_average(image[mouse.x][mouse.y], current_color, current_alpha);
already_painted[mouse.x][mouse.y] = true;
}
handle(mouse_up) {
already_painted[*][*] = false;
}
問題は解決しましたよね?
しかし、別の暗黙の質問に答えるために:並列配列の束と文字列に詰め込まれたデータの束のどちらかを選択しようとしている場合は、おそらく間違っています。すべてのUnity3D言語(Python、C#、Javascript)は、struct / class / dictタイプとタプルをサポートしています。どちらも、並列配列やすべてが文字列であるというよりも優れたアイデアです。