Вверх ↑
Тех. редактор
Ответов: 1010
#1: 2019-09-23 05:37:25 ЛС | профиль | цитата
Решил что более информативно будет создать тему в документации, для большей наглядности, нежели маленький пост в другой теме






Описание

Чтобы вывести текст в проекторе нужно взять блокнот с текстом программы на JavaScript, вставить его в приз и уже сам приз вставить в проектор. Вставка приза в проектом без блокнота отображает текст по умолчанию (MCGL 9).

Описание API

В скрипте должно быть две функции:


function init() {

// код инициализации
}

function update(counter) {
// перерисовка текста, если используется динамика
// counter - бесконечный счетчик (сейчас прибавляется на 1 каждый вызов, но будет равно текущему времени в миллисекундах)
}



Вся работа с выводом текста происходит через объект display. Он содержит следующие методы:

Должны вызываться единожны

size(width, height) - опредяет размер виртуального экрана, могут принимать значения от 1 до 3 блоков
depth(value) - позиция по z координате от 0 до 16 (нужно выставлять, если перед проектором стоят блоки)

Вызываются в люое время

clear() - очистка всего вывода
print(text) - печать текста с текущим цветом, масштабом и координатами, смещает текущую координату курсора X на длину текста
cursor(x, y) - передвинуть текущие координаты курсора (0-15 - текущий блок, 16-31 следующий и т.д.)
offset(x, y) - тоже самое что и cursor только добавляет к уже установленной позиции курсора новые значения
color(value) - цвет текста
log(text) - вывод текста в консоль (использовать для отладки)



Пример программы со скриншота:


var sym = ["\\", "|", "/", "-"];

function init() {
display.size(3, 1);
display.depth(16);
}

function update(counter) {
display.clear();
display.scale(1);
display.cursor(1,1);
display.color(0xff);
display.print("Static text");
display.print(sym[parseInt(counter/10) % 4]);
display.cursor(1, 4);
display.scale(4 + Math.sin(counter/50));
display.color(0);
display.print("Big text");
}

Дополнение к API

Теперь метод display.print() возвращает объект, свойства которого можно менять без перерисовки всего экрана. Пример:


var text;


function init() {
text = display.print("text");
}

function update(counter) {
text.text = "C: " + counter;
}

Доступны следующие поля:
cursorX - координата X на экране
cursorY - координата Y на экране
scale - масштаб
color - цвет
text - текст надписи

Дополнение методов объекта display:

font(type) - тип шрифта от 0 до 3 (большой, маленький, нормальный и терминал)
icon(slot) - отображает иконку предмета из слота с индексом slot из контейнера, который стоит над проектором (работать будет только с контейнерами, чье содержимое грузится на клиент, например, проектор)

Новый объект key:

press(code) - возвращает true, если нажата клавиша с кодом code и false в противном случае

Список кодов клавиш

public static final int KEY_ESCAPE = 1;
public static final int KEY_1 = 2;
public static final int KEY_2 = 3;
public static final int KEY_3 = 4;
public static final int KEY_4 = 5;
public static final int KEY_5 = 6;
public static final int KEY_6 = 7;
public static final int KEY_7 = 8;
public static final int KEY_8 = 9;
public static final int KEY_9 = 10;
public static final int KEY_0 = 11;
public static final int KEY_MINUS = 12;
public static final int KEY_EQUALS = 13;
public static final int KEY_BACK = 14;
public static final int KEY_TAB = 15;
public static final int KEY_Q = 16;
public static final int KEY_W = 17;
public static final int KEY_E = 18;
public static final int KEY_R = 19;
public static final int KEY_T = 20;
public static final int KEY_Y = 21;
public static final int KEY_U = 22;
public static final int KEY_I = 23;
public static final int KEY_O = 24;
public static final int KEY_P = 25;
public static final int KEY_LBRACKET = 26;
public static final int KEY_RBRACKET = 27;
public static final int KEY_RETURN = 28;
public static final int KEY_LCONTROL = 29;
public static final int KEY_A = 30;
public static final int KEY_S = 31;
public static final int KEY_D = 32;
public static final int KEY_F = 33;
public static final int KEY_G = 34;
public static final int KEY_H = 35;
public static final int KEY_J = 36;
public static final int KEY_K = 37;
public static final int KEY_L = 38;
public static final int KEY_SEMICOLON = 39;
public static final int KEY_APOSTROPHE = 40;
public static final int KEY_GRAVE = 41;
public static final int KEY_LSHIFT = 42;
public static final int KEY_BACKSLASH = 43;
public static final int KEY_Z = 44;
public static final int KEY_X = 45;
public static final int KEY_C = 46;
public static final int KEY_V = 47;
public static final int KEY_B = 48;
public static final int KEY_N = 49;
public static final int KEY_M = 50;
public static final int KEY_COMMA = 51;
public static final int KEY_PERIOD = 52;
public static final int KEY_SLASH = 53;
public static final int KEY_RSHIFT = 54;
public static final int KEY_MULTIPLY = 55;
public static final int KEY_LMENU = 56;
public static final int KEY_SPACE = 57;
public static final int KEY_CAPITAL = 58;
public static final int KEY_F1 = 59;
public static final int KEY_F2 = 60;
public static final int KEY_F3 = 61;
public static final int KEY_F4 = 62;
public static final int KEY_F5 = 63;
public static final int KEY_F6 = 64;
public static final int KEY_F7 = 65;
public static final int KEY_F8 = 66;
public static final int KEY_F9 = 67;
public static final int KEY_F10 = 68;
public static final int KEY_NUMLOCK = 69;
public static final int KEY_SCROLL = 70;
public static final int KEY_NUMPAD7 = 71;
public static final int KEY_NUMPAD8 = 72;
public static final int KEY_NUMPAD9 = 73;
public static final int KEY_SUBTRACT = 74;
public static final int KEY_NUMPAD4 = 75;
public static final int KEY_NUMPAD5 = 76;
public static final int KEY_NUMPAD6 = 77;
public static final int KEY_ADD = 78;
public static final int KEY_NUMPAD1 = 79;
public static final int KEY_NUMPAD2 = 80;
public static final int KEY_NUMPAD3 = 81;
public static final int KEY_NUMPAD0 = 82;
public static final int KEY_DECIMAL = 83;
public static final int KEY_F11 = 87;
public static final int KEY_F12 = 88;
public static final int KEY_F13 = 100;
public static final int KEY_F14 = 101;
public static final int KEY_F15 = 102;
public static final int KEY_F16 = 103;
public static final int KEY_F17 = 104;
public static final int KEY_F18 = 105;
public static final int KEY_KANA = 112;
public static final int KEY_F19 = 113;
public static final int KEY_CONVERT = 121;
public static final int KEY_NOCONVERT = 123;
public static final int KEY_YEN = 125;
public static final int KEY_NUMPADEQUALS = 141;
public static final int KEY_CIRCUMFLEX = 144;
public static final int KEY_AT = 145;
public static final int KEY_COLON = 146;
public static final int KEY_UNDERLINE = 147;
public static final int KEY_KANJI = 148;
public static final int KEY_STOP = 149;
public static final int KEY_AX = 150;
public static final int KEY_UNLABELED = 151;
public static final int KEY_NUMPADENTER = 156;
public static final int KEY_RCONTROL = 157;
public static final int KEY_SECTION = 167;
public static final int KEY_NUMPADCOMMA = 179;
public static final int KEY_DIVIDE = 181;
public static final int KEY_SYSRQ = 183;
public static final int KEY_RMENU = 184;
public static final int KEY_FUNCTION = 196;
public static final int KEY_PAUSE = 197;
public static final int KEY_HOME = 199;
public static final int KEY_UP = 200;
public static final int KEY_PRIOR = 201;
public static final int KEY_LEFT = 203;
public static final int KEY_RIGHT = 205;
public static final int KEY_END = 207;
public static final int KEY_DOWN = 208;
public static final int KEY_NEXT = 209;
public static final int KEY_INSERT = 210;
public static final int KEY_DELETE = 211;
public static final int KEY_CLEAR = 218;
public static final int KEY_LMETA = 219;


Исходный код змейки

var iam = [];
var dir = 0;
var kx = [1,0,-1,0];
var ky = [0,1,0,-1];
var lifeCounter = 0;
var apple;

function genApple() {
apple.cursorX = Math.round(Math.random() * 15);
apple.cursorY = Math.round(Math.random() * 15);
}

function createApple() {
display.color(0xff);
apple = display.print("@");
genApple();
}

function createPlayer() {
display.color(0);
display.cursor(8, 8);
iam = [display.print("*")];
}

function eat() {
sound.play("mob.pig");
display.color(0);
display.cursor(apple.cursorX, apple.cursorY);
iam.push(display.print("*"));
genApple();
}

function init() {
createPlayer();
createApple();
}

function isEqual(o1, o2) {
return o1.cursorX == o2.cursorX && o1.cursorY == o2.cursorY;
}

function selfCross() {
for(var i = 1; i ‹ iam.length; i++) {
if(isEqual(iam[0], iam[i])) {
return true;
}
}
return false;
}

function update(time) {
lifeCounter++;
if(lifeCounter == 10) {
lifeCounter = 0;
for(var i = iam.length-1; i › 0; i--) {
iam[i].cursorX = iam[i-1].cursorX;
iam[i].cursorY = iam[i-1].cursorY;
}
iam[0].cursorX += kx[dir];
iam[0].cursorY += ky[dir];
if(iam[0].cursorX ‹ 0) iam[0].cursorX += 16;
if(iam[0].cursorY ‹ 0) iam[0].cursorY += 16;
if(iam[0].cursorX › 15) iam[0].cursorX -= 16;
if(iam[0].cursorY › 15) iam[0].cursorY -= 16;

if(selfCross()) {
sound.play("random.explode");
display.clear();
createPlayer();
createApple();
}
else if(isEqual(iam[0], apple))
eat();
}

if(key.press(200)) dir = 3;
else if(key.press(208)) dir = 1;
else if(key.press(203)) dir = 2;
else if(key.press(205)) dir = 0;
}
карма: 59
Игрок состоит в :Profi's Club| Focus Group
9
Голосовали:OTBETCTBEHHblN, Madara, Monorxizm, Kiler_mcgl, VeTeR_aN4712, Ghost, sabotajnik7, XBocT, StePler48, Dustiness, moder