文字の色を管理する小技( & 引数省略カスタムブロック)

文字の色を管理する小技( & 引数省略カスタムブロック)
ok-scratch

スクラッチに挑戦している皆さん、どうも!スクラッチコーチです。

キーを押すだけでスプライトの色と明るさが変わる!1つのカスタムブロックに色・明るさの2引数を持たせ、空のまま渡すことで「色だけ」「明るさだけ」「両方」を使い分けられる引数省略テクニックを学ぼう。

さぁ、スクラッチでナニ作る!?

1つのカスタムブロックに色と明るさの2引数を持たせ、空か否かを条件分岐で判定する設計が光っている。値が入っているときだけ対応するエフェクトを適用する仕組みにより、「色だけ変える」「明るさだけ変える」「両方変える」という3パターンを1ブロックで使い分けられる。呼び出し側のコードが統一されるため、新しいプリセットを追加するコストも低い。引数省略というパターンをどう組み立てているのか、作り方を見ていこう。

動画で見てみよう

ok-scratch ok-scratch
チャンネル登録して応援よろしく!チャンネル登録する

チュートリアルの元になった作品

今回の目標

  • 色相と明度の2引数を持つカスタムブロックを作る
  • 引数が空のときは効果を適用しない省略パターンを実装する
  • 5つのキーにプリセットを割り当ててスプライトの見た目を切り替える

スターター作品をリミックスしよう

このチュートリアルにはスターター作品があります。使わなくても大丈夫だけど、最低限の素材などが用意されてるので便利です。
スターター作品をダウンロード

#1初期化処理

準備

スプライト「カラースプライト」を開く

カラースプライトカラースプライト
スプライトについて
キーボード入力に応じてスプライトの色相・明度エフェクトを変化させるスプライト
どんな役割か
キーを押すとスプライトの色や明るさがパッと変わる仕組みを作るよ。`change_color`プロシージャに色相と明度をまとめて渡せるようにして、いろんなキーで見た目を切り替えられるようにするよ!

カスタム定義「色を変える」を追加

引数で指定した色相・明度のエフェクトをスプライトに適用するプロシージャ。値が空でない場合のみ各エフェクトを設定する

カスタム定義「色を変える」を追加

実装

step-0

まずイベントgreenflag が押されたときで旗をクリックしたら見た目画像効果をなくすを実行。画像効果が全部クリアされて、スプライト本来の色に戻るよ。いつでもやり直せるセーフティネットみたいなもんだね。

スクラッチの文字色について

今回のポイントは真っ赤な色でコスチュームを用意しておくこと。真っ赤にしておくのがスクラッチでは最も管理しやすいとされている。これは古いスクラッチの仕様に引きづられている慣習でもあるんだけど、前は真っ赤じゃないと「明るさを100」にしても白くならなかった時代がある。それ以来スクラッチでは文字を赤にしておくっていうのが王道になってる。

確認プレビューしておこう 確認プレビューしておこう
旗を押すと画像効果がリセットされて、元の赤に戻ったね。

#2カスタムブロックの定義

ok-scratch ok-scratch
この作品の核になる「色を変える」カスタムブロックを作っていくよ。色相と明るさの2つの引数を受け取って、スプライトの見た目を一発で変える仕組みだ。
step-1

ブロック定義定義 ( )で定義して、「画面を再描画せずに実行する」(warpモード)をオンにしてある。まず画像効果を全リセットしてから、演算( ) > ( )で引数が空じゃないかチェック。値が入ってるときだけ「色」や「明るさ」の効果をセットするよ。

ok-scratch ok-scratch
普通はこういうとき、色用と明るさ用でカスタムブロックを分けて作りがち。でもこの作品では1つにまとめて、引数を空にしておくことで「色だけ」「明るさだけ」「両方」を自由に使い分けられるようにしてるんだ。これが「引数の省略」っていう考え方で、実際のプログラミングでもバリバリ活躍するテクニックだよ。

#3明るさを最大にする

ok-scratch ok-scratch
カスタムブロックができたから、さっそく使ってみよう。「s」キーを押したら明るさだけMAXにする設定だ。
step-2

イベント( ) キーが押されたときで「s」キーに反応させて、「色を変える」ブロックを呼び出す。色相は空のまま、明るさだけ100を渡すと、色はリセットされて明るさだけが適用されるってわけ。

ok-scratch ok-scratch
キーを押したら色が変わるっていうのは、今回はサンプルとして便利だからそう作ってるだけ。みんなは自分の作品に合わせて自由な方法で文字の色を変えてOKだよ〜、もちろん

確認プレビューしておこう 確認プレビューしておこう
sキーを押すとカラースプライトが真っ白になった。明るさ100だけ指定して色相はスルーしてる。

#4色だけ変える

ok-scratch ok-scratch
今度は逆パターン。「a」キーで色相だけを変えて、明るさには手をつけないようにしてみよう。
step-3

イベント( ) キーが押されたときで「a」キーに反応させて、色相に120、明るさは空で呼び出す。色相120だと緑っぽい色になるよ。同じカスタムブロックでも、どの引数に値を入れるかで全然違う効果が出るのがこの仕組みの面白いところ。

#5別の色に切り替え

ok-scratch ok-scratch
「o」キーには色相22を割り当ててみよう。元のスプライトが赤色だと、色相22でオレンジっぽく見えるはず。
step-4

やってることは「a」キーと同じで、色相の値だけ違う。呼び出し方が統一されてるから、新しいプリセットを追加するのもラクなんだよね。

#6色と明るさを同時に

ok-scratch ok-scratch
ここまでは片方の引数だけ使ってきたけど、「m」キーでは両方に値を入れてみよう。
step-5

色相66、明るさ-30で「色を変える」ブロックを呼び出す。2つの引数を組み合わせることで、色のニュアンスまで細かくコントロールできるんだ。

ok-scratch ok-scratch
Scratchの色の効果は0〜200の値で色がぐるっと一周する仕組みだよ。22でオレンジ、66で黄緑、120で緑…って感じで、数値と色の対応がわかると便利。明るさのマイナス値を重ねると同じ色相でもトーンが落ちて、渋い色合いが出せるんだよね。

#7暗くする

ok-scratch ok-scratch
最後のプリセットは「k」キー。明るさを-100にすると、スプライトが真っ暗になるよ。
step-6

色相は空のまま渡してるから色の変化はなし。明るさの効果は-100(真っ暗)から100(真っ白)までの範囲で、もしこの効果を使わなかったら、色相をどう変えてもスプライトを真っ暗にすることはできないんだよ。5つのキー全部にプリセットが揃ったから、いろいろ試してみよう。

確認プレビューしておこう 確認プレビューしておこう
a・o・m・kキーでそれぞれ違う色パターンに切り替わるようになった。

まとめ

1つのカスタムブロックで「色だけ」「明るさだけ」「両方」を使い分けるテクニック、マスターできたかな?引数を空にしておくことで呼び出し側がすっきりするこの設計、ほかのプロジェクトでも使いまわせるよ!Scratchの画像効果は組み合わせると面白い表現が生まれるから、ぜひいろいろ試してみてね。

ブクマよろしくお願いします! ブクマよろしくお願いします!
どんどん追記・更新していくので、ブックマークやシェアよろしくお願いします!