Discuss Scratch
- Discussion Forums
- » 日本語
- » 質問コーナー3
- KimiruHamiru
-
500+ posts
質問コーナー3
ペンテキストエンジンに必要なこと、その3)「ペンの動きを文字列化して効率的にやる」
(といいつつ「必要」ではないような気もします)
ペンテキストエンジンでは
・「ペンの動かし方を数値化」して
・その数値を、「文字列」として1つの変数(一般にはリストの1行分のデータとして)に入れておいて
・描画するときには、その文字列を読み出して
・「文字列」から取り出した数値に従ってペンを動かす
という仕組みがよく使われます。いくつかプロジェクトを読んだことがありますが、ペンテキストエンジンと名乗っているプロジェクトは全部これにあてはまるようでした。
「ペンの動かし方を数値化」というのは言葉で書くと何やらかっこよさそうですが、「画面の真ん中の☆を描く」のを「画面の別の3か所に☆を描く」ようにするためにはどうしたらいいか、という程度の話です。ペンで図形を描くことに慣れてくれば、だんだんやり方が見えてくると思います。
この「文字列」は「297998967525@2921」みたいな、意味を知らないでそれだけ見るとかなり謎な感じになります。書いた本人以外は「文字列を見ても意味が分からない」ので「コードを読んで理解する」しかありません(余談ですが、Scratchはバイナリデータを扱うのがすごく面倒なのもあって一般に「文字列として保存」します。WindowsやMacで使われる「OpenTypeフォントのglyfレコード」なんかも、文字列化せずバイナリで保存するだけでやってることは同じです)。
この部分の作り方はかなり幅があって、オリジナルの文字列化の方法がしばしば作られているように思います。この部分がペンテキストエンジンという分野の本質のように思うのですが、長くなってきたので、まずはここまで。
手探りしている段階では、効率化にこだわらず、まずは変数に「ABC」が入っていたら「ABC」とペンで描くあたりまで作ってみるとよいと思います。
ある程度慣れてきたら、最初に戻りますが、「ほかの人のプロジェクトを読んでみる」のも現実的になってくるはずです。
(といいつつ「必要」ではないような気もします)
ペンテキストエンジンでは
・「ペンの動かし方を数値化」して
・その数値を、「文字列」として1つの変数(一般にはリストの1行分のデータとして)に入れておいて
・描画するときには、その文字列を読み出して
・「文字列」から取り出した数値に従ってペンを動かす
という仕組みがよく使われます。いくつかプロジェクトを読んだことがありますが、ペンテキストエンジンと名乗っているプロジェクトは全部これにあてはまるようでした。
「ペンの動かし方を数値化」というのは言葉で書くと何やらかっこよさそうですが、「画面の真ん中の☆を描く」のを「画面の別の3か所に☆を描く」ようにするためにはどうしたらいいか、という程度の話です。ペンで図形を描くことに慣れてくれば、だんだんやり方が見えてくると思います。
この「文字列」は「297998967525@2921」みたいな、意味を知らないでそれだけ見るとかなり謎な感じになります。書いた本人以外は「文字列を見ても意味が分からない」ので「コードを読んで理解する」しかありません(余談ですが、Scratchはバイナリデータを扱うのがすごく面倒なのもあって一般に「文字列として保存」します。WindowsやMacで使われる「OpenTypeフォントのglyfレコード」なんかも、文字列化せずバイナリで保存するだけでやってることは同じです)。
この部分の作り方はかなり幅があって、オリジナルの文字列化の方法がしばしば作られているように思います。この部分がペンテキストエンジンという分野の本質のように思うのですが、長くなってきたので、まずはここまで。
手探りしている段階では、効率化にこだわらず、まずは変数に「ABC」が入っていたら「ABC」とペンで描くあたりまで作ってみるとよいと思います。
ある程度慣れてきたら、最初に戻りますが、「ほかの人のプロジェクトを読んでみる」のも現実的になってくるはずです。
- YY04
-
100+ posts
質問コーナー3
KimiruHamiru さん、詳しい説明、ありがとうございます!とても参考になりました!
さらに質問なんですが、よく海外の方が作っているのを見ると、大きさを変えて描画できるのが多いです。
その大きさの基準はどれくらいなんでしょうか?(縦横30pxとか…)
さらに質問なんですが、よく海外の方が作っているのを見ると、大きさを変えて描画できるのが多いです。
その大きさの基準はどれくらいなんでしょうか?(縦横30pxとか…)
受験勉強中のため、活動休止(減少)しています。…といいつつ実はたまに作品上げてたりする。
要件はこちらに。
<おすすめプロジェクトランキング>
1.Minecraft実況 ~全実績解除を目指して~ 再生リスト ←参照数増加中!!
2.仮想世界地図←主力事業
3.デジタル時計←自信作
- ZeroX_Game
-
100+ posts
質問コーナー3
その基準は人次第です。自分が100%にしたい大きさを決め、大きさを変える引数(百分率)で移動する量をかけてあげるといいです KimiruHamiru さん、詳しい説明、ありがとうございます!とても参考になりました!
さらに質問なんですが、よく海外の方が作っているのを見ると、大きさを変えて描画できるのが多いです。
その大きさの基準はどれくらいなんでしょうか?(縦横30pxとか…)
気長にまとう
1年とか10年とか
- KimiruHamiru
-
500+ posts
質問コーナー3
表示サイズじゃなくて、「拡大率100%(おおきくもちいさくもしない)状態の1文字のデータの話」と理解したのですがあってるでしょうか。 KimiruHamiru さん、詳しい説明、ありがとうございます!とても参考になりました!
さらに質問なんですが、よく海外の方が作っているのを見ると、大きさを変えて描画できるのが多いです。
その大きさの基準はどれくらいなんでしょうか?(縦横30pxとか…)
これは、「ペンの動かし方の文字列化」と同様、というか文字列化の効率のために調整されることが多いように思います。
「何とも言えない」というのが一つの答えなのですが、考え方として、
どういうサイズなら、使いたい文字の形が表現できるか
「文字列化(ペンの動きの符号化)」したときの、「扱いやすさ」
あたりに左右されているように思います。
Scratchでは、取り回しが楽なのか、
「1文字の表示領域を9x9の方眼に見立てて、x座標に1文字、y座標に1文字使って数字2文字」で表現してペンを動かす
というPTEが多かったような気もします。
つまり文字の形は「縦横9pxのデータ」として保存しておいて、表示必要に応じて拡大する感じです。わたしもそんなたくさん読んでるわけじゃないので、他にもあると思いますが、桁数が変化したり桁数大きくなったりすると処理の手間が増えていきますし、文字デザインの労力が大爆発するはずなので、練習用にはこのサイズが無難なような気がします。
あと、うろ覚えなのですが、
・OSが使っているアウトラインフォントは画面表示用で1024x1024、印刷用で4096x4096とか
・日本の8ビットコンピュータの時代は8x8に収まるフォントがよく使われた
・5x7ぐらいが、「アルファベット+数字」全部表現するためのぎりぎりの線で、英語圏の古いコンピュータのフォントは確かそんな感じ
あたりが参考になるでしょうか。
別に「ドット絵とか整数の枠組みに縛られる必要」はないので、「小数で管理して曲線の組み合わせで描く」とかいう可能性もありそうですし、「7セグメントディスプレイ」とか調べると全く違った方向が見えてくるかもしれません。
- YY04
-
100+ posts
質問コーナー3
わかりました。やってみます。
受験勉強中のため、活動休止(減少)しています。…といいつつ実はたまに作品上げてたりする。
要件はこちらに。
<おすすめプロジェクトランキング>
1.Minecraft実況 ~全実績解除を目指して~ 再生リスト ←参照数増加中!!
2.仮想世界地図←主力事業
3.デジタル時計←自信作
- SYOUI-2
-
100+ posts
質問コーナー3
scratchアシカの事ですか? アシカは絶滅危惧種です。
ヘイトスピーチはコミュニティガイドライン違反です、スクラッチで人種差別はやめましょう。
※投稿とは関係ないことが書かれていますがこれは署名と言っていちいち手動で書いていません
↓サブアカウント↓
![](https://uploads.scratch.mit.edu/get_image/user/107546457_30x30.png)
![](https://uploads.scratch.mit.edu/get_image/user/107612284_30x30.png)
![](https://uploads.scratch.mit.edu/get_image/user/107636095_30x30.png)
- ZeroX_Game
-
100+ posts
質問コーナー3
個人的質問はプロフィールで行ってくれるとみんなの質問が埋もれずにすみます。次からプロフィールで行ってくれると嬉しいです。scratchアシカの事ですか? アシカは絶滅危惧種です。
気長にまとう
1年とか10年とか
- itnkmkw
-
1000+ posts
質問コーナー3
別に個人的な質問ではありませんし、会話の流れ的につながってるので大丈夫ではないでしょうか。ただし、古い投稿の掘り起こしではありますが。(下線部追加)個人的質問はプロフィールで行ってくれるとみんなの質問が埋もれずにすみます。次からプロフィールで行ってくれると嬉しいです。scratchアシカの事ですか? アシカは絶滅危惧種です。
Last edited by itnkmkw (July 26, 2019 10:05:35)
トラウマは存在しない。存在するのは今だけなんだ。過去のトラウマが原因で今の行動をとってしまったんじゃない。
今,自分でその行動をとる判断をしたんだ。過去は関係ない。だから,トラウマに取りつかれるのはやめよう。今から変われるんだ。
Start in your life…
興味のある方はこちら。itnkmkw と一緒に 心 について考えるスタジオ
※この署名のメッセージは不定期で変更されています。もしかしたらあなたへのメッセージかもよ~^^
皆さ~ん!「聖書」と言う言葉を聞いてどう思いますか?興味のある方はここやココやここへ!
@itnkmkwと申します。沖縄在住(ホームスクーラー)です。心理学と音楽やってます。MIX依頼募集中!
《コミュニティーをより良い所にするために》Scratch に関係ないトピックについての意見交換所では議事進行役を務めております(名ばかりですが)。どーぞよろしく
最近プロジェクト作ってませんが、もうすぐ聖書RPGの製作を再開しますので…いまは彩雲が忙しいのだ。
- ZeroX_Game
-
100+ posts
質問コーナー3
うーん、個人的な確認はプロフィールでいいと思います。今コメント欄閉じてるみたいですけど。
気長にまとう
1年とか10年とか
- YY04
-
100+ posts
質問コーナー3
「画面全体のランダムな位置に出させる」ことなら、このようにできます。 今シューティングゲームを作っています
敵がランダムに出てこさせるにはどうやったらいいですか?
ずっと何秒かの待機時間は必要です。
x座標を ((-240) から (240) までの乱数) 、y座標を ((-180) から (180) までの乱数) にする
[敵 v] のクローンを作る
() 秒待つ
end
クローンされたとき
敵の行動
受験勉強中のため、活動休止(減少)しています。…といいつつ実はたまに作品上げてたりする。
要件はこちらに。
<おすすめプロジェクトランキング>
1.Minecraft実況 ~全実績解除を目指して~ 再生リスト ←参照数増加中!!
2.仮想世界地図←主力事業
3.デジタル時計←自信作
- hikahikaru
-
100+ posts
質問コーナー3
3.0はそもそもhtmlです。現在ではそのプロジェクトは意味をなしません。 スクラッチ3.0のプロジェクトをhtml化することができるものがあったと思うのですが、思い出せません。教えてくださるとありがたいです。
- rakurakutonton
-
94 posts
質問コーナー3
では、上の方からランダムに出現させることはできますか?「画面全体のランダムな位置に出させる」ことなら、このようにできます。 今シューティングゲームを作っています
敵がランダムに出てこさせるにはどうやったらいいですか?ずっと何秒かの待機時間は必要です。
x座標を ((-240) から (240) までの乱数) 、y座標を ((-180) から (180) までの乱数) にする
[敵 v] のクローンを作る
() 秒待つ
end
クローンされたとき
敵の行動
- ZeroX_Game
-
100+ posts
質問コーナー3
この場合のhtml化は多分、単体で動かせるようにすることだと思われます。あとこの質問自体割と前のもので古い投稿を掘り起こすと、最新の質問が次ページに降りてしまうことがあるので日付等を確認してから返信しておい他方がいいと思います3.0はそもそもhtmlです。現在ではそのプロジェクトは意味をなしません。 スクラッチ3.0のプロジェクトをhtml化することができるものがあったと思うのですが、思い出せません。教えてくださるとありがたいです。
気長にまとう
1年とか10年とか
- ZeroX_Game
-
100+ posts
質問コーナー3
そのまま上のプログラムを応用すればよくて、少し考えるとわかるのですが、y座標が変化せずに上で固定すればいいのでそのようにするために乱数のブロックを外して、180あたりの数を書けばいいですでは、上の方からランダムに出現させることはできますか?「画面全体のランダムな位置に出させる」ことなら、このようにできます。 今シューティングゲームを作っています
敵がランダムに出てこさせるにはどうやったらいいですか?
略
何秒かの待機時間は必要です。
Last edited by ZeroX_Game (July 27, 2019 01:38:10)
気長にまとう
1年とか10年とか
- YY04
-
100+ posts
質問コーナー3
「上からランダムに出てきて下に落ちていく」感じなら、では、上の方からランダムに出現させることはできますか?「画面全体のランダムな位置に出させる」ことなら、このようにできます。 今シューティングゲームを作っています
敵がランダムに出てこさせるにはどうやったらいいですか?ずっと何秒かの待機時間は必要です。
x座標を ((-240) から (240) までの乱数) 、y座標を ((-180) から (180) までの乱数) にする
[敵 v] のクローンを作る
() 秒待つ
end
クローンされたとき
敵の行動
ずっとこうなると思います。
x座標を ((-240) から (240) までの乱数) 、y座標を (180) にする
[敵 v] のクローンを作る
() 秒待つ
end
クローンされたとき
<(y座標) < [-180]> まで繰り返す
y座標を (落下スピード) ずつ変える
敵の行動
end
このクローンを削除する
Last edited by YY04 (July 27, 2019 02:34:03)
受験勉強中のため、活動休止(減少)しています。…といいつつ実はたまに作品上げてたりする。
要件はこちらに。
<おすすめプロジェクトランキング>
1.Minecraft実況 ~全実績解除を目指して~ 再生リスト ←参照数増加中!!
2.仮想世界地図←主力事業
3.デジタル時計←自信作
- Poteto143
-
1000+ posts
質問コーナー3
「クローンされたとき」の下の青いブロック、「x座標」じゃなくて「y座標」ですね・・・
また、「落ちていく」感じにしたいのなら、
また、「落ちていく」感じにしたいのなら、
y座標を () ずつ変える//マイナスの値を入れるも必要だと思います。
6周年になりました。ありがとうございます
![](http://cdn.scratch.mit.edu/scratchr2/static/__4e185d8e3caf3a2952d94251254bbfdd__/djangobb_forum/img/smilies/big_smile.png)
- YY04
-
100+ posts
質問コーナー3
そうでした。直しときます。 「クローンされたとき」の下の青いブロック、「x座標」じゃなくて「y座標」ですね・・・
また、「落ちていく」感じにしたいのなら、y座標を () ずつ変える//マイナスの値を入れるも必要だと思います。
受験勉強中のため、活動休止(減少)しています。…といいつつ実はたまに作品上げてたりする。
要件はこちらに。
<おすすめプロジェクトランキング>
1.Minecraft実況 ~全実績解除を目指して~ 再生リスト ←参照数増加中!!
2.仮想世界地図←主力事業
3.デジタル時計←自信作