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

TC1061

Пользователи
  • Публикации

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

  • Посещение

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

    3

TC1061 стал победителем дня 11 февраля 2018

TC1061 имел наиболее популярный контент!

Репутация

14 Обычный

1 подписчик

TC1061

  • Звание
    Участник

Посетители профиля

327 просмотров профиля
  1. А как без вращения 3D точек сделать 3D рэйкастер? Я не знаю как. Вот у меня вот такие функции отвечают за рэйкастинг: Если что, то это все работает в love2d. Вот я поставил твои функции, но все равно как то не то. На рендеринг поставлен плоский мир, и он должен выглядеть соотвествующе, но как бы не так: Может, нужно использовать углы Эйлера или кватернионы?
  2. Ну вообщем, я пытался сделать воксельный рэйкастер. Мне нужна была функция вращения 3D вектора. Она должна принимать 5 аргументов, координаты вектора (X,Y,Z) и углы вращения (по Y, по X) и вращать вектор вокруг нулевой точки (0,0,0). Я вот попытался свою функцию реализовать, но она работает неправильно: Кто нибудь может написать правильно вращающий эквивалент? Буду очень благодарен.
  3. Думаю, резать программы по строчкам как-то не правильно. А вдруг кто-то запихнет 9 килобайтов кода в одну строку? Лучше по килобайту считывать и отправлять P.S. кто-то может и по байту в строку положить
  4. Конечно! Даже несколько. К примеру, OCEmu (только он не эмулирует медленность опенкомпов)
  5. Обновление: добавлена функции sound:setVolume, sound:getVolume и soundlib.getSoundCount
  6. SoundLib by TC1061 Здравствуйте! Сегодня я наконец-то доделал свою прекрасную либу для работы со звуковой картой! Она позволяет легко и быстро использовать этого зверя. На стороне вашей программы лежит лишь загрузка либы и ее использование (и удаление объектов звука)! Не нужно даже следить за тем, есть ли звуковая карта. Без нее библиотека никаких ошибок не выдает, но скорее всего не будет проигрывать звук. И главная ее особенность - она может проигрывать сколько угодно звуков одновременно (пока оперативка не кончится ). Вообщем скачать ее можно здесь . Ну а на опенкомпе выполнить команду: pastebin get 0LwEez14 /lib/soundlib.lua Документация: soundlib.init=function():boolean -- Инициализирует библиотеку. Возвращает, получилось ли это сделать. soundlib.deinit=function():boolean -- Тоже, что и init, но наоборот. soundlib.reinit=function() -- Выполняет deinit, а затем init. soundlib.process=function([interval:number]):boolean -- Проигрывает звук. Нужно выполнять эту функцию как можно чаще, или звук будет прерывистым. Задерживает программу примерно на interval или 10 мс. Рекомендуется ставить interval на 50. Возвращает, получилось ли это сделать. soundlib.newSound=function(size:number,delay:number):sound -- Создает объект звука с количеством сэмплов (кусочков звука), у каждого из которых длительность delay. Остается навсегда, если потерять его, не уничтожив с помощью sound:destroy() soundlib.getSoundCount():number -- Возвращает количество созданных не уничтоженных звуковых объектов sound:play()=function() -- Воспроизводит звук. sound:rewind()=function() -- Возвращает в начало звука sound:pause()=function() -- Приостанавливает звук sound:stop()=function() -- sound:rewind+sound:pause sound:setVolume(volume:number) -- Поставить звук, от 0 до math.huge. Настоящая громкость получается при volume 1. sound:getVolume():number -- Возвращает громкость звука. sound:setLooping(state:boolean)=function() -- Переключить повтор звука. sound:isLooping():boolean -- Возвращает, включен ли повтор. sound:getDuration():number -- Возвращает длительность звука в секундах. sound:seek():number -- Возвращает позицию воспроизведения в секундах. sound:setSeek(pos:number) -- Устанавливает позицию воспроизведения в секундах. sound:getCurrentSample():number -- Тоже, что и sound:seek, но в семплах (может быть дробным) sound:getSampleCount():number -- Возвращает size, который вы указали в soundlib.newSound sound:set(rawpos:number,wave:string,freq:number,vol:number) -- Ставит на сэмпле rawpos частоту freq с громкостью vol на типе волны wave sound:get(rawpos:number):number, number -- Возвращает частоту и громкость сэмпла rawpos Пример кода: print("Initialising.") local sound xpcall(function() local computer=require"computer" local term=require"term" local slib=require"soundlib" slib.reinit() print("Generating sound.") local sizesd=1000 print("Selected size "..sizesd) sound=slib.newSound(sizesd,0.001) sound:setVolume(1) print("Generating samples") for n=0,sizesd-1 do sound:set(n,"sine",500,1-n/sizesd) end print("Playing sound.") sound:setLooping(true) sound:play() local n=computer.uptime()+10 local c=0 local prevcheck=computer.uptime() local processOk=true repeat processOk=slib.process(50) and processOk c=c+1 if c>=50 then local t=computer.uptime()-prevcheck print(math.floor(50/t) .. " PPS, sound is "..(sound:isPlaying() and "playing" or "NOT playing")..", "..(processOk and "no errors" or "errored")) c=0 processOk=true prevcheck=computer.uptime() pcall(os.sleep,0) end until computer.uptime() > n sound:stop() -- Необязательно т.к. он все равно не будет проигрываться sound:destroy() -- А вот это уже обязательно. Иначе при следующем запуске soundlib.process в любой программе, звук перемешается с нашим. end,function(err) if sound then sound:stop() sound:destroy() end print(debug.traceback(err,-2)) end)
  7. Ой простите. Но, если вынести из цикла указание волны и процессинг, звук ведь совсем не такой выйдет?
  8. CarWar Здравствуйте уважаемые форумчане! Я сдалал давненько такую игру, теперь выкладываю ее сюда. В этой игре мы играем за машинок. Другие игроки тоже играют за машинок (игроки могут быть и ботами!). Вообщем вся суть в том, чтобы стрелять в другие машинки и ломать их. За это мы получаем очки. Когда мы зарабатываем достаточно очков, уровень повышается. А это нам увеличивает размер,скорострельность и урон который мы наносим. Нас конечно тоже могут поломать, так что надо быть осторожнее и держаться подальше от больших машинок. Скриншоты: Скачать: CarWar.zip - Windows и Android CarWar.love - Linux
  9. Вообщем повозился с вашей карточкой и вышло вот что: component.sound.open(1) -- Создаем очередь из частот и сразу обрабатываем for n=1,1000 do component.sound.setWave(1,component.sound.modes.sine) component.sound.setFrequency(1,n) component.sound.delay(1) component.sound.process() end -- Слушаем получившийся бульк и радуемся что все работает
  10. А если сервера Telegram окажутся недоступны?
  11. Согласен, такие гриферы заставляют игроков думать о защите и обороне, и это добавляет интерес и игре.
  12. Будем считать, что байт-8 бит, килобайт-1024 байт, мегабайт - 1024 килобайт, кто будет говорить кибибайт или мебибайт? Язык заплетается!
  13. значит залита не полностью
  14. ок. Не sleep? ихихихихихи. Ну тогда будет называтся wait: function wait(interval) local deadline = os.clock()+interval repeat until os.clock()>=deadline end
  15. 1. Имя таблицы надо писать в функцию serialization.serialize(). Но в начале программы надо поставить serialization=require("serialization") 2. Первая строка проверяет, является ли первый аргумент функции table.fromPath строкой. Вторая проверяет, есть ли файл. Дальше идет проверка, является ли файл папкой. Если да, выводит ошибку. 3. Это чтение данных из файла и передача его в функцию десериализации (превращение строковых данных в таблицу). file - это хендлер файла, а :read - это читальщик файла - он читает данные из файла и возращает их. Можно дать ему числовой аргумент - и он прочитает столько, сколько указано прочитать. Если дать ему math.huge или "*a", он прочитает весь файл
×
×
  • Создать...