Discuss Scratch

inoking
Scratcher
1000+ posts

Scratch2.0をModする会

x, y 座標の変換にてついてMODしてみました。
提案反対派の私がするのもナンですが。。。

結論から言うと難しいです。完全にはできませんでした。
内部的には変換できましたが見た目が変わりません。
変換後のブロックをクリックすると変換後の座標値が表示されるので内部的には変換できていることは確認できます。
表示言語を選択し直すか、プロジェクトを開き直すかすると表示も切り替わります。

見た目が変わらないのは、
相互変換に使用する共通処理が「表示のための変換処理」が不要な加減乗除や等号不等号だけに対して実装されているからです。


変更箇所:
src/scratch/BlockMenus.as:
public class BlockMenus implements DragClient {
...
private static const basicMathOps:Array = ['+', '-', '*', '/'];
private static const comparisonOps:Array = ['<', '=', '>'];
private static const positionOps:Array = ['xpos', 'ypos']; // 追加
...

public static function BlockMenuHandler(evt:MouseEvent, block:Block, blockArg:BlockArg = null, menuName:String = null):void {
...
if ((basicMathOps.indexOf(op)) > -1) { menuHandler.changeOpMenu(evt, basicMathOps); return; }
if ((comparisonOps.indexOf(op)) > -1) { menuHandler.changeOpMenu(evt, comparisonOps); return; }
if ((positionOps.indexOf(op)) > -1) { menuHandler.changeOpMenu(evt, positionOps); return; } // 追加
...

見た目が変わらない原因となっている処理:
blocks/Block.as:
public function changeOperator(newOp:String):void {
// Used to switch among a family of related operators (e.g. +, -, *, and /).
// Note: This does not deal with translation, so it only works for symbolic operators.
for each (var item:* in labelsAndArgs) {
if ((item is TextField) && (item.text == op)) item.text = newOp;
}
op = newOp;
opFunction = null;
fixArgLayout();
}

当初はアカウントを親子で共用していましたが、アカウント分離しました。アナウンス内容
父:inoking   子:inotomoking
MMGISS_sub
Scratcher
43 posts

Scratch2.0をModする会

inoking wrote:

MMGISS_sub wrote:

~略~
いままで配列全体を文字列型で参照するものといえば、
(list :: list)
これしかなく、また要素をつなげる文字も半角スペースで固定されてました。
~略~
本筋でなくてすみません。
どうやると半角スペースで結合できますか?
変数にリストを代入してみたところ間に何も入らずそのままつながりました。
あ、すみません。
配列の全要素が1文字であれば間に半角スペースが入ることはありません。
配列の要素のうちどれか一つでも複数文字であった場合は、半角スペースが入ります。
MMGISS_sub
Scratcher
43 posts

Scratch2.0をModする会

inoking wrote:

x, y 座標の変換にてついてMODしてみました。
(略)
見た目が変わらないのは、
相互変換に使用する共通処理が「表示のための変換処理」が不要な加減乗除や等号不等号だけに対して実装されているからです。

(略)
見た目が変わらない原因となっている処理:

blocks/Block.as:
public function changeOperator(newOp:String):void {
// Used to switch among a family of related operators (e.g. +, -, *, and /).
// Note: This does not deal with translation, so it only works for symbolic operators.
for each (var item:* in labelsAndArgs) {
if ((item is TextField) && (item.text == op)) item.text = newOp;
}
op = newOp;
opFunction = null;
fixArgLayout();
}
そうですね…
同じようにしてandとorの相互変換も試して見ていたのですが
これじゃあ難しいですね…
このScratchのソースにちょこっと追加して色々するだけでは相互変換は無理かもしれません
何とかして実現させたいものですが..
inoking
Scratcher
1000+ posts

Scratch2.0をModする会

今回MODしてみて、以前やったときと少し環境設定手順が変わっていたので
https://scratch.mit.edu/discuss/post/2088193/ のポストを更新しました。

当初はアカウントを親子で共用していましたが、アカウント分離しました。アナウンス内容
父:inoking   子:inotomoking
rapitan
Scratcher
100+ posts

Scratch2.0をModする会

-削除しました-

Last edited by rapitan (Sept. 7, 2019 11:47:26)


一定期間より前の活動はネットについてあまり知らなかった時の活動です…温かい目で見ていただけると幸いです…



rapitanです。 稀に活動しています。
inoking
Scratcher
1000+ posts

Scratch2.0をModする会

60FPSとかにすると結構おもしろいです。
ターボモードのように速くなります。
もちろん元々間に合っていない処理は速くなりません。

src/Scratch.as:
stage.frameRate = 30; // 60 にする

当初はアカウントを親子で共用していましたが、アカウント分離しました。アナウンス内容
父:inoking   子:inotomoking
inoking
Scratcher
1000+ posts

Scratch2.0をModする会

MODした Scratch.swf でオリジナルを置き換えると、
メニューからロゴや Tips, About が消え
コスチューム等の素材データ (media フォルダ等に格納) にもアクセスできなくなります。
ソースを検索してもそれらしいところは見つからなかったのですが
何か情報お持ちの方はいませんか?

当初はアカウントを親子で共用していましたが、アカウント分離しました。アナウンス内容
父:inoking   子:inotomoking
apple502j
Scratcher
1000+ posts

Scratch2.0をModする会

Last edited by apple502j (July 28, 2017 02:23:55)


OSS Contributor & Translator of Scratch 3.0, Experienced Wikian @ enwiki, Admin @ jawiki
51 Pull Requests merged to LLK repository since April 4, 2018
Speaks English & Japanese

Scratch 3.0のOSS貢献者と翻訳者、英語版ウィキでExperienced Wikian、日本語版管理者
2018年4月4日から、51本のPRがいままでにLLKリポジトリにマージされました
日本語+英語
inoking
Scratcher
1000+ posts

Scratch2.0をModする会

apple502j wrote:

ソースコードの情報は公開しないほうがいいです。
すみません、これはどういう意味でしょうか?

当初はアカウントを親子で共用していましたが、アカウント分離しました。アナウンス内容
父:inoking   子:inotomoking
apple502j
Scratcher
1000+ posts

Scratch2.0をModする会

Last edited by apple502j (July 28, 2017 02:23:46)


OSS Contributor & Translator of Scratch 3.0, Experienced Wikian @ enwiki, Admin @ jawiki
51 Pull Requests merged to LLK repository since April 4, 2018
Speaks English & Japanese

Scratch 3.0のOSS貢献者と翻訳者、英語版ウィキでExperienced Wikian、日本語版管理者
2018年4月4日から、51本のPRがいままでにLLKリポジトリにマージされました
日本語+英語
inoking
Scratcher
1000+ posts

Scratch2.0をModする会

apple502j wrote:

inoking wrote:

apple502j wrote:

ソースコードの情報は公開しないほうがいいです。
すみません、これはどういう意味でしょうか?
公開すると、そこを編集してmod版を本サイトにupするなどの不正が行われるかもしれないからです
MOD全般の話をされていますか?

ソースの情報を公開しないと自分で試すこともできませんし
本サイトにアップしようとしても本流には反映できないので問題ないと思います。

当初はアカウントを親子で共用していましたが、アカウント分離しました。アナウンス内容
父:inoking   子:inotomoking
abee
Scratcher
1000+ posts

Scratch2.0をModする会

Scratchのソースをmodした場合、必ずそのソースを公開しなければなりません。
これはライセンス(GPL v2)で決まっています。これはScratchのリスペクトしてリミックスするという考えと基本的に同じです。
https://github.com/LLK/scratch-flash/blob/develop/COPYING
ソースを公開するから悪用されるのではなく、みんながソースを知っていることにより、なにかあったときに対策でき、悪用を防げるのです。
本サイトに直接modをアップすることはできず、pull requestされたソースは、慎重に審査されて本体に取り込まれるかどうかが決まります。
inoking
Scratcher
1000+ posts

Scratch2.0をModする会

abee wrote:

Scratchのソースをmodした場合、必ずそのソースを公開しなければなりません。
ちなみに
これは改変したものを頒布する場合の話で、個人的に改変しているだけの場合には該当しませんよね。

当初はアカウントを親子で共用していましたが、アカウント分離しました。アナウンス内容
父:inoking   子:inotomoking
abee
Scratcher
1000+ posts

Scratch2.0をModする会

その通りです。リミックスして公開しない場合と同じです。

Last edited by abee (July 27, 2017 23:45:24)

inoking
Scratcher
1000+ posts

Scratch2.0をModする会

「Scratch 2.0オフラインエディター」の exe のソースは
https://github.com/LLK には見当たらなかったのですが公開されてないのでしょうか?

当初はアカウントを親子で共用していましたが、アカウント分離しました。アナウンス内容
父:inoking   子:inotomoking
MMGISS
Scratcher
1000+ posts

Scratch2.0をModする会

https://scratch.mit.edu/discuss/post/2750402/(Scratch2.0の提案)で投稿したものです。



ペンの状態を返すブロックを追加してほしいという提案があったのでModして作ってみたものです。

src/primitives/MotionAndPenPrims.as

		primTable["getPenHue"] = function():* { return interp.targetSprite().penHue };
primTable["getPenShade"] = function():* { return interp.targetSprite().penShade };
primTable["getPenSize"] = function():* { return interp.targetSprite().penWidth };
primTable["getPenState"] = function():* { return interp.targetSprite().penIsDown };
src/specs.as

		["pen color",										"r", 4, "getPenHue"],
["pen shade", "r", 4, "getPenShade"],
["pen size", "r", 4, "getPenSize"],
["-"],
["is pen down?", "b", 4, "getPenState"],
今回はただ値を返すだけだったので非常に簡単でした。Modやったことない人にもオススメです。

apple502j
Scratcher
1000+ posts

Scratch2.0をModする会

三項演算子をつくってみました。空,false,0では後の値が、でなければ前の値が返ります。
演算ブロックに if () then else が追加されます。
Specs.as 348:
["if %n then %s else %s",               "r", 8, "ifThenString",         "",""],

Primitives.as 71:
primTable["ifThenString"] = function(b:*):*{return ""+(interp.arg(b,0)?interp.arg(b,1):interp.arg(b,2))};


OSS Contributor & Translator of Scratch 3.0, Experienced Wikian @ enwiki, Admin @ jawiki
51 Pull Requests merged to LLK repository since April 4, 2018
Speaks English & Japanese

Scratch 3.0のOSS貢献者と翻訳者、英語版ウィキでExperienced Wikian、日本語版管理者
2018年4月4日から、51本のPRがいままでにLLKリポジトリにマージされました
日本語+英語
MMGISS
Scratcher
1000+ posts

Scratch2.0をModする会

apple502j wrote:

Specs.as 348:
["if %n then %s else %s",               "r", 8, "ifThenString",         "",""],
そのコードは
["if %n then %s else %s",               "r", 8, "if:then:else:",         1,"A","B"],
とすることで初期値の設定ができますよ!
また、他のブロックの慣例に従うと、関数名はif:then:else:とやった方がいいかもしれませんね

Last edited by MMGISS (July 30, 2017 03:33:33)

inoking
Scratcher
1000+ posts

Scratch2.0をModする会

apple502j wrote:

三項演算子をつくってみました。空,false,0では後の値が、でなければ前の値が返ります。
演算ブロックに if () then else が追加されます。
いいですね
これがあれば
(<[a] > [b]> * (10)) 歩動かす
のような隠し?テクニックも不要となります。
scratch2.0の提案 に入れたいですね。

なお、最初の引数は真偽値のほうがよいと思います。

当初はアカウントを親子で共用していましたが、アカウント分離しました。アナウンス内容
父:inoking   子:inotomoking
apple502j
Scratcher
1000+ posts

Scratch2.0をModする会

ターボモード・ブロック
BlockMenus.as 104:
		if (menuName == 'onOff') menuHandler.onOffMenu(evt);
BlockMenus.as 113:
		    handler.onOffMenu(evt);
BlockMenus.as 513:
    private function onOffMenu(evt:MouseEvent):void{
        var m:Menu = new Menu(setBlockArg,'onOff');
        m.addItem('off');
        m.addItem('on');
        showMenu(m);
     }
Interpreter.as 463:
		primTable["isTurboMode"]        = function(b:*):*{return turboMode};
		primTable["setTurboMode"]       = function(b:*):*{turboMode = ('on' == arg(b,0));app.refreshScreen();};
Specs.as 254:
		["turbo mode?",                         "b", 6, "isTurboMode"],
		["set turbo mode to %m.onOff",          " ", 6, "setTurboMode","on"],
Specs.as 271:
		["turbo mode?",                         "b", 106, "isTurboMode"],
		["set turbo mode to %m.onOff",          " ", 106, "setTurboMode","on"],
Scratch.as 1251:
    public function refreshScreen():void{stagePart.refresh();}

新しい引数のメニューを定義したり、関数を他ファイルから呼び出すために関数を作成したりといろいろ行っていますが、なんとか成功しています。

Last edited by apple502j (July 30, 2017 04:23:15)


OSS Contributor & Translator of Scratch 3.0, Experienced Wikian @ enwiki, Admin @ jawiki
51 Pull Requests merged to LLK repository since April 4, 2018
Speaks English & Japanese

Scratch 3.0のOSS貢献者と翻訳者、英語版ウィキでExperienced Wikian、日本語版管理者
2018年4月4日から、51本のPRがいままでにLLKリポジトリにマージされました
日本語+英語

Powered by DjangoBB

Standard | Mobile