Discuss Scratch

inoking
Scratcher
1000+ posts

質問コーナー4

#4821:
それらの例は同じ処理になっていないですが。。
比較するなら等価な処理をループで回して実測してみるとよいでしょう。
apple502j
Scratcher
1000+ posts

質問コーナー4

Scratchの演算ブロックはshort-circuit evaluationを行わないため、その点では「もし~」のほうが早いです。
doraemon-yu
Scratcher
100+ posts

質問コーナー4

誰かオンラインゲームの作り方を具体的に教えてください
お願いします
abee
Scratcher
1000+ posts

質問コーナー4

#4821
これは、実際に試した方が面白いです。私は予想と違う結果になりました。
SABATYANN
Scratcher
14 posts

質問コーナー4

doraemon-yu wrote:

誰かオンラインゲームの作り方を具体的に教えてください
お願いします
クラウド変数に敵の自分の位置を入れるんです  そのクラウド変数のいちに代わりのスプライトを移動させますそれをXとYをやります
SABATYANN
Scratcher
14 posts

質問コーナー4

yucca42 wrote:

もし <> なら //if elseの組み合わせ



でなければ
もし <> なら



でなければ
...
end

<<> かつ <<> または <...>>>//演算系の組み合わせ
どちらが処理が軽いでしょうか?
微妙な差でもいいのでお願いします。
見やすさは考慮しません
演算の方が軽いですしかし処理のスピードに関してはせぎょの方が速いのでは?
inoking
Scratcher
1000+ posts

質問コーナー4

書いてる最中に次が投稿されてしまいましたがこのまま投稿します。
#4823:

apple502j wrote:

Scratchの演算ブロックはshort-circuit evaluationを行わないため、その点では「もし~」のほうが早いです。
読者層を考えて英語ではなくもう少し普通に書けないでしょうか。。
短絡評価 を行わないとのことですがその出典またはソースコードの場所をお願いします。

また、短絡評価を行わないため「もし~」のほうが早いという理由をもう少し説明お願いします。
abee
Scratcher
1000+ posts

質問コーナー4

#4827
実際に試したでしょうか。
gold_banana_kingdom
Scratcher
100+ posts

質問コーナー4

やってること違ったっぽいので削除

Last edited by gold_banana_kingdom (Feb. 22, 2021 13:19:24)

apple502j
Scratcher
1000+ posts

質問コーナー4

inoking wrote:

書いてる最中に次が投稿されてしまいましたがこのまま投稿します。
#4823:

apple502j wrote:

Scratchの演算ブロックはshort-circuit evaluationを行わないため、その点では「もし~」のほうが早いです。
読者層を考えて英語ではなくもう少し普通に書けないでしょうか。。
短絡評価 を行わないとのことですがその出典またはソースコードの場所をお願いします。

また、短絡評価を行わないため「もし~」のほうが早いという理由をもう少し説明お願いします。
Scratchのブロックは、引数を先に処理し、それがすべて処理し終わった段階で親ブロックが実行されるという仕組みになっています。
つまり、「AかつB」の評価は「A」と「B」が両方とも評価された後に行われます。
短絡評価の場合は親ブロック「AかつB」の評価をする際に必要に応じてAやBの評価が行われます。
and関数は https://github.com/LLK/scratch-vm/blob/develop/src/blocks/scratch3_operators.js#L68 で定義されていますが、OPERANDは事前に計算されています。
「もし~」の場合は、条件Aが偽の場合、下位のスタックブロックは一切実行されません。これは一種の短絡評価です。

代表的な「時間がかかる値ブロック」として翻訳拡張機能のブロックを使ってみます。
もし <([こんにちは]を[英語 v]に翻訳する::pen)=[test]> なら
もし <([Hello]を[日本語 v]に翻訳する::pen)=[こんにちは]> なら
[abc] と言う
end
end
というスクリプトを考えます。短絡評価を行う場合は、このスクリプトは
もし <<([こんにちは]を[英語 v]に翻訳する::pen)=[test]>かつ<([Hello]を[日本語 v]に翻訳する::pen)=[こんにちは]>> なら
[abc] と言う
end
とほぼ同じです。しかし、Scratchは短絡評価を行わないため、「こんにちはを英語に翻訳する = test」が偽の場合であっても「Helloを日本語に翻訳する=こんにちは」は評価されます。前者の場合は、「こんにちはを英語に翻訳する = test」のため下位の「もし」(とその引数)は評価されません。
KimiruHamiru
New Scratcher
500+ posts

質問コーナー4

@greenFlagがクリックされたとき
(all v) 番目を [ログ v] から削除する
[ラップ v]を(2000年からの日数)にする
処理1
((86400)*((2000年からの日数)-(ラップ)))を[ログ v]に追加する
[ラップ v]を(2000年からの日数)にする
処理2
((86400)*((2000年からの日数)-(ラップ)))を[ログ v]に追加する
[ラップ v]を(2000年からの日数)にする
処理3
((86400)*((2000年からの日数)-(ラップ)))を[ログ v]に追加する
[ラップ v]を(2000年からの日数)にする
処理4
((86400)*((2000年からの日数)-(ラップ)))を[ログ v]に追加する
定義 処理1
(1000000)回繰り返す
もし<>なら
もし<>なら
でなければ
何もしない
end
でなければ
end
end
定義 処理2
(1000000)回繰り返す
もし<<>かつ<<>ではない>>なら
何もしない
end
end
定義 何もしない
定義 処理3
(1000000)回繰り返す
もし<>なら
でなければ
もし<>なら
でなければ
何もしない
end
end
end
定義 処理4
(1000000)回繰り返す
もし<<()=()>かつ<<>ではない>>なら
何もしない
end
end
ちょっと誰が何を言っているか、質問が何か、いまいち理解できているか自信がないのですが、多分上のコードで言えば、

yucca42さんの質問は「処理2と処理3の比較」で「どちらが速い?」

inokingさんの指摘は「「処理2と処理3の比較」は処理内容が異なるので比較対象として不適切だから、「処理1と処理2」もしくは「処理3と処理4」を比較すべきである)」

みたいな話かなという理解です。

上記コードの実行結果は、私の環境、私の設定では
処理1:0.67秒
処理2:0.51秒
処理3:1.99秒
処理4:1.71秒
ぐらいです。実行を繰り返すと数字は上下しますが、大小がひっくり返ることはそうそうないようです。

「処理2と処理3」では処理2の方が極端に速い
というのが質問に対する直接的な答えになるかと思うのですが、
それは
「処理内容が違う」ので、式が評価される回数が違うから
であって、
「もしブロック」と「条件式」の比較にはなっていないと思います。
そこで、
等価な処理として、処理1と処理2(もしくは処理3と処理4)を比較する場合、処理2の方が若干速いという結果が得られています。
恐らくは当初の質問に対する答えはこれで、いささか乱暴ではありますが、
「もしブロック」と「条件式」の速度を比較すると、「条件式で書けるなら条件式で書いた方が若干速い」
と言えるかなと思います。
Arcade_Creator0123
Scratcher
100+ posts

質問コーナー4

計算の時の4.63783e+21みたいなのをe+を外してリストに保存する方法を教えてください

Last edited by Arcade_Creator0123 (Feb. 22, 2021 22:58:50)

yukku
Scratcher
1000+ posts

質問コーナー4

Arcade_Creator0123
Scratcher
100+ posts

質問コーナー4

yukku wrote:

作ってみました。
ありがとうございます。
LetsBurger
Scratcher
86 posts

質問コーナー4

今Penでイントロを作ってるんですけど、penで描いたものの大きさ、座標、向きを指定して描画できるように死体のですが、向きのやり方が分かりません。教えて下さい。
doraemon-yu
Scratcher
100+ posts

質問コーナー4

昨日、僕が質問コーナー4に投稿した質問がなくなっています。
なぜですか

昨日の質問は、
オンラインゲームの作り方を具体的に教えてください
お願いします

というものです。
この投稿に何か問題があるのでしょうか?
daikikato
Scratcher
100+ posts

質問コーナー4

doraemon-yu wrote:

昨日、僕が質問コーナー4に投稿した質問がなくなっています。
なぜですか

昨日の質問は、
オンラインゲームの作り方を具体的に教えてください
お願いします

というものです。
この投稿に何か問題があるのでしょうか?
あなたの投稿は上の方の#4824にありましたよ。
mitaku115
Scratcher
500+ posts

質問コーナー4

LetsBurger wrote:

今Penでイントロを作ってるんですけど、penで描いたものの大きさ、座標、向きを指定して描画できるように死体のですが、向きのやり方が分かりません。教えて下さい。
_人人人人_
> 死体 <
 ̄Y^Y^Y^ ̄
さておき
描画するスプライト自体を回転させればいいんじゃ
ないでしょうか
-JF21-
Scratcher
71 posts

質問コーナー4

LetsBurger wrote:

今Penでイントロを作ってるんですけど、penで描いたものの大きさ、座標、向きを指定して描画できるように死体のですが、向きのやり方が分かりません。教えて下さい。
ペンで描いた図形の向きを変えたいということでしょうか。

その一つに、三角関数を使うやり方があります。

細かいやり方は忘れてしまったのですが、大雑把なやり方を紹介します。
例えば、三角形をペンで描くとしましょう。

1, 3つの点それぞれの、回す中心との距離を、三平方の定理を使って求める。
2, 3つの点それそれが、中心との距離を半径とする円の中で、どの角度にいるかを逆三角関数を使って求める。
3, 求めた角度に回したい角度を足し、三角関数を使って3つの点それぞれの回した後の座標を求める。
4, 描画

追記: 3の「回したい角度」とは、「今の状態から何度回すか」です。
   今の状態が60度で、90度にしたいなら、30を足してください。

だいたいこんな感じの流れです。

mitaku115 wrote:

描画するスプライト自体を回転させればいいんじゃ
ないでしょうか
それではできません。
ペンでの描画をすべて
() 歩動かす
でやっているのなら別ですが。

Last edited by -JF21- (Feb. 23, 2021 02:03:31)

Poteto143
Scratcher
1000+ posts

質問コーナー4

#4837
自分が投稿した後に、他の人がどんどん投稿して「あれ、前質問したやつどこ…?」となるのは結構頻繁にあります。
そんな時は、ディスカッションフォーラムのホームに移動して、ページ下の「Show your topics/posts」のpostsをクリックすれば自分の過去の投稿が見られますよ。

Powered by DjangoBB