Discuss Scratch
- Discussion Forums
- » 日本語
- » 3Dについて話し合うトピック ※最初に#1を必ず読もう※
- KimiruHamiru
-
500+ posts
3Dについて話し合うトピック ※最初に#1を必ず読もう※
(質問者のプロジェクトを眺めた感じ「 小4でもわかるscratchの四角を回す方法の解説をお願いします座標値を変化させる」というあたりに興味があるのかなと思ったので前回の回答になったのですが)
(理由まで)
話をちょっと戻して、
「Scratchの四角を回す方法」ということだと、
・コスチュームエディタで四角をかく
・以下のコードを実行する
x座標を(0)、y座標を(0)にするこれが「Scratchで四角を回す」という課題に対する解答としては、
(90)度に向ける
(60)回繰り返す
(6)度回す
end
「ストレートで一番簡単で、他のどんな方法よりも実行速度も速い、ベストな方法」
と思います。また、
・「Scratchを使ってる小4」ならきっとわかる
・理由の説明は、ブロックを見れば、きっといらない
・この例は明らかに平面上の四角を、平面上で回転している
かなと思います。
「これでは聞きたいことに答えてない!」
「これではわからない!」
「このやり方では、自分がやりたいことは表現できない!」
と思う場合は、「この回答では、どこに問題があるか、質問をした人が、意思表示する」ということをしないと、「期待した答え」は得られないと思います。
- KimiruHamiru
-
500+ posts
3Dについて話し合うトピック ※最初に#1を必ず読もう※
ペン(スタンプ使わない)で四角を描く場合、
一番単純なのはこんなコードになるかと思います。
つづく。
一番単純なのはこんなコードになるかと思います。
消すここで、四角を動かす(平行移動する)というとこんなコードで表現できます…
x座標を(0)、y座標を(0)にする
ペンを下ろす
x座標を(100)、y座標を(0)にする
x座標を(100)、y座標を(100)にする
x座標を(0)、y座標を(100)にする
x座標を(0)、y座標を(0)にする
ペンを上げる
消すが、私は「数字がたくさん並んでるのを、いつも気にしておく」のがつらいんです。
x座標を((0)+(マウスのx座標))、y座標を(0)にする
ペンを下ろす
x座標を((100)+(マウスのx座標))、y座標を(0)にする
x座標を((100)+(マウスのx座標))、y座標を(100)にする
x座標を((0)+(マウスのx座標))、y座標を(100)にする
x座標を((0)+(マウスのx座標))、y座標を(0)にする
ペンを上げる
つづく。
- KimiruHamiru
-
500+ posts
3Dについて話し合うトピック ※最初に#1を必ず読もう※
つづき。
ここで、
つづく。
ここで、
座標値を覚えるとやっても同じことで、さらにこれを
消す
x座標を([vertArray v]の(1)番目)、y座標を([vertArray v]の(2)番目)にする
ペンを下ろす
x座標を([vertArray v]の(3)番目)、y座標を([vertArray v]の(4)番目)にする
x座標を([vertArray v]の(5)番目)、y座標を([vertArray v]の(6)番目)にする
x座標を([vertArray v]の(7)番目)、y座標を([vertArray v]の(8)番目)にする
x座標を([vertArray v]の(9)番目)、y座標を([vertArray v]の(10)番目)にする
ペンを上げる
定義 座標値を覚える
[vertArray v]のすべてを削除する
(0)を[vertArray v]に追加する
(0)を[vertArray v]に追加する
(100)を[vertArray v]に追加する
(0)を[vertArray v]に追加する
(100)を[vertArray v]に追加する
(100)を[vertArray v]に追加する
(0)を[vertArray v]に追加する
(100)を[vertArray v]に追加する
(0)を[vertArray v]に追加する
(0)を[vertArray v]に追加する
座標値を覚えるここまでやっておくと、移動操作の設定は、
[変数 v]を(0)にする
消す
(5)回繰り返す
x座標を([vertArray v]の((変数)+(1))番目)、y座標を([vertArray v]の((変数)+(1))番目)にする
ペンを下ろす
[変数 v]を(2)ずつ変える
end
ペンを上げる
定義 座標値を覚える
[vertArray v]のすべてを削除する
(0)を[vertArray v]に追加する
(0)を[vertArray v]に追加する
(100)を[vertArray v]に追加する
(0)を[vertArray v]に追加する
(100)を[vertArray v]に追加する
(100)を[vertArray v]に追加する
(0)を[vertArray v]に追加する
(100)を[vertArray v]に追加する
(0)を[vertArray v]に追加する
(0)を[vertArray v]に追加する
x座標を([vertArray v]の((変数)+(1))番目)、y座標を([vertArray v]の((変数)+(2))番目)にするの1行を実行する瞬間のことだけ考えればいい、プロジェクトの他のブロックについては、全く考えなくていい、という状態にできます。私が普段書いてるプロジェクトでは、もう一歩進めて、
略という形にして、「この定義をどうにかすればいい。他のコードは無視してここだけ書き換えてる限りほかに影響はでないし、結構色んな事が表現できる」という状態にしています。
[x v]を([vertArray v]の((変数)+(1))番目)にする
[y v]を([vertArray v]の((変数)+(2))番目)にする
xとyをどうにかする(x),(y)
x座標を(x)、y座標を(y)にする
略
定義 xとyをどうにかする(x),(y)
[x v]を(x)にする
[y v]を(y)にする
つづく。
- KimiruHamiru
-
500+ posts
3Dについて話し合うトピック ※最初に#1を必ず読もう※
つづき
「四角とはどんなもの」を1つのリストに押し込めて、
「移動とはどんなこと」を1つの定義に押し込める
ということができました。
あとは、わりと自由自在です。
ここまで、「四角を回す」話にはかすりもしていませんが、
ペンを使う状態で「四角を回す」ためには、ここまでの前提知識があると、考えるのが、かなり楽です。
というか私の場合は、ここまでの前提が頭に入ってないと、考えるのがかなり難しいです。
もう少しつづく
定義 xとyをどうにかする(x),(y)を使って、最初に書いた「移動」を表現すると
[x v]を(x)にする
[y v]を(y)にする
定義 xとyをどうにかする(x),(y)となります。ここまでで、
[x v]を((x)+(マウスのx座標))にする
[y v]を(y)にする
「四角とはどんなもの」を1つのリストに押し込めて、
「移動とはどんなこと」を1つの定義に押し込める
ということができました。
あとは、わりと自由自在です。
ここまで、「四角を回す」話にはかすりもしていませんが、
ペンを使う状態で「四角を回す」ためには、ここまでの前提知識があると、考えるのが、かなり楽です。
というか私の場合は、ここまでの前提が頭に入ってないと、考えるのがかなり難しいです。
もう少しつづく
- KimiruHamiru
-
500+ posts
3Dについて話し合うトピック ※最初に#1を必ず読もう※
つづき
「回転」では、「元の座標」を「別の座標」へ動かすわけなんですが、
「x軸移動」とかとは違って、元のy座標が、別のxの座標に影響を与えます。
ここで、
「元のx座標と元のy座標」をどうにかして
「別のx座標と別のy座標」に変化させる
という実験装置を作ります。
この「4つの数字」をいろいろいじってみるとよいかなと思います。
「四角形」のニュアンスがちょっと違いますが、仕組み的には、
https://scratch-mit-edu.ezproxyberklee.flo.org/projects/616038327/
の
・「連動スイッチ」を切った(0)のが生の状態。
・「連動スイッチ」を入れた(1)にしたのが、「回転」に近い状態。
です。
この辺の仕組みを作って実験していると、「回転って何?」というのに近づけるかもと思います。
「長さが一定」というのは四則演算(+-×÷)で表現できないのでいよいよ「アレ」がほしくなってくるんではないかと思います。
「望むべき回転」には2,3歩足りない感じですが、ここで連投を終わっておきます。
「回転」では、「元の座標」を「別の座標」へ動かすわけなんですが、
「x軸移動」とかとは違って、元のy座標が、別のxの座標に影響を与えます。
ここで、
「元のx座標と元のy座標」をどうにかして
「別のx座標と別のy座標」に変化させる
という実験装置を作ります。
定義 xとyをどうにかする(x),(y)
[x v]を(((x)*(1))+((y)*(0)))にする
[y v]を(((x)*(0))+((y)*(1)))にする
この「4つの数字」をいろいろいじってみるとよいかなと思います。
「四角形」のニュアンスがちょっと違いますが、仕組み的には、
https://scratch-mit-edu.ezproxyberklee.flo.org/projects/616038327/
の
・「連動スイッチ」を切った(0)のが生の状態。
・「連動スイッチ」を入れた(1)にしたのが、「回転」に近い状態。
です。
この辺の仕組みを作って実験していると、「回転って何?」というのに近づけるかもと思います。
「長さが一定」というのは四則演算(+-×÷)で表現できないのでいよいよ「アレ」がほしくなってくるんではないかと思います。
「望むべき回転」には2,3歩足りない感じですが、ここで連投を終わっておきます。
Last edited by KimiruHamiru (July 1, 2022 05:03:04)
- KimiruHamiru
-
500+ posts
3Dについて話し合うトピック ※最初に#1を必ず読もう※
「3Dについて話し合うトピック」なので一応3Dの話題に振っておくと
ここまでの話の延長にあるのがこのプロジェクト
https://scratch-mit-edu.ezproxyberklee.flo.org/projects/639384394
です。3次元(x,y,z)に拡張していますが、各「操作」は1次元(平行移動)とか2次元(各軸回転)です。
ここまでの話の延長にあるのがこのプロジェクト
https://scratch-mit-edu.ezproxyberklee.flo.org/projects/639384394
です。3次元(x,y,z)に拡張していますが、各「操作」は1次元(平行移動)とか2次元(各軸回転)です。
- Elevator_yukkuri123
-
100+ posts
3Dについて話し合うトピック ※最初に#1を必ず読もう※
3Dのプロジェクトの作り方が分かりません、、どうやって作ればいいですか?
Last edited by Elevator_yukkuri123 (July 9, 2022 10:57:49)
- StrongPeanut
-
1000+ posts
3Dについて話し合うトピック ※最初に#1を必ず読もう※
3Dのプロジェクトの作り方が分かりません、、どうやって作ればいいですか?この記事を読んでみてください。
- KimiruHamiru
-
500+ posts
3Dについて話し合うトピック ※最初に#1を必ず読もう※
3Dの何がむずかしくて何がかんたんなのか、わからなくなってきたのですが、 3Dのプロジェクトの作り方が分かりません、、どうやって作ればいいですか?
たとえば、こんなのはどうでしょうね。
https://scratch-mit-edu.ezproxyberklee.flo.org/projects/712973032/
「マウスボタンを押している状態」では、
マウスのx座標に合わせて猫が動くだけの「2Dのコード」になります。
「3Dのコード」は
・w=300/(300+z)という式(遠く=zが大きくなる=小さく見える)
・「xとyと大きさ」を全部w倍している部分
だけにしてみました。
簡単すぎ?難しすぎ?
- tomato-0809
-
100+ posts
3Dについて話し合うトピック ※最初に#1を必ず読もう※
部外者ですが
wのコードが何をしたいのかわからない感じです。
wが何をしたいのかがわかれば後は理解できます。
小6には無理なのかも
wのコードが何をしたいのかわからない感じです。
wが何をしたいのかがわかれば後は理解できます。
小6には無理なのかも
- KimiruHamiru
-
500+ posts
3Dについて話し合うトピック ※最初に#1を必ず読もう※
指摘ありがとうございます。 wのコードが何をしたいのかわからない感じです。
wが何をしたいのかがわかれば後は理解できます。
見ている人から1メートル先にある棒を
見ている人から3メートル先に置くと
棒は短く見える。長さは1/3に見えるはず
みたいなことをやっています。
具体的には、
・ネコを画面上の0,0に100%の大きさで表示している
・画面を見ている人は「画面の300ピクセル手前」にいて「画面中央0,0を見ている」
と考えて、
画面上で100%で見えるネコを、画面よりも奥、見ている人から600ピクセルの距離(2倍遠く)に移動したら、50%(元の1/2)の大きさで見えるはず
画面上で100%で見えるネコを、画面よりも奥、見ている人から900ピクセルの距離(3倍遠く)に移動したら、33%(元の1/3)の大きさで見えるはず
みたいなことを表現しています。
「画面上にある」ものは100%の大きさでスタンプ、「画面より奥にある」ものはそれより小さくスタンプ、しています。
zは画面上、つまり「画面の手前でも奥でもなくぴったり画面上にある場合」を「0」
としていて、奥をプラス、手前をマイナスで、画面上のピクセルと同じ扱いで、何ピクセルの距離にあるか、という表現にしています。
wという変数名はあんまりよくないと思っているのですが、「意味が確実に伝わって、見た目上こわくない充分に短い名前」を、まだ思いついてないので、x,y,zに近いアルファベットにしています。wという名前をこの意味で使うのは一般的ではないと思います(glslでほぼ同じ概念でwが出てくるけどそれは分母分子が逆のはず)。
- tomato-0809
-
100+ posts
3Dについて話し合うトピック ※最初に#1を必ず読もう※
なるほど、何をしたいのか意味はわかるけど、なぜそのコードなのかがうまくわからない感じです。
やっぱ小6には無理かも
やっぱ小6には無理かも
- takoyariika
-
48 posts
3Dについて話し合うトピック ※最初に#1を必ず読もう※
クローンのレイヤーの上下関係(3Dの前後の表現)について教えてください。
今作っているゲームは疑似3dのゲームなんですが、Y軸の位置によってレイヤーの上下を変えたいんですがいい方法はありますか?
今使ってる方法は
①全部のクローンのY座標とIDをリストに入れる
②リストY座標順に並べ替える
③IDをY座標順に並べ替える
④IDの順番に定期的にクローンを前面に表示する
この方法だと何故かうまくいかないので何かいい方法があったら教えてください。
今作っているゲームは疑似3dのゲームなんですが、Y軸の位置によってレイヤーの上下を変えたいんですがいい方法はありますか?
今使ってる方法は
①全部のクローンのY座標とIDをリストに入れる
②リストY座標順に並べ替える
③IDをY座標順に並べ替える
④IDの順番に定期的にクローンを前面に表示する
この方法だと何故かうまくいかないので何かいい方法があったら教えてください。
- KimiruHamiru
-
500+ posts
3Dについて話し合うトピック ※最初に#1を必ず読もう※
直感的には4の部分の各クローンの実行順辺りが怪しい気がします(やや当てずっぽうです)。 クローンのレイヤーの上下関係(3Dの前後の表現)について教えてください。
今作っているゲームは疑似3dのゲームなんですが、Y軸の位置によってレイヤーの上下を変えたいんですがいい方法はありますか?
今使ってる方法は
①全部のクローンのY座標とIDをリストに入れる
②リストY座標順に並べ替える
③IDをY座標順に並べ替える
④IDの順番に定期的にクローンを前面に表示する
この方法だと何故かうまくいかないので何かいい方法があったら教えてください。
多分手順は違うのですが、目指す方向の完成品として、
https://scratch-mit-edu.ezproxyberklee.flo.org/projects/307388424/
が参考になるかなと思います。
- Poteto143
-
1000+ posts
3Dについて話し合うトピック ※最初に#1を必ず読もう※
まずはScrarchですでに作られている「上から見た3dゲーム」を探して、その作品の中を見てみるといいかもしれません。 上から見た3dゲームってどうやって作るんですか
教えて下さい
その上でわからないことがあればここで聞いてみるといいと思います。