Discuss Scratch
- apple502j
- Scratcher
1000+ posts
Scratch2.0をModする会
いろいろなmod
・コスチューム名 Specs.as 163
・楽器 SoundPrims.as 68
Specs.as 189
・大文字小文字識別= Specs.as 339
Primitives.as 178
Primitives.as 54:
・累乗 Primitives.as 61
Specs.as 334:
・表示されている SensingPrims.as 250
SensingPrims.as 60
Specs.as 300
Specs.as 325
・コスチューム名 Specs.as 163
["costume name", "r", 2, "costumeName"],
primTable["getInstrument"] = function(b:*):* { return interp.targetObj().instrument+1 };
["instrument", "r", 3, "getInstrument"],
・大文字小文字識別= Specs.as 339
["%s equals %s completely", "b", 8, "ceqA:B:", "", ""],
public static function ceq(a1:*, a2:*):int { // This is static so it can be used by the list "contains" primitive. var n1:Number = Interpreter.asNumber(a1); var n2:Number = Interpreter.asNumber(a2); // X != X is faster than isNaN() if (n1 != n1 || n2 != n2) { // Suffix the strings to avoid properties and methods of the Dictionary class (constructor, hasOwnProperty, etc) if (a1 is String && emptyDict[a1]) a1 += '_'; if (a2 is String && emptyDict[a2]) a2 += '_'; // at least one argument can't be converted to a number: compare as strings var s1:String = lcDict[a1]; if(!s1) s1 = lcDict[a1] = String(a1); var s2:String = lcDict[a2]; if(!s2) s2 = lcDict[a2] = String(a2); return s1.localeCompare(s2); } else { // compare as numbers if (n1 < n2) return -1; if (n1 == n2) return 0; if (n1 > n2) return 1; } return 1; }
primTable["ceqA:B:"] = function(b:*):* { return ceq(interp.arg(b,0),interp.arg(b,1)) == 0};
・累乗 Primitives.as 61
primTable["pow"] = function(b:*):* { return Math.pow(interp.numarg(b,0),interp.numarg(b,1)) };
["%n ^ %n", "r", 8, "pow", "", ""],
・表示されている SensingPrims.as 250
private function primIsShown(b:Block):* { var objName=interp.arg(b, 0); var proto:ScratchObj = app.stagePane.objNamed(String(objName)); if ('_myself_' == objName) proto = interp.activeThread.target; if(proto is ScratchSprite){ var s:ScratchSprite = ScratchSprite(proto); return s.visible; } return false; }
primTable['isShown:'] = primIsShown;
["%m.spriteOnly is shown?", "b", 7, "isShown:"],
["%m.spriteOnly is shown?", "b", 107, "isShown:"],
署名は、ディスカッションフォーラムの機能である。署名は、その人のすべての投稿の下部に追加される。署名は、BBCodeで記述できる。 署名を追加/変更/削除したい場合は、ディスカッションフォーラムのホームの一番下に行き、「Change your signature」を押す。署名の大きさは150pxまでである。これには、改行、画像を含む。- Japanese Scratch-Wiki 「署名」
- CommandSlash017
- Scratcher
500+ posts
Scratch2.0をModする会
コスチューム名のブロックはハッキングで出せる=一応実装はされているので、そのブロックの色をはっきりさせてブロックパレットに表示するだけで良いと思うのですが…
- apple502j
- Scratcher
1000+ posts
Scratch2.0をModする会
だから、それを実装しているのです。 コスチューム名のブロックはハッキングで出せる=一応実装はされているので、そのブロックの色をはっきりさせてブロックパレットに表示するだけで良いと思うのですが…
Specs.asにあるのは、ブロックパレットのブロック一覧です。
そこにコスチューム名ブロックを追加しています。
署名は、ディスカッションフォーラムの機能である。署名は、その人のすべての投稿の下部に追加される。署名は、BBCodeで記述できる。 署名を追加/変更/削除したい場合は、ディスカッションフォーラムのホームの一番下に行き、「Change your signature」を押す。署名の大きさは150pxまでである。これには、改行、画像を含む。- Japanese Scratch-Wiki 「署名」
- CommandSlash017
- Scratcher
500+ posts
Scratch2.0をModする会
ブロックの色はブロックパレットによって決定されているという解釈で良いですか?だから、それを実装しているのです。 コスチューム名のブロックはハッキングで出せる=一応実装はされているので、そのブロックの色をはっきりさせてブロックパレットに表示するだけで良いと思うのですが…
Specs.asにあるのは、ブロックパレットのブロック一覧です。
そこにコスチューム名ブロックを追加しています。
- apple502j
- Scratcher
1000+ posts
Scratch2.0をModする会
いいえ。ブロックの色はブロックパレットによって決定されているという解釈で良いですか?だから、それを実装しているのです。 コスチューム名のブロックはハッキングで出せる=一応実装はされているので、そのブロックの色をはっきりさせてブロックパレットに表示するだけで良いと思うのですが…
Specs.asにあるのは、ブロックパレットのブロック一覧です。
そこにコスチューム名ブロックを追加しています。
["ブロック名", "種類(スペース:スタック r:値 b:真偽", ブロックのカテゴリ(=色), "呼ばれる関数", "初期値(任意)"],
Last edited by apple502j (July 30, 2017 06:23:57)
署名は、ディスカッションフォーラムの機能である。署名は、その人のすべての投稿の下部に追加される。署名は、BBCodeで記述できる。 署名を追加/変更/削除したい場合は、ディスカッションフォーラムのホームの一番下に行き、「Change your signature」を押す。署名の大きさは150pxまでである。これには、改行、画像を含む。- Japanese Scratch-Wiki 「署名」
- apple502j
- Scratcher
1000+ posts
Scratch2.0をModする会
押されたキー&キーの対応を増やす
BlockMenus.as 314(書き換え)
SensingPrims.as 58:
SensingPrims.as 226(書き換え)
SensingPrims.as 248
Specs.as 286
Specs.as 312
既知のバグ:Shiftキー+なにかで、キーを離しても押されたキーとなる 日本語入力中は、正常に動作しない。
BlockMenus.as 314(書き換え)
private function keyMenu(evt:MouseEvent):void { var ch:int; var namedKeys:Array = ['space', 'up arrow', 'down arrow', 'right arrow', 'left arrow', 'any', 'delete', 'backspace', 'tab', 'shift', 'enter']; var m:Menu = new Menu(setBlockArg, 'key'); for each (var s:String in namedKeys) m.addItem(s); for (ch = 33; ch < 127; ch++) m.addItem(String.fromCharCode(ch)); // all char can be shown showMenu(m); }
primTable['pressedKeys'] = primPressedKeys;
private function primKeyPressed(b:Block):Boolean { var key:String = interp.arg(b, 0); if (key == 'any') { for each (var k:Boolean in app.runtime.keyIsDown) { if (k) return true; } return false; } if (key == 'shift') return app.runtime.shiftIsDown; var ch:int = key.charCodeAt(0); if (ch > 127) return false; if (key == 'backspace') ch = 8; if (key == 'tab') ch = 9; if (key == 'enter') ch = 13; if (key == 'delete') ch = 127; if (key == 'left arrow') ch = 28; if (key == 'right arrow') ch = 29; if (key == 'up arrow') ch = 30; if (key == 'down arrow') ch = 31; if (key == 'space') ch = 32; return app.runtime.keyIsDown[ch]; }
private function primPressedKeys(b:Block):* { var i:int; var keydata:String; var keys:String = ""; if(app.runtime.shiftIsDown) keys+='shift '; for (i=0;i<128;i++) { if(app.runtime.keyIsDown[i]){ keydata=String.fromCharCode(i); if(i == 8) keydata='backspace'; if(i == 9) keydata='tab'; if(i == 10) keydata='enter'; if(i == 13) keydata='enter'; if(i == 28) keydata='left arrow'; if(i == 29) keydata='right arrow'; if(i == 30) keydata='up arrow'; if(i == 31) keydata='down arrow'; if(i == 32) keydata='space'; if(i == 127) keydata='delete'; keys+=(keydata+' '); } } return keys; }
["pressed key", "r", 7, "pressedKeys"],
["pressed key", "r", 107, "pressedKeys"],
署名は、ディスカッションフォーラムの機能である。署名は、その人のすべての投稿の下部に追加される。署名は、BBCodeで記述できる。 署名を追加/変更/削除したい場合は、ディスカッションフォーラムのホームの一番下に行き、「Change your signature」を押す。署名の大きさは150pxまでである。これには、改行、画像を含む。- Japanese Scratch-Wiki 「署名」
- apple502j
- Scratcher
1000+ posts
Scratch2.0をModする会
回転方法
Specs.as 138
MotionAndPenPrims.as 66
MotionAndPenPrims.as 230
( v) of ( v)の改良
SensingPrims.as 290(書き換え)
BlockMenus.as 53(書き換え)
Specs.as 138
["rotation style", "r", 1, "rotationStyle"],
primTable["rotationStyle"] = primRotationStyle;
private function primRotationStyle(b:Block):String { var s:ScratchSprite = interp.targetSprite(); return (s != null) ? s.rotationStyle: ''; }
( v) of ( v)の改良
SensingPrims.as 290(書き換え)
private function primGetAttribute(b:Block):* { var attribute:String = interp.arg(b, 0); var obj:ScratchObj = app.stagePane.objNamed(String(interp.arg(b, 1))); if (!(obj is ScratchObj)) return 0; if (obj is ScratchSprite) { var s:ScratchSprite = ScratchSprite(obj); if ('x position' == attribute) return s.scratchX; if ('y position' == attribute) return s.scratchY; if ('direction' == attribute) return s.direction; if ('costume #' == attribute) return s.costumeNumber(); if ('costume name' == attribute) return s.currentCostume().costumeName; if ('size' == attribute) return s.getSize(); if ('volume' == attribute) return s.volume; if ('rotation style' == attribute) return s.rotationStyle; if ('pen width' == attribute) return s.penWidth; if ('pen shade' == attribute) return s.penShade; if ('pen color' == attribute) return s.penHue; if ('instrument' == attribute) return s.instrument+1; } if (obj is ScratchStage) { if ('background #' == attribute) return obj.costumeNumber(); // support for old 1.4 blocks if ('backdrop #' == attribute) return obj.costumeNumber(); if ('backdrop name' == attribute) return obj.currentCostume().costumeName; if ('volume' == attribute) return obj.volume; if ('instrument' == attribute) return obj.instrument+1; } if (obj.ownsVar(attribute)) return obj.lookupVar(attribute).value; // variable return 0; }
private static const spriteAttributes:Array = ['x position', 'y position', 'direction', 'costume #', 'costume name', 'size', 'volume', 'pen color', 'pen width', 'pen shade', 'rotation style', 'instrument']; private static const stageAttributes:Array = ['backdrop #', 'backdrop name', 'volume', 'instrument'];
署名は、ディスカッションフォーラムの機能である。署名は、その人のすべての投稿の下部に追加される。署名は、BBCodeで記述できる。 署名を追加/変更/削除したい場合は、ディスカッションフォーラムのホームの一番下に行き、「Change your signature」を押す。署名の大きさは150pxまでである。これには、改行、画像を含む。- Japanese Scratch-Wiki 「署名」
- inoking
- Scratcher
1000+ posts
Scratch2.0をModする会
.swf はバイナリなのでテキストとしては開けません。 すみません… scratch.swfの文字コード教えてくれませんか…?
JIS,UTF-8,ISO,全部文字化けしてしまいました…
何をしようとされていますか?
Last edited by inoking (July 30, 2017 08:49:48)
これは署名と呼ばれるもので投稿本文とは関係ありません。
Scratch は「世界最大の子ども向けコーディングコミュニティーで、シンプルなビジュアルインターフェースを持ったコーディング言語」
つまり「子ども SNS」ではない
・「傾向」とは単に一定の基準で作品を並びかえただけのもので、ランキングでもなんでもない、ナンバーワンよりオンリーワンを目指してみては?
・「フォロー」とは他の Scratcher が何をしているかを簡単に確認するためのもので、「フォロワー」は「ファン」ではない
・「スタジオ」とは特定のテーマに沿って作品をまとめたり、共同制作したりするための場所
・「星」や「ハート」などを何かの見返りとすることは Scratch チームによって禁止されている
- MMGISS
- Scratcher
1000+ posts
Scratch2.0をModする会
押されたキー
SensingPrims.as 248private function primPressedKeys(b:Block):* { var i:int; var keydata:String; var keys:String = ""; if(app.runtime.shiftIsDown) keys+='shift '; for (i=0;i<128;i++) { if(app.runtime.keyIsDown[i]){ keydata=String.fromCharCode(i); if(i == 8) keydata='backspace'; if(i == 9) keydata='tab'; if(i == 10) keydata='enter'; if(i == 13) keydata='enter'; if(i == 28) keydata='left arrow'; if(i == 29) keydata='right arrow'; if(i == 30) keydata='up arrow'; if(i == 31) keydata='down arrow'; if(i == 32) keydata='space'; if(i == 127) keydata='delete'; keys+=(keydata+' '); } } return keys; }
private function primPressedKeys(b:Block):* { var i:int; var keydata:String; var keys:String = ''; if (app.runtime.shiftIsDown) keys += 'shift '; for ( i = 0 ; i < 128; i++ ){ if ( app.runtime.keyIsDown[i] ) { keydata = String.fromCharCode(i); if (i == 28) keydata = 'left arrow'; if (i == 29) keydata = 'right arrow'; if (i == 30) keydata = 'up arrow'; if (i == 31) keydata = 'down arrow'; if (i == 32) keydata = 'space'; keys += ( ( keys == '' ? '' : ', ') + keydata ); } } return keys; }
また一部返り値を見やすくするために変更しました。
- apple502j
- Scratcher
1000+ posts
Scratch2.0をModする会
こちらの環境ではわたしのソースコードの文字がすべて動作しました。押されたキー
SensingPrims.as 248private function primPressedKeys(b:Block):* { var i:int; var keydata:String; var keys:String = ""; if(app.runtime.shiftIsDown) keys+='shift '; for (i=0;i<128;i++) { if(app.runtime.keyIsDown[i]){ keydata=String.fromCharCode(i); if(i == 8) keydata='backspace'; if(i == 9) keydata='tab'; if(i == 10) keydata='enter'; if(i == 13) keydata='enter'; if(i == 28) keydata='left arrow'; if(i == 29) keydata='right arrow'; if(i == 30) keydata='up arrow'; if(i == 31) keydata='down arrow'; if(i == 32) keydata='space'; if(i == 127) keydata='delete'; keys+=(keydata+' '); } } return keys; }現在対応している文字以外は抜いてみました。private function primPressedKeys(b:Block):* { var i:int; var keydata:String; var keys:String = ''; if (app.runtime.shiftIsDown) keys += 'shift '; for ( i = 0 ; i < 128; i++ ){ if ( app.runtime.keyIsDown[i] ) { keydata = String.fromCharCode(i); if (i == 28) keydata = 'left arrow'; if (i == 29) keydata = 'right arrow'; if (i == 30) keydata = 'up arrow'; if (i == 31) keydata = 'down arrow'; if (i == 32) keydata = 'space'; keys += ( ( keys == '' ? '' : ', ') + keydata ); } } return keys; }
また一部返り値を見やすくするために変更しました。
署名は、ディスカッションフォーラムの機能である。署名は、その人のすべての投稿の下部に追加される。署名は、BBCodeで記述できる。 署名を追加/変更/削除したい場合は、ディスカッションフォーラムのホームの一番下に行き、「Change your signature」を押す。署名の大きさは150pxまでである。これには、改行、画像を含む。- Japanese Scratch-Wiki 「署名」
- apple502j
- Scratcher
1000+ posts
Scratch2.0をModする会
「ドラッグのON/OFF」機能
・https://scratch.mit.edu/discuss/post/2750665/ BlockMenus.asのコードを追加
Specs.as 139
MotionAndPenPrims.as 68
MotionAndPenPrims.as 210
・https://scratch.mit.edu/discuss/post/2750665/ BlockMenus.asのコードを追加
Specs.as 139
["--"], ["draggable", "b", 1, "draggable"], ["set drag to %m.onOff", " ", 1, "setDragTo:", 'off'],
primTable["draggable"] = primDraggable; primTable["setDragTo:"] = primSetDrag;
private function primSetDrag(b:Block):void { var s:ScratchSprite = interp.targetSprite(); if (s != null) s.isDraggable=(interp.arg(b, 0)=='on'); } private function primDraggable(b:Block):Boolean { var s:ScratchSprite = interp.targetSprite(); return s?s.isDraggable:false; }
Last edited by apple502j (July 30, 2017 23:36:35)
署名は、ディスカッションフォーラムの機能である。署名は、その人のすべての投稿の下部に追加される。署名は、BBCodeで記述できる。 署名を追加/変更/削除したい場合は、ディスカッションフォーラムのホームの一番下に行き、「Change your signature」を押す。署名の大きさは150pxまでである。これには、改行、画像を含む。- Japanese Scratch-Wiki 「署名」
- apple502j
- Scratcher
1000+ posts
Scratch2.0をModする会
画像効果を取得する
FilterPack.as 95
LooksPrims.as 63
LooksPrims.as 212
Specs.as 159
Specs.as 180
FilterPack.as 95
public function getFilter(filterName:String):Number { return filterDict[filterName]; }
primTable['getEffect:'] = primGetEffect;
private function primGetEffect(b:Block):Number { var s:ScratchObj = interp.targetObj(); if (s == null) return 0; return s.filterPack.getFilter(interp.arg(b,0)); }
["effect of %m.effect", "r", 2, "getEffect:", "color"],
["effect of %m.effect", "r", 102, "getEffect:", "color"],
署名は、ディスカッションフォーラムの機能である。署名は、その人のすべての投稿の下部に追加される。署名は、BBCodeで記述できる。 署名を追加/変更/削除したい場合は、ディスカッションフォーラムのホームの一番下に行き、「Change your signature」を押す。署名の大きさは150pxまでである。これには、改行、画像を含む。- Japanese Scratch-Wiki 「署名」
- suraimutatu
- Scratcher
1000+ posts
Scratch2.0をModする会
素数判定作ってみました!
Primitives.as 45
Primitives.as 73
Specs.as 344
初めて作ったのでもっと簡単にできるかもしれません…
Primitives.as 45
public function Prime_num(judge_num:int) {
var prime:int = 0;
for(var i:int = 2; i < judge_num; i++) {
if ( judge_num % i == 0) {
prime = 1;
}
}
if (prime == 0) {
return true;
} else {
return false;
} };
primTable["prime"] = function(b:*):* { return Prime_num(interp.numarg(b, 0))};
["prime %n ?", "b", 8, "prime", 19],
Last edited by suraimutatu (July 30, 2017 23:09:57)
- apple502j
- Scratcher
1000+ posts
Scratch2.0をModする会
初期値つき「聞いて待つ」
AskPrompter.as 37(書き換え)
AskPrompter.as 97(書き換え)
ScratchRuntime.as 897(書き換え)
SensingPrims.as 203(書き換え)
Specs.as 288 (書き換え)
Specs.as 314(書き換え)
AskPrompter.as 37(書き換え)
public function AskPrompter(promptString:String, defaultString:String, app:Scratch) { this.app = app; var w:int = 449; var h:int = (promptString == "") ? 34 : 51; addBackground(w, h); addDoneButton(w, h); addPrompt(promptString); addInputField(h,defaultString); x = 10; y = 340 - height; addEventListener(MouseEvent.MOUSE_DOWN, mouseDown); addEventListener(KeyboardEvent.KEY_DOWN, keyDown); }
private function addInputField(h:int,def:String):void { input = new TextField(); input.defaultTextFormat = new TextFormat(CSS.font, fontSize, 0, false); input.type = TextFieldType.INPUT; input.background = true; input.backgroundColor = inputFieldColor; input.width = 410; input.height = 20; input.text = def; var f:BevelFilter = new BevelFilter(); f.angle = 225; f.shadowAlpha = 0.6; f.distance = 3; f.strength = 0.4; f.blurX = f.blurY = 0; f.type = BitmapFilterType.OUTER; input.filters = [f]; input.x = 9; input.y = h - (input.height + 5); addChild(input); }
public function showAskPrompt(question:String = '',defaultString:String = ''):void { var p:AskPrompter = new AskPrompter(question, defaultString, app); interp.askThread = interp.activeThread; p.x = 15; p.y = ScratchObj.STAGEH - p.height - 5; app.stagePane.addChild(p); setTimeout(p.grabKeyboardFocus, 100); // workaround for Window keyboard event handling }
private function primAsk(b:Block):void { if (app.runtime.askPromptShowing()) { // wait if (1) some other sprite is asking (2) this question is answered (when firstTime is false) interp.doYield(); return; } var obj:ScratchObj = interp.targetObj(); if (interp.activeThread.firstTime) { var question:String = interp.arg(b, 0); if ((obj is ScratchSprite) && (obj.visible)) { ScratchSprite(obj).showBubble(question, 'talk', obj, true); app.runtime.showAskPrompt('',interp.arg(b,1)); } else { app.runtime.showAskPrompt(question,interp.arg(b,1)); } interp.activeThread.firstTime = false; interp.doYield(); } else { if ((obj is ScratchSprite) && (obj.visible)) ScratchSprite(obj).hideBubble(); interp.activeThread.firstTime = true; } }
["ask %s and wait default %s", " ", 7, "doAsk", "What's your name?", ""],
["ask %s and wait default %s", " ", 107, "doAsk", "What's your name?", ""],
Last edited by apple502j (July 30, 2017 23:26:01)
署名は、ディスカッションフォーラムの機能である。署名は、その人のすべての投稿の下部に追加される。署名は、BBCodeで記述できる。 署名を追加/変更/削除したい場合は、ディスカッションフォーラムのホームの一番下に行き、「Change your signature」を押す。署名の大きさは150pxまでである。これには、改行、画像を含む。- Japanese Scratch-Wiki 「署名」
- apple502j
- Scratcher
1000+ posts
Scratch2.0をModする会
各種定数
Specs.as 367
Primitives.as 75
Specs.as 367
["-"], ["True", "b", 8, "constTrue"], ["pi", "r", 8, "constPI"], ["CR", "r", 8, "constCR"], ["LF", "r", 8, "constLF"], ["Tab", "r", 8, "constTab"],
primTable["constTrue"] = function(b:*):*{return true;} primTable["constPI"] = function(b:*):*{return Math.PI;} primTable["constCR"] = function(b:*):*{return String.fromCharCode(10);} primTable["constLF"] = function(b:*):*{return String.fromCharCode(13);} primTable["constTab"] = function(b:*):*{return String.fromCharCode(9);}
署名は、ディスカッションフォーラムの機能である。署名は、その人のすべての投稿の下部に追加される。署名は、BBCodeで記述できる。 署名を追加/変更/削除したい場合は、ディスカッションフォーラムのホームの一番下に行き、「Change your signature」を押す。署名の大きさは150pxまでである。これには、改行、画像を含む。- Japanese Scratch-Wiki 「署名」
- apple502j
- Scratcher
1000+ posts
Scratch2.0をModする会
ついに!日本語入力 in ペイントエディター
フォントはHigashiOmeを使いました。
v1.3iとライセンスをDLします。フォントはsrc/assets/fonts/に、ライセンスは英語版を「HigashiOme_LICENSE」などと改名して同フォルダにおきます。
ちなみにこのフォントの選定理由は、ライセンスがGPLと相性が良いからです。
ソースは2箇所変更です。
Resources.as 77
DrawPropertyUI.as 349
注意:1フォントにつき3-4MB Scratch.swfが重くなります
フォントはHigashiOmeを使いました。
v1.3iとライセンスをDLします。フォントはsrc/assets/fonts/に、ライセンスは英語版を「HigashiOme_LICENSE」などと改名して同フォルダにおきます。
ちなみにこのフォントの選定理由は、ライセンスがGPLと相性が良いからです。
ソースは2箇所変更です。
Resources.as 77
[Embed(source='fonts/HigashiOme-Gothic.ttf', fontName='HigashiOme', embedAsCFF='false',advancedAntiAliasing='true')] private static const Font7:Class;
m.addItem('HigashiOme');
注意:1フォントにつき3-4MB Scratch.swfが重くなります
Last edited by apple502j (July 31, 2017 10:19:37)
署名は、ディスカッションフォーラムの機能である。署名は、その人のすべての投稿の下部に追加される。署名は、BBCodeで記述できる。 署名を追加/変更/削除したい場合は、ディスカッションフォーラムのホームの一番下に行き、「Change your signature」を押す。署名の大きさは150pxまでである。これには、改行、画像を含む。- Japanese Scratch-Wiki 「署名」