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

qwertyMAN

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

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

  • Посещение

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

    47

Сообщения, опубликованные пользователем qwertyMAN


  1.  

     

    Хотя бы движение звёзд сделал.

    Относительно нас звёзды не двигаются. Так с чего они должны двигаться вокруг нас когда мы летим?

    Когда показывают МКС которая вращается вокруг земли то звёзды не движутся.

    Хочешь киношный эффект я так понял?

     

     

     

    А чего это она 250 мб жрёт?

    Не знаю, не знаю

    Возможно это сам движок. У бактерий 150-230 мб жрёт.


  2. С днём космонавтики, игроки!
     
    История проекта "Open Space":
    Как то решил я сделать клон одной игрушке на андроид которая мне понравилась (про самолёты).
    В итоге во время написания физики получилось совершенно иное, в чём я увидел больший интерес и решил сменить вектор развития.
    В итоге получилась в какой то степени обучающая програмка космической физики и теории относительности.
     
    Что есть в игре:
    • Инерция движения тел
    • Инерция вращения тел
    • Относительность 🙂
    • Реалистичная реактивная тяга, с учётом массы ракеты, массы топлива и так далее.
    • Отображение основной относительной траектории полёта (отключаемая функция)
    • Отображение восьми дополнительных относительных траекторий + космический корабль как точка отсчёта в этой системе (отключаемая функция)
    • Расход топлива
    • Заправка топлива
    • Замедление, ускорение и стабилизация времени + режим паузы
    • Неограниченный мир
    • Возможность отключения всех траекторий и осознания что жизнь - тлен
    • Индикаторы скоростей (в разных системах отсчёта)
     
    Управление:
    • W - Ускорение
    • A - Поворот налево
    • D - Поворот направо
    • F - Заполнить полный бак
    • Z - замедлить игру
    • X - ускорить игру
    • C - обычная скорость игры
    • R - пауза
    • 1 - отрисовка основной траектории движения
    • 2-9 - отрисовка дополнительных траекторий движения (относительно космической станции)
    • Колесо мыши - зум
     
    Ссылка на игру:
     
    Скрины:
     

     

    f98f145824766bb244a22d72c1a406c5.png
    5b62320eeb791541071c8e12d0c76b2c.png
    2786c271ae4c84e36347f99a7068d8cb.png
     
     
    Видео обзор:
     
     
    О дальнейшей разработке:
    Точно не ясно во что перерастёт проект. Заморозится ли он. Перерастёт в игру или песочницу. Пока что это не ясно.
    Есть шанс что из этого вообще выйдет космическая гонка в которой придётся проходить дрифтинг-трассу в условиях космоса  :lol:
    Что вы хотите пишите в комментариях. Возможно я добавлю то что будет предложено.
     
    Планируется добавить:
    • Гравитацию и планеты
    • Меню выбора объекта и расположение в игре по желанию игрока
    • Система отображения траекторий с учётом вращения точки отсчёта (космической станции)

    Перед игрой прочитайте хотя бы управления к игре. Иначе многое потеряете и будите спрашивать "как заправить ракету".

    Я тут заметил что часть игроков не читая ничего скачивают продукт и потом ничего не понимают что к чему.

     

    Чем можно заняться в игре:

    • Просто тестировать инерцию вращения и движения ракеты
    • Нарезать круги - "дрифтить"
    • Наглядно наблюдать относительные системы отсчёта (клавиши от 1 до 9 создают и отключают)

    От автора:

    Наличие сопротивления среды могло бы убрать такой эффект как относительные системы отсчёта. В какой то степени и по этой причине этого не было осуществлено замедление. Да и в принципе в космосе это не нужно.

     

     

     

    В игре про бактерий я использовал абсолютные координаты, и при отображении переводил их в относительные. Да и сам мир там был ограничен.

    Здесь же я побоялся что ракета улетит далеко и переменные в которых хранятся координаты заполнятся. Чтобы этого избежать я ракету стал считать неподвижной точкой. Вектора тел - впрочем как и обычно относительными векторами. Но при движении не прибавлять вектора движения к игроку, а отнимать их от всех объектов на карте. Такая система позволяет летать сколь угодно быстро и далеко. Пределов карты нет и не будет.

     

     

     

    Геймплей:

     

     

     

     

     

     

    P.S. Новая версия игры в видеоролике не доступна к скачиванию, как и более поздние версии игры. Пока что не вижу смысла их выкладывать, ведь игра в разработке, а фанатов у игры нуль.

    • Нравится 1

  3. А я думал вы вместе работаете

    Если я и буду делать калькулятор подобный, который собирался, то не стану рассчитывать на столь огромные числа и столь большую точность.

    3*10^8 знаков после запятой - это слишком большое число. Особенно для lua.


  4.  

     

    Нужен калькулятор, способный перемножить некое число длинной до 2 цифр на число с 300000000 знаков после запятой

    Зачем?

    Даже я на такие масштабы не замахивался со своими экспериментами.

    Что ты будешь делать с полученными данными? Рукаблудничать пролистывая длинную кучу цифр?

     

    Сначала придумай применение и цель создания такого калькулятора. Те кто на рекорд идут вычисляя число Пи - используют мощный ЭВМ. Так что побить рекорд на домашнем ПК никак не получится.


  5. А если какой-нибудь аргумент будет nil

    Он будет nil только если преждевременно прервать евент, например по истечению времени вот так:

    local out = {event.pull(60,"touch")}
    

    В обычном же случае без прерывания по времени, он просто не будет реагировать на ненужные евенты.

    Ну а если всё же в нашем случае код прерывается по времени, то для этого случая я написал вот такую часть кода:

    if out[1] then --обрабатываем случай когда выходит значение
            print(out[1].."\n"..out[2].."\n"..out[3].."\n"..out[4].."\n"..out[5].."\n"..out[6].."\n")
    else --обрабатываем случай когда выходит nil
    	break --здесь может быть любой код, но я решил написать break чтобы выйти из цикла.
    end
    
    

  6. Это клон либы ECS же :)

    А индексированные жрут меньше памяти, чем ассоциативные массивы, потому и ECS юзал их.

    А их обработка жрёт больше операций как я полагаю? Мне кажется тут важнее скорость работы и читабельность кода, нежели оперативная память.

     

    P.S. Pofigist, В любой непонятной ситуации ставь свой ответ лучшим ищи ошибки пользуясь принтами


  7. Проблема была решена. Ошибка закралась там где ее не ждали. Я почему-то использовал параметр высоты для преобразования координат в индекс. Хоть исправление проблемы и не говорит мне о том, почему в отрисовке появлялись клоны, но теперь меня это уже не слишком интересует. Кто ломал голову над моей проблемой(а такие врятли есть - извиняйте за мою тупость). 

    Особо не разбирался в коде, но знаю как его улучшить.

    У тебя есть такие строки:

    function buffer.Start()
      buffer.width, buffer.height = gpu.getResolution()
    
      buffer.current = {}
      buffer.new = {}
    
      for y = 1, buffer.height do
        for x = 1, buffer.width do
          table.insert(buffer.current, 0x000000)
          table.insert(buffer.current, 0xFFFFFF)
          table.insert(buffer.current, " ")
    
          table.insert(buffer.new, 0x000000)
          table.insert(buffer.new, 0xFFFFFF)
          table.insert(buffer.new, " ")
        end
      end
    end
    

    Предлагаю их заменить на:

    function buffer.Start()
      buffer.width, buffer.height = gpu.getResolution()
    
      buffer.current = {}
      buffer.new = {}
    
      for y = 1, buffer.height do
        for x = 1, buffer.width do
          buffer.current.bac = 0x000000
          buffer.current.for = 0xFFFFFF)
          buffer.current.text = "  " --здесь находятся 2 символа. Не знаю по чему у тебя другой к этому подход.
        end
      end
    end
    

    Разбираться полностью в коде нет желания, так что извини.

     

    Но о боже, что это?

    local function CoordToIndex(x, y)
      return (buffer.width*(y-1)+x)*3-2
    end
    

    Неужели нельзя нормально пользоваться таблицей? Хранить данные вот так:

    table = {
        for = 0x000000,
        bac = 0x000000,
        text = "qwertyMAN - красавчег",
        Gagarin = "Как вы там друзья, празднуете 12 апреля?",
        new_table = {
            text = "Это таблица в таблице",
            msg = "Гравитация - сила",
            pi = 3,1415,
            black_matter = "бесконечность не предел"
        }
    }

    Но нет, ты решил на костылях использовать индексную таблицу. Нехорошо так. Иди и читай гайды о таблицах в lua. Тебе же самому будет проще программировать тогда.


  8. Правило 2.6:

    Думаю продолжать дальше не стоит...

    В целом, система заказов сама по себе сплошная неразбериха.

    У игроков которые могут программировать куча ресурсов, но они не будут давать заказы. А у нубов которым нужны программы ресурсов как раз таки и нет.

    Вот и выходит что вся система заказов весьма противоречивая штука. Уж лучше изменить правило, внести в него исключения и пусть игроки выполняют заказ.

     

    Или вы думаете что заказы игроки будут выполнять за бесплатно?


  9. одна строка это уже код. ключ принято называть не i, а k.

    pairs  дает ключ (key) и значение (value) k, v

    ipairs дает индекс (index) и значение (value) i, v

    Да ладно тебе, у меня в оригинале вообще нет переменной i. Написал только лишь для примера. И это не принципиально в трёх строках использовать именно k и v. Что мешает использовать j? Там всего 3 строки, не кто не запутается в трёх строках если я локальную переменную назову вместо v - j. Могу хоть func назвать, это моё дело. Такое название даже больше подошло бы чем v которое общепринятое.


  10. <<много буковок>>

    Теперь я с уверенностью могу сказать что видел всё!

    Нет отступов, это ещё цветочки.

     

     

     

    event.pull(60)

    Это вообще лишнее. Весь код сплошной ужас.

     

    Попробую написать как надо и догадаться для каких целей тебе это нужно:

    local event = require("event")
    local com = require("component") --вообще не знаю зачем в данном коде эта библиотека, ну раз тебе она так нужна пусть будет
    
    while true do
    	local out = {event.pull("touch")} --евент ожидается пока не будет получины данные
    	--local out = {event.pull(60,"touch")} --если евент должен срываться при достижении в данном случае 60 сек без отклика, то ставим эту строку вместо предыдущей
    	if out[1] then 
                    print(out[1].."\n"..out[2].."\n"..out[3].."\n"..out[4].."\n"..out[5].."\n"..out[6].."\n") --отображаем 6 значений из таблицы
            else --если захочешь поставить второй вариант евента, который срывает его, то его срыв вызовет выход из цикла
    		break --вместо выхода из цикла можем написать любой код
    	end
    end
    

    Вот такой короткий и чёткий код получился.


  11. плохой код, ты не используемую переменную i создаешь, а еще стиль кода плохой.

    По одной строчке судишь о коде  :lol:

    Да это просто пример. Я немного добавил от себя, чтобы показать игроку что кроме самого значения возвращается и ключ i. А то не поймёт и будет нубить.


  12. Часть кода моей новой проги:

    for i,j in pairs (control.keys) do
    	j()
    end
    

    Цикл 

    for i,j in pairs (таблица) do end

     работает столько раз, сколько ячеек в таблице.

    При этом каждый раз выводит ключ i и значение j. В данном случае я в таблице храню функции, а ключ - это клавиши, вроде "f" и прочие для управления.


  13.  

     

    Наизусть не помню, а зач специально искать в сети, это же просто тестовый код

    Да забудь вообще слово "учить". Формулы нужно самому уметь выводить, а не надеяться на интернет, таблицу сложения и прочий мусор выдуманный гуманитариями.

    В общем я решил за тебя сделать столь сложный труд, вот 4 координаты точек правильного тетраэдра:

    local x=10 -- любое число - длинна грани тетраэдра
    {-x/2,0,0}
    {x/2,0,0}
    {0,0,math.sqrt(3)*x/2}
    {0,math.sqrt(x^2-(x/(2*math.sqrt(3)))^2),x/(2*math.sqrt(3))}

    Тригонометрия и не такое может.

     

     

     

    Не понял. Что не так?

    Мне кажется можно было читаемость повысить другим способом. Вынести таблицу в отдельную локальную переменную или например добавить отступы в коде где их нет. А их нигде нет.

     

     

     

    local angle=-0.1*math.pi/180--угол поворота

    Используешь по старинке math.pi/180 ?

    Так уже давно никто не делает. Почитай тут про библиотеку math, там есть такие полезные функции как math.deg и math.rad, они делают то что тебе надо.

     

    И да, если часто используешь какую то библиотеку, то желательно написать следующее в начале кода:

    local math = math
    

    По идее локальная переменная должна работать быстрее чем глобальная и это должно ускорить код.

    • Нравится 2

  14.  

     

    земной вес

    Учитель физики бы ругался трёхэтажным матом услышав эту фразу :smile3:

     

     

    а потом снова массу (ну а почему бы y не будет массой c:) --поставил 10, это же физика

    Что? 9.8 - это ускорение. А ускорение нужно складывать векторно! И причём тут масса?

     

     

    y = y*10 y = y/10   y = y + 1 --неужели это все? как бы не так!   y = y - 1

    Весь код такой оригинальный  :lol:  


  15. Вообще неплохой вопрос. Я тоже когда то начинал набираться опыта с игры. Я решил эту проблему не делая игр которые бы требовали сохранения. Всё очень просто  :giggle:

     

    P.S. Судя по твоим вопросам, скорее всего ты плохо понимаешь чего хочешь и как это будет реализовываться. Хотя бы объяснил что за игра и про что она.

    Я вот полез в игроделы из-за того что люблю математические задачи, на которых и основывается физика и графика игр.

    Если ты не любишь математику, скорее всего тебе не место в этой отрасли.


  16. --Тетраэдр, немного кривой, ну да ладно

    Аааааа, как? Зачем? Ты убиваешь во мне перфекциониста такими методами.

    Когда я тестировал и писал 3D рендеринг, я делал идеальный тетраэдр (моя любимая геометрическая фигура). Но ты меня убил вот этим "немного кривой". Так сложно использовать формулы? Так сложно логически составить формулы для составления точных точек тетраэдра?

    Учи тригонометрию.

    for i=1,60 do--вращение по Y+X+Z
    gl.transform({1,2,3,4},{1,0,0,0,
                            0,math.cos(angle),math.sin(angle),0,
                            0,-math.sin(angle),math.cos(angle),0,
                            0,0,0,1})
    gl.update()
    os.sleep(0.03)
    end 

    Правильное применение отступам? Ага, их как раз так и применяют  :smile3:


  17. Добрый день, игроки.

     

    Возник вот какой вопрос. Какой из двух вариантов кода использовать.

    Первый я назвал "математическим" и выглядит он так:

    --local table={}
    for i=1, 20 do
    	for j=1, 50 do
                    local n = (i-1)*50+j
    		--table[n]={i,j}
                    ...
                    <<Какой то код, использующий переменную n>>
                    ...
    	end
    end
    return table
     

    Второй я назвал вариантом "программиста" и выглядит он так:

    --local table={}
    local n=0
    for i=1, 20 do
    	for j=1, 50 do
    		n=n+1
    		--table[n]={i,j}
                    ...
                    <<Какой то код, использующий переменную n>>
                    ...
    	end
    end
    return table 

    Как мы видим, мы проходим по координатам и записываем их в таблицу вычисляем переменную n разными способами. Но разница состоит в том, использовать ли при этом лишнюю переменную счётчика или нет.

     

    А теперь напишите в комментариях, какой код лучше и почему.

×
×
  • Создать...