Discuss Scratch
- Discussion Forums
- » Pусский
- » [Обучение: Скретч] Создание модификации Скретч
- Dmith
-
1000+ posts
[Обучение: Скретч] Создание модификации Скретч
ВНИМАНИЕ!!! НЕ ПРЕДНАЗНАЧЕНО ДЛЯ НОВИЧКОВ!!!
Создание модификации Скретч 2.0
С помощью этого руководства вы сможете понять, как создать модификацию Скретч 2.0. Если что-то не понятно, то обращайтесь по-английски сюда (англ.) или в тему «Помощь новичку».Создание модификации Скретч 2.0
Как вы все знаете, Скретч 2.0 был создан на ActionScript (англ.), который в свою очередь был создан из ECMAScript (англ.) (но это так, к слову, чтобы вы знали).
Установка необходимых программ
WindowsУстановка Apache Ant: просто следуй указанным инструкциям (англ.)
Установка Flex SDK: установи Flex SDK (англ.). При установке запомни место, куда установилась программа (обычно это C:\Program Files\Apache Flex).
Подгрузка дополнений: загрузи playerglobal10_2.swc и playerglobal11_4.swc. Первый файл нужно переместить в <путь до Flex SDK>\frameworks\libs\player\10.2, а второй сюда: <путь до Flex SDK>\frameworks\libs\player\11.2.Mac OS XУстановка ApacheAnt может быть проведена с помощью Homebrew или MacPorts.Homebrew:Установи программу:Установи Ant с помощью командной строки:
- Установи Xcode с помощью командной строки
- Установи Homebrew с помощью командной строки:
ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"
brew install antMacPorts:Установи программу MacPorts:Установи Ant с помощью командной строки (нужен пароль администратора):
- Установи Xcode с помощью командной строки
- Установи MacPorts, выбрав свою версию OS X: https://www.macports.org/install.php#pkg
Установка Flex SDK: установи Flex SDK (англ.). При установке запомни место, куда установилась программа.sudo port install apache-ant
Подгрузка дополнений: загрузи playerglobal10_2.swc и playerglobal11_4.swc. Первый файл нужно переместить в <путь до Flex SDK>\frameworks\libs\player\10.2, а второй сюда: <путь до Flex SDK>\frameworks\libs\player\11.2.
Загрузка исходников Скретч
Теперь нужно загрузить исходники:Ура! Ты уже сделал мод!
- Загрузи исходники с GitHub и разархивируй их куда-нибудь
- Создай новый текстовый документ и напиши туда
Внимание! В пути не должно быть обратных слешей (\) они все должны быть заменены на обычные слеши (/)FLEX_HOME=<путь до Flex SDK>- Сохрани файл в папку, куда ты разархивировал Скретч с названием local.properties
КомпилированиеПосле всех сделанных изменений в коде ты можешь запустить компиляцию:
- Открой терминал
- Измени текущую директорию на путь до исходников Скретч
- Запусти команду
для старта компиляции. Когда всё будет закончено, скомпилированный мод появится в папке bin. Если у тебя возникли ошибки, пиши по-английски сюда (англ.) или в тему «Помощь новичку».ant
Добавление блоков
Спецификация
Все блоки описаны в файле Specs.as, который лежит в папке src, в массивах, названных командами. Каждое описание блока является массивом, в форматеНазвания блоков["block name", "block type", block category, "block primitive name", default arguments...]
Имена блоков содержат текст, ввод и иконку блока. Ввод (или аргументы) описаны в формате %<буква>.<опциональный тип меню>. например, %n создаёт ввод цифры, а %m.direction создаёт меню направления.
Иконки описываются в формате @<название иконки>. Например, @greenFlag создаёт иконку зелёного флага, а @stop создаёт иконку кнопки стоп. Ты можешь найти полный список типов аргументов, меню и иконок здесь.
Форма блоков
Форма блоков бывает разнаяКатегории блоков
- “ ” - обычный блок
- “w” - обычный блок с добавкой и ждать, например,
спросить [] и ждать- “b” - логический блок
- “r” - репортёр
- “R” - requester, a reporter that requests data and waits until it's been received
- “h” - блок-шапка
- “c” - обвивающий блок
- “cf” - закрывающийся обвивающийся блок, похожий на
всегда- “e” - двойной обвивающийся блок, похожий на
если <>
иначе
end- “f” - закрывающий блок, похожий на
остановить скрипт- “o” - блок, похожий на обычный блок определённого блока
- “p” - блок, похожий на
определить
Блоки должны относиться к определённой категории:Для блоков, принадлежащих только к сцене к номеру категории нужно прибавить 100.
- 0 - неопределён
- 1 - движение
- 2 - внешность
- 3 - звук
- 4 - перо
- 5 - события
- 6 - контроль
- 7 - сенсоры
- 8 - операторы
- 9 - переменные
- 10 - больше блоков
- 11 - параметр (внутри блока)
- 12 - листы
- 20 - расширения
Примитивные имена блоков
Примитивное имя объясняет, что делает блок. Я покажу как их делать позже. Если примитивный блок не обозначен, то он окрашивается в серый и с ним ничего нельзя сделать.
Стандартные аргументы
Стандартные примитивы описаны здесь. Например,сделает "say for ( ) secs" со стандартными аргументами “Привет” и 2.["say %s for %n secs", " ", 2, "say:duration:elapsed:from:" "Привет", 2]
Добавление примитивов
Примитивы лежат в папке primitives и определены по категориям. Список примитивов определён в ListPrims.as, примитивы внешности определены здесь: LooksPrims.as, примитивы движения и рисования здесь: MotionAndPenPrims.as, примитивы сенсоров здесь: SensingPrims.as, примитивы звука здесь: SoundPrims.as, примитивы веб-камеры здесь: VideoMotionPrims.as, остальные примитивы здесь: Primitives.as.
Чтобы определить примитив, нужно добавить строчку в функцию addPrimsTo в классе Primitives в формате:В другой файл добавим функцию, определяющую примитив в форматеprimTable['<название примитива>'] = <название функции>;Давайте попробуем создать, например, блок “Привет, мир!”:private function <название функции>(b:Block):void { <код блока> }
В спецификацию внешности, в Specs.as, добавим строчкуВ функцию addPrimsTo в LooksPrims.as добавим["Привет мир!", " ", 2, "helloWorld"]В файл LooksPrims.as добавим функциюprimTable['helloWorld'] = helloWorld;Если всё получится, то спрайт будет говорить “Привет, мир!”.private function helloWorld(b:Block):void { var s:ScratchSprite = interp.targetSprite(); if (s == null) return; s.showBubble("Привет, мир!", "talk"); if (s.visible) interp.redraw(); }
Добавление категории
Давайте теперь создадим свою собственную первую категорию блоков. Назовём её, например, ПерКат.
Для того, чтобы создать категорию нужно добавить соответствующий массив в src/Specs.as. Этот массив передаёт Скретч информацию о цвете блока even if that color doesn't have its own button in the palette (such as Листы или Параметры). Каждый элемент массива должен иметь 3 части: номер категории, имя категории и её цвет по таблице. Например,Далее, добавим вход в массиве категории в PaletteSelector.as. Массив определяет название кнопки категории в палитре блоков сверху-вниз и слева-направо. Например,[13, "ПерКат", 0x0a6320],Также, нужно изменить константу numberOfRows в PaletteSelector.as. Константа передаёт общее количество строк для кнопок в палитре блоков. Её нужно поставить в 6, потому что мы добавим одну строчку.private static const categories:Array = [ 'Motion', 'Looks', 'Sound', 'Pen', 'Data', 'ПерКат', // колонка 1 'Events', 'Control', 'Sensing', 'Operators', 'More Blocks']; // колонка 2И, наконец, добавим блоки в категорию, изменив массив команд в src/Specs.as. Каждый блок имеет 4 параметра: спецификация (строчка, описывающая sequence of labels и аргументы блока), тип блока (“ ” для команд, “b” для логического, там сверху всё написано), номер категории (у меня, например, 13) и опкод (уникальное название блока). В категории у нас будет 2 блока:private function initCategories():void { const numberOfRows:int = 6;Когда ты скомпилируешь код, у тебя появится категория и два блока в ней. Однако, блоки будут серыми! Непорядок! А всё потому, что ты не определил блок. Он просто не зает, что он делает.["добавить радости", " ", 13, "добавитьРадости"], ["спрайт %s радостный?", "b", 13, "да"],
Для этого добавь определение в src/primitives. Например, я сделал определение в src/primitives/Primitives.as:primTable[" добавитьРадости"] = function(b:*):* { trace("Я не уверен, что так!") }; primTable["да"] = function(b:*):* { var x:* = interp.arg(b, 0); return (typeof x == 'string' ? x.length : x) == 42; };
Last edited by Dmith (Aug. 30, 2014 19:23:54)
- DenisO
-
100+ posts
[Обучение: Скретч] Создание модификации Скретч
Что это?
Last edited by DenisO (July 17, 2014 12:10:49)
- Mr-Angry-Fruit13
-
500+ posts
[Обучение: Скретч] Создание модификации Скретч
Что это?
Это старая тема.
- DenisO
-
100+ posts
[Обучение: Скретч] Создание модификации Скретч
Эото страная тем**рим***аст***арррррар*****уст****здр****и** щом**параляк*****аря-лалалалалалалала)))(((*апем674896рмицймдхщауи2огаэ2мьщз2п4н76н9ещаъцыхлф***********************************************************************************************РАОММА*************…Что это?
Это старая тема.
- DenisO
-
100+ posts
[Обучение: Скретч] Создание модификации Скретч
Это странная тема. Чего-чего?
Last edited by DenisO (July 17, 2014 17:02:28)
- RGBD
-
18 posts
[Обучение: Скретч] Создание модификации Скретч
Всем привет, мой первый пост на русском. Я тут пытаюсь фичи допиливать на github.com. Может кто подскажет способ импортировать проект хоть в какую-то IDE? Блокнот - это, конечно, круто, но баги ловить я уже устал)
- Grustno
-
100+ posts
[Обучение: Скретч] Создание модификации Скретч
А что за IDE, если не против рассказать))
- RGBD
-
18 posts
[Обучение: Скретч] Создание модификации Скретч
Виноват. (facepalm)
Не скретч проект (.sb2), а ActionScript. Я ищу Flash/Flex IDE, чтобы было проще разрабатывать сам скретч, а не проекты в нем. Может кто подскажет способ импортировать проект хоть в какую-то IDE?
- Grustno
-
100+ posts
[Обучение: Скретч] Создание модификации Скретч
Здорово)) А я просто ищу книги по Lua)
- Dmith
-
1000+ posts
[Обучение: Скретч] Создание модификации Скретч
FlashDevelop Виноват. (facepalm)Не скретч проект (.sb2), а ActionScript. Я ищу Flash/Flex IDE, чтобы было проще разрабатывать сам скретч, а не проекты в нем. Может кто подскажет способ импортировать проект хоть в какую-то IDE?
- Dmith
-
1000+ posts
[Обучение: Скретч] Создание модификации Скретч
временно закрываю до появления новых обучающих материалов. RGBD: иди в тему "Помощь новичку"
- Discussion Forums
- » Pусский
-
» [Обучение: Скретч] Создание модификации Скретч