Discuss Scratch

Dmith
Scratcher
1000+ posts

[Обучение: Скретч] Создание модификации Скретч

ВНИМАНИЕ!!! НЕ ПРЕДНАЗНАЧЕНО ДЛЯ НОВИЧКОВ!!!
Создание модификации Скретч 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:
Установи программу:
  1. Установи Xcode с помощью командной строки
  2. Установи Homebrew с помощью командной строки:
    ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"
    
Установи Ant с помощью командной строки:
brew install ant
MacPorts:
Установи программу MacPorts:
  1. Установи Xcode с помощью командной строки
  2. Установи MacPorts, выбрав свою версию OS X: https://www.macports.org/install.php#pkg
Установи Ant с помощью командной строки (нужен пароль администратора):
sudo port install apache-ant
Установка Flex SDK: установи Flex SDK (англ.). При установке запомни место, куда установилась программа.
Подгрузка дополнений: загрузи playerglobal10_2.swc и playerglobal11_4.swc. Первый файл нужно переместить в <путь до Flex SDK>\frameworks\libs\player\10.2, а второй сюда: <путь до Flex SDK>\frameworks\libs\player\11.2.
Загрузка исходников Скретч
Теперь нужно загрузить исходники:
  1. Загрузи исходники с GitHub и разархивируй их куда-нибудь
  2. Создай новый текстовый документ и напиши туда
    FLEX_HOME=<путь до Flex SDK>
    Внимание! В пути не должно быть обратных слешей (\) они все должны быть заменены на обычные слеши (/)
  3. Сохрани файл в папку, куда ты разархивировал Скретч с названием local.properties
Ура! Ты уже сделал мод!
Компилирование
После всех сделанных изменений в коде ты можешь запустить компиляцию:
  1. Открой терминал
  2. Измени текущую директорию на путь до исходников Скретч
  3. Запусти команду
    ant
    
    для старта компиляции. Когда всё будет закончено, скомпилированный мод появится в папке bin. Если у тебя возникли ошибки, пиши по-английски сюда (англ.) или в тему «Помощь новичку».
Добавление блоков
Спецификация
Все блоки описаны в файле Specs.as, который лежит в папке src, в массивах, названных командами. Каждое описание блока является массивом, в формате
["block name", "block type", block category, "block primitive name", default arguments...]
Названия блоков
Имена блоков содержат текст, ввод и иконку блока. Ввод (или аргументы) описаны в формате %<буква>.<опциональный тип меню>. например, %n создаёт ввод цифры, а %m.direction создаёт меню направления.
Иконки описываются в формате @<название иконки>. Например, @greenFlag создаёт иконку зелёного флага, а @stop создаёт иконку кнопки стоп. Ты можешь найти полный список типов аргументов, меню и иконок здесь.
Форма блоков
Форма блоков бывает разная
  1. “ ” - обычный блок
  2. “w” - обычный блок с добавкой и ждать, например,
    спросить [] и ждать
  3. “b” - логический блок
  4. “r” - репортёр
  5. “R” - requester, a reporter that requests data and waits until it's been received
  6. “h” - блок-шапка
  7. “c” - обвивающий блок
  8. “cf” - закрывающийся обвивающийся блок, похожий на
    всегда
  9. “e” - двойной обвивающийся блок, похожий на
    если <>
    иначе
    end
  10. “f” - закрывающий блок, похожий на
    остановить скрипт
  11. “o” - блок, похожий на обычный блок определённого блока
  12. “p” - блок, похожий на
    определить
Категории блоков
Блоки должны относиться к определённой категории:
  • 0 - неопределён
  • 1 - движение
  • 2 - внешность
  • 3 - звук
  • 4 - перо
  • 5 - события
  • 6 - контроль
  • 7 - сенсоры
  • 8 - операторы
  • 9 - переменные
  • 10 - больше блоков
  • 11 - параметр (внутри блока)
  • 12 - листы
  • 20 - расширения
Для блоков, принадлежащих только к сцене к номеру категории нужно прибавить 100.
Примитивные имена блоков
Примитивное имя объясняет, что делает блок. Я покажу как их делать позже. Если примитивный блок не обозначен, то он окрашивается в серый и с ним ничего нельзя сделать.
Стандартные аргументы
Стандартные примитивы описаны здесь. Например,
["say %s for %n secs", " ", 2, "say:duration:elapsed:from:" "Привет", 2]
сделает "say for ( ) secs" со стандартными аргументами “Привет” и 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, добавим строчку
["Привет мир!", " ", 2, "helloWorld"]
В функцию addPrimsTo в LooksPrims.as добавим
primTable['helloWorld'] = helloWorld;
В файл LooksPrims.as добавим функцию
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 части: номер категории, имя категории и её цвет по таблице. Например,
[13, "ПерКат", 0x0a6320],
Далее, добавим вход в массиве категории в PaletteSelector.as. Массив определяет название кнопки категории в палитре блоков сверху-вниз и слева-направо. Например,
private static const categories:Array = [
    'Motion', 'Looks', 'Sound', 'Pen', 'Data', 'ПерКат', // колонка 1
    'Events', 'Control', 'Sensing', 'Operators', 'More Blocks']; // колонка 2
Также, нужно изменить константу numberOfRows в PaletteSelector.as. Константа передаёт общее количество строк для кнопок в палитре блоков. Её нужно поставить в 6, потому что мы добавим одну строчку.
private function initCategories():void {
    const numberOfRows:int = 6;
И, наконец, добавим блоки в категорию, изменив массив команд в src/Specs.as. Каждый блок имеет 4 параметра: спецификация (строчка, описывающая sequence of labels и аргументы блока), тип блока (“ ” для команд, “b” для логического, там сверху всё написано), номер категории (у меня, например, 13) и опкод (уникальное название блока). В категории у нас будет 2 блока:
["добавить радости", " ", 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)

Morni
Scratcher
1000+ posts

[Обучение: Скретч] Создание модификации Скретч

Для открытого кода?

“ Я не уйду не попрощавшись…!”
Dmith
Scratcher
1000+ posts

[Обучение: Скретч] Создание модификации Скретч

Ну что ж дерзайте!
Morni
Scratcher
1000+ posts

[Обучение: Скретч] Создание модификации Скретч

Ок) Попробуем)

“ Я не уйду не попрощавшись…!”
Dmith
Scratcher
1000+ posts

[Обучение: Скретч] Создание модификации Скретч

Добавил блоки
DenisO
Scratcher
100+ posts

[Обучение: Скретч] Создание модификации Скретч

Что это?

Last edited by DenisO (July 17, 2014 12:10:49)


Mr-Angry-Fruit13
Scratcher
500+ posts

[Обучение: Скретч] Создание модификации Скретч

DenisO wrote:

Что это?

Это старая тема.

Жми на картинку! Жми на картинку, я сказал!
DenisO
Scratcher
100+ posts

[Обучение: Скретч] Создание модификации Скретч

Mr-Angry-Fruit13 wrote:

DenisO wrote:

Что это?

Это старая тема.
Эото страная тем**рим***аст***арррррар*****уст****здр****и** щом**параляк*****аря-лалалалалалалала)))(((*апем674896рмицймдхщауи2огаэ2мьщз2п4н76н9ещаъцыхлф***********************************************************************************************РАОММА*************…

Grustno
Scratcher
100+ posts

[Обучение: Скретч] Создание модификации Скретч

Чего-чего?

Всем привет, с вами на связи Данил) Или Морни, или ГРУСТНО! XD
Я обычно сам не делаю проекты, но люблю очень помогать другим, или реализовывать чужие идеи)
Есть два проекта, которые я попробую сделать:
CTD - Новый ГОД!
Космические рейнджеры: Тени прошлого
DenisO
Scratcher
100+ posts

[Обучение: Скретч] Создание модификации Скретч

Grustno wrote:

Чего-чего?
Это странная тема.

Last edited by DenisO (July 17, 2014 17:02:28)


RGBD
New to Scratch
18 posts

[Обучение: Скретч] Создание модификации Скретч

Всем привет, мой первый пост на русском. Я тут пытаюсь фичи допиливать на github.com. Может кто подскажет способ импортировать проект хоть в какую-то IDE? Блокнот - это, конечно, круто, но баги ловить я уже устал)
Grustno
Scratcher
100+ posts

[Обучение: Скретч] Создание модификации Скретч

А что за IDE, если не против рассказать))

Всем привет, с вами на связи Данил) Или Морни, или ГРУСТНО! XD
Я обычно сам не делаю проекты, но люблю очень помогать другим, или реализовывать чужие идеи)
Есть два проекта, которые я попробую сделать:
CTD - Новый ГОД!
Космические рейнджеры: Тени прошлого
RGBD
New to Scratch
18 posts

[Обучение: Скретч] Создание модификации Скретч

Виноват. (facepalm)

RGBD wrote:

Может кто подскажет способ импортировать проект хоть в какую-то IDE?
Не скретч проект (.sb2), а ActionScript. Я ищу Flash/Flex IDE, чтобы было проще разрабатывать сам скретч, а не проекты в нем.
Grustno
Scratcher
100+ posts

[Обучение: Скретч] Создание модификации Скретч

Здорово)) А я просто ищу книги по Lua)

Всем привет, с вами на связи Данил) Или Морни, или ГРУСТНО! XD
Я обычно сам не делаю проекты, но люблю очень помогать другим, или реализовывать чужие идеи)
Есть два проекта, которые я попробую сделать:
CTD - Новый ГОД!
Космические рейнджеры: Тени прошлого
Dmith
Scratcher
1000+ posts

[Обучение: Скретч] Создание модификации Скретч

RGBD wrote:

Виноват. (facepalm)

RGBD wrote:

Может кто подскажет способ импортировать проект хоть в какую-то IDE?
Не скретч проект (.sb2), а ActionScript. Я ищу Flash/Flex IDE, чтобы было проще разрабатывать сам скретч, а не проекты в нем.
FlashDevelop
Dmith
Scratcher
1000+ posts

[Обучение: Скретч] Создание модификации Скретч

ну так что? кроме @RGBD никто не пытается сделать подобное?
Dmith
Scratcher
1000+ posts

[Обучение: Скретч] Создание модификации Скретч

временно закрываю до появления новых обучающих материалов. RGBD: иди в тему "Помощь новичку"

Powered by DjangoBB