提供: Japanese Scratch-Wiki

2019年7月26日 (金) 16:06時点におけるGagagagagagagaqqww (トーク | 投稿記録)による版 (技術コンなんとなく2記事目)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)

ペンでボタンを描画することは、100%penの作品にはほとんど必要不可欠なことだ。本稿では、代表的なボタン描画の方法について解説していく。

因数について

ボタンは、ユーザーの操作による変化などを多く含ませられるものなので、定義に使用する因数は多くなる。そのため、この項目で紹介する定義の因数について補足を入れていく。ちなみにリスト「フラグ管理」は、ボタンが押されたときに発生するフラグを指定された行数に格納するものである。(ボタンが押されなくなることによって内容をリセットする機能は付属していない。)

  • (x::custom-arg)//中心のx座標
  • (y::custom-arg)//中心のy座標
  • (押される前の色::custom-arg)//押される前の色。
  • (マウスに触れたときの色::custom-arg)//マウスに触れた時の色。
  • (押されたときの色::custom-arg)//押されたときの色。
  • (フラグ用文字(列)::custom-arg)//フラグを建てるとき、リストに格納する文字ないし文字列。
  • (フラグ格納場所::custom-arg)//フラグを建てるとき、格納するリストの行数。
  • (描く図形::custom-arg)//この例においては「円」と「長方形」のみに対応しているが、自力で増やすこともできる。
  • (押される前の直径::custom-arg)//円の場合のみ参照。
  • (押される前の縦の長さ::custom-arg)//長方形の場合のみ参照。
  • (押される前の横の長さ::custom-arg)//長方形の場合のみ参照。
  • (マウスに触れたときの直径::custom-arg)//円の場合のみ参照。
  • (マウスに触れたときの縦の長さ::custom-arg)//長方形の場合のみ参照。
  • (マウスに触れたときの横の長さ::custom-arg)//長方形の場合のみ参照。
  • (押されたときの直径::custom-arg)//円の場合のみ参照。
  • (押されたときの長さ::custom-arg)//長方形の場合のみ参照。
  • (押されたときの横の長さ::custom-arg)//長方形の場合のみ参照。

定義「ボタン描画」

この定義は、基本的にずっとブロックの中に入れて、常に再描画しながら使う。必ず「再描画しないで実行する」のチェックボックスにチェックを入れ、「ずっと」ループ中は、この定義が始まる前に全部消すブロックでステージ上のペンの跡をリセットすること。

定義 ボタン(x)(y)(押される前の色)(マウスに触れたときの色)(押されたときの色)(フラグ用文字(列))(フラグ格納場所)(描く図形)(押される前の直径)(押される前の縦の長さ)(押される前の横の長さ)(マウスに触れたときの直径)(マウスに触れたときの縦の長さ)(マウスに触れたときの横の長さ)(押されたときの直径)(押されたときの縦の長さ)(押されたときの横の長さ)
もし<(描く図形)=[円]>なら
x座標を(x)、y座標を(y)にする
もし<((押される前の直径)/(2)) > ((マウス v)までの距離)>なら
もし<マウスが押された>なら
ペンの色を(押されたときの色)にする
ペンの太さを(押されたときの直径)にする
[フラグ管理 v]の(フラグ格納場所)番目を(フラグ用文字(列))で置き換える::list
でなければ
ペンの色を(マウスに触れたときの色)にする
ペンの太さを(マウスに触れたときの直径)にする
end
でなければ
ペンの色を(押される前の色)にする
ペンの太さを(押される前の直径)にする
end
ペンを下ろす
ペンを上げる
end
もし<(描く図形)=[四角形]>なら
もし<<<(マウスのx座標) < ((x)+((押される前の横の長さ)/(2)))>かつ<(マウスのx座標) > ((x)-((押される前の横の長さ)/(2)))>>かつ<<(マウスのy座標) < ((y)+((押される前の縦の長さ)/(2)))>かつ<(マウスのy座標) > ((y)-((押される前の縦の長さ)/(2)))>>>なら
もし<マウスが押された>なら
ペンの色を(押されたときの色)にする
[一時保存:縦の長さ v]を(押されたときの縦の長さ)にする
[一時保存:横の長さ v]を(押されたときの横の長さ)にする
[フラグ管理 v]の(フラグ格納場所)番目を(フラグ用文字(列))で置き換える::list
でなければ
ペンの色を(マウスに触れたときの色)にする
[一時保存:縦の長さ v]を(マウスに触れたときの縦の長さ)にする
[一時保存:横の長さ v]を(マウスに触れたときの横の長さ)にする
end
でなければ
ペンの色を(押される前の色)にする
[一時保存:縦の長さ v]を(押される前の縦の長さ)にする
[一時保存:横の長さ v]を(押される前の横の長さ)にする
end
x座標を((x)-((一時保存:横の長さ)/(2)))、y座標を((y)+((一時保存:縦の長さ)/(2)))にする
ペンの太さを(1)にする
(一時保存:横の長さ)回繰り返す
ペンを下ろす
x座標を(一時保存:横の長さ)ずつ変える
x座標を((一時保存:横の長さ)*(-1))ずつ変える
ペンを上げる
y座標を(-1)ずつ変える
end
end

関連項目

ペンブロック 100%pen