Перейти к содержимому

Zer0Galaxy

Гуру
  • Публикации

    1 220
  • Зарегистрирован

  • Посещение

  • Победитель дней

    189

Все публикации пользователя Zer0Galaxy

  1. Я бы не использовал event.listen, а использовал event.pull. По событию "key_down" платформа начинает движение, а по "key_up" останавливается. Не нужно два десятка раз жмакать на клавишу да и с ignore не будет проблем. Собственно перемещение платформы осуществлять по таймеру. Можно через os.sleep, но тогда нужно использовать многопоточность, что бы движение одной платформы не влияло на другую.
  2. Ну, если говорить строго, данные на экране обновляются не в цикле, а с периодом. Именно для этого и предназначен компонент-таймер (см. пример с computer.energy). Применение таких таймеров реализует своего рода многопоточность ибо работа таймера никак не должна влиять на работу остального кода. К стати, не рекомендую использовать многопоточность на основе thread совместно с forms. Они могут передраться.
  3. Вот пример работы того, о чем я говорил forms=require("forms") --подключаем либу Form1=forms.addForm() --создаем форму Label1=Form1:addLabel(2,2,"0") -- создаем метку local Lmax=0 -- тут будем хранить крайнее значение метки function onTime() if Label1.caption>=Lmax then Timer1:stop() return end -- если достигли конца, тормозим таймер Label1.caption=Label1.caption+1 -- иначе, увеличиваем метку Label1:redraw() end Timer1=Form1:addTimer(1,onTime) -- создаем таймер с периодом 1 секунда Timer1:stop() -- пока притормозим его Edit1=Form1:addEdit(10,10, function() -- создаем поле ввода, по которому Label1.caption=0 -- сбрасываем метку в ноль Lmax=tonumber(Edit1.text) -- задаем крайнее значение Timer1:run() -- и запускаем таймер end) forms.run(Form1) -- старт всей конструкции А вот пример с computer.energy forms=require("forms") --подключаем либу Form1=forms.addForm() --создаем форму Label1=Form1:addLabel(2,2) -- создаем метку Timer1=Form1:addTimer(1,function() -- создаем таймер с периодом 1 секунда Label1.caption=computer.energy() -- в котором обновляем значение метки Label:redraw() -- и перерисовываем ее end) forms.run(Form1) -- старт всей конструкции
  4. Вызывать в цикле функцию addLabel нет необходимости. Каждый вызов такой функции создает новый компонент-метку, тебе же нужно просто изменить надпись на уже существующей метке. Сделать это можно изменив поле caption и перерисовав метку: Label1.caption="New caption" Label1:redraw() Теперь о том по какому событию происходит смена надписи. Если ты просто вставишь эту смену в цикл for i=1,10 do Label1.caption=i Label1:redraw() end то увидишь лишь последнее значение метки, а тебе, как я понял, нужно сделать счетчик, который бы считал с определенным периодом. Можешь для этого использовать компонент-таймер
  5. function text(a) return print(a) end Edit1=Form1:addEdit(10,10,function() text(Edit1.text) end) local a=Edit1.text
  6. У тебя не экран не очищается, а не обрабатывается корректно событие "touch". Дай ссылку на полный код и опиши чего делаешь и что хочешь получить
  7. А интернет карту вставил? В ОС 1.6, вроде, нужно крафтить дискету с pastebin и wget
  8. Тут надо учитывать, что при выполнении команды event.pull("touch") программа замирает пока не кликнешь по экрану. Т.е. надо обрабатывать не только "touch", но и другие события.
  9. Узнать сторону к которой подключен модем можно запустив такой код: for n,sSide in ipairs( rs.getSides() ) do if peripheral.getType( sSide )=='modem' then print(sSide) end end А вообще, переходите на OpenComputers. Там таких проблем нет, зато есть другие.
  10. Что то я не понял, если майнить реальные биткойнты реальными компами, то почему тема называется "Аналог BitCoint"? Или предлагается установить на сервере ОС-компьютер, который будет принимать от игроков комбинации цифр и выдавать взамен UU-шки или ресы? А как игроки будут вычислять эти комбинации, это уже вопрос игроков.
  11. Zer0Galaxy

    Игра 2D rpg

    Сделай ссылки на библиотеки, пожалуйста
  12. Вау! Мне нравится этот эмулятор. Вот только почему то основная файловая система readonly
  13. Вот почитал о вашем радиоперехвате и мысль меня посетила, почему бы не сделать на серве игру вроде охоты на лис. На карте случайным образом раскидываются радиопередатчики. Замаскированные, естественно. Возле передатчика размещается какая либо вкусная плюшка или инфа, позволяющая найти другой передатчик. А игроки бегают по карте с планшетиками и пытаются их найти.
  14. На счет рекламы: Вариант №1: Рекламный компьютер с периодом, скажем 10 минут, пишет в чат рекламные объявления по одному. Если пользователь не хочет их видеть, он набирает команду /nospam. Текст объявлений, разумеется, должен проходить цензуру. Вариант №2: В чат автоматически ничего не пишется. Что бы почитать рекламу, пользователь набирает команду /news и получает в чат (только он) пачку рекламок.
  15. Ты создаешь конструктор: используя двоеточие function GuiObject:CreateNew(x, y, w, h, listeners, container) ^ | Это синтаксический сахар Луа, который следует понимать как неявная передача в функцию еще одного параметра. Например, испльзуемое тобой определение конструктора, равнозначно вот такому (без двоеточия): function GuiObject.CreateNew(self, x, y, w, h, listeners, container) При вызове конструктора через двоеточие, первым параметром (self) передается сам вызывающий объект. Однако ты вызываешь конструктор без двоеточия, поэтому туда где должен быть объект попадает значение х, равное 1 и так далее со сдвижкой на один параметр. Вот ты и получаешь вместо listeners значение container={}. А container вообще остается не определен. Либо опиши конструктор без двоеточия, либо вызывай его через двоеточие.
  16. Во-первых, это сделает алгоритм управления турелью зависимым от реализации мода.Во-вторых, это сильно упростит управление турелью. Обнаружил-шмальнул. Есть датчик, который обнаруживает. Есть турель, которая стреляет. Есть компьютер, который всем этим управляет. Давай не лепить всё в одну кучу. А дальше мы захотим туда же встроить микроконтроллер. Купил в магазе турель, установил и она начала стрелять.
  17. Чего то не выходит. Во-первых, id у меня другие: 1. геолайзер (id:684) 2. терминал для очков (id:710) 3. сами очки (id:4496) Во-вторых, запускаю прогу и получаю вот такую ошибку Сама установка выглядит так Помогите! Я тоже хочу читерить!
  18. Улучшение "Всевидящее око" позволяет обнаруживать откуда исходит сигнал, посланный с улучшением "Невидимость" Улучшение "Гений маскировки" не позволит чатбоксу с улучшением "Всевидящее око" обнаружить откуда исходит сигнал и т.д.
  19. Хм. А ты не думал построить нейронную сеть на микроконтроллерах, так, что бы один микроконтроллер выполнял роль нейрона?
  20. mn=require("metanum") A=mn(2) B=mn(1) if A>B then print("2>1") else print("1>2") end При необходимости сравнить метачисло с числом, приводим их к одному типу. Например, так: A=mn(2) B=1 if A:tonumber()>B then -- Приводим метачисло к числу или так: A=mn(2) B=1 if A>mn(B) then -- Приводим число к метачислу
  21. Попробуйте угадать, что будет выведено на экран в результате выполнения нижеприведенного кода: N=1e16 if N+1 > N then print("Норма") else print("Лажа") end Если вы твердо уверены, что N+1 заведомо больше N и ваш ответ "Норма", то вы, наверное, будете несколько удивлены, когда выполните этот код на компьютере. Дело в том, что Луа хранит числовые значения в формате с плавающей запятой. Это означает, что каким бы большим число ни было, оно всегда занимает в памяти компьютера одинаковое место, а значит, чем больше число, тем меньше точность, с какой оно хранится. И при достаточно большом N точности, что бы увеличить его на единицу оказывается недостаточно. Избежать подобной проблемы поможет тип данных, который я назвал "Метачисла". На самом деле метачисла являются луа-таблицами, но большинство арифметических операций с ними можно проводить также как и с обычными числами. С той лишь разницей, что размер памяти, занимаемой метачислом, ограничивается только памятью компьютера, а значит, метачисло может принимать сколь угодно большие значения, не теряя при этом точности. Метачисло может быть создано при помощи библиотеки metanum pastebin get PsMFQame lib/metanum.lua Библиотека содержит единственную функцию – функцию создания метачисла. metanum([num[,divprec]]) Параметр num определяет начальное значение метачисла и может быть обычным числом, строкой или другим метачислом. Если параметр отсутствует, будет создано метачисло равное нулю. Параметр divprec ограничивает точность метачисла при выполнении операции деления. При делении некоторых чисел, скажем 1 на 3, может возникнуть бесконечная дробь, которая без такого ограничения заняла бы всю память компьютера. Чем больше divprec, тем больше значащих цифр может содержать метачисло. По умолчанию это число равняется 32. Мета числа можно складывать, вычитать, умножать и делить, как между собой, так и с обычными числами. Результатом такой операции всегда будет метачисло. Метачисла можно возводить в степень, но степенью должно быть обычное число. Метачисла можно сравнивать с другими метачислами. Если у вас возникнет необходимость сравнить метачисло с числом, вы должны привести оба значения к одному типу. Пример нахождения факториала 300: mn=require("metanum") –- подключаем библиотеку f=mn(1) -- создаем метачисло, равное 1 for i=1,300 do f=f*i -- выполняем умножение 300 раз end print(f) -- выводим результат Пример нахождения степени двойки: mn=require("metanum") –- подключаем библиотеку two=mn(2) -- создаем метачисло, равное 2 print(two^1024) -- возводим в степень и выводим результат Как видим, после создания метачисла, с ним можно не задумываясь работать так же, как и с обычным числом. Но, к сожалению, над метачислами не могут быть выполнены функции библиотеки math. Однако, метачисла обладают некоторыми собственными функциями. К примеру, если мы имеем некое метачисло М, над ним можно выполнить такие действия: M:tonumber() – преобразует метачисло в число. Внимание! Возможна потеря точности. M:floor([n]) – возвращает целую часть метачисла. Если задан параметр n, отсекает, оставляя n знаков после запятой. M:abs() – возвращает абсолютное значение (модуль) метачисла. M:toexp() – преобразует метачисло к экспоненциальному виду. PS: стоит добавить, что арифметические операции над метачислами выполняются значительно медленнее, чем над обычными числами. Поэтому использовать метачисла следует только тогда, когда в этом действительно есть необходимость.
  22. Т.е. если ты забудешь про пожаротушение и поставишь в комнате верстак, тебя зальет водой? Может лучше делать перегородки из шерсти, которые сгорят в первую очередь и откроют воду?
×
×
  • Создать...