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

Проблема в библиотеке

Вопрос

Все доброго времени суток. Собственно решил я заняться созданием велосипеда. Посмотрел коды одного (совсем-совсем) не известного человека и... начал писать свою либу. И все ничего... 78 строк кода написанные одним махом и не единой ошибки! Для меня это рекорд, но вот только сама программка работает как-то... Как-то не так. Проблема заключается в том, что почему-то отрисовываются копии... С объяснением тут будет сложненько потому лучше сразу скрины и саму либу.

github: https://github.com/VladimirPruskalyow/OpenPrograms/blob/master/Library/DBuffer.lua

 

По поводу: "Да эта либа будет сто лет отрисовывать!!1" - Я знаю, меня сейчас беспокоит не быстродействие а корректная работа.

 

А вот это я запускал для проверки самой либы... 

local buffer = require("DBuffer")

buffer.Start()
buffer.Square(5, 5, 10, 20, 0xFF00FF, 0xFF0000, "S")
buffer.Draw()
local a, b, c = buffer.Get(56, 10)

io.write(a, "\n", b, "\n", c)

Так же стоит отметить, что функция Get проверяет пиксель не того прямоугольника который задан, а (хз откуда взявшегося) клона. Еще я проверял Get'ом buffer.new, и там тоже обнаруживался этот прямоугольник. Соответственно проблема в записи фигуры в буфер?! Но хоть убейте, я не понимаю откуда в 9 строках кода сидит ошибка. И... еще один пунктик. Отрисовка одного пикселя данной в либе функции Set дает такой же эффект: нужный пиксель+3 клона.

 

P.S. Скрин сделан в Эмуляторе OC, но и в обычном майнкрафте все так же. 

 

P.S.S. Покорно прошу вашей помощи, потому что сам, хоть убейте, ошибки не вижу...

post-18178-0-84400600-1460360597_thumb.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Рекомендуемые сообщения

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Когда редактируешь библиотеку, перезагружай комп. Иначе не узнаешь исправил ошибку или нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Когда редактируешь библиотеку, перезагружай комп. Иначе не узнаешь исправил ошибку или нет.

Я знаю... Уже был сие опыт.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

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

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. Тебе же самому будет проще программировать тогда.

Изменено пользователем qwertyMAN

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

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

 

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

Изменено пользователем qwertyMAN

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

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. Тебе же самому будет проще программировать тогда.

По сути у меня и была первая версия где цветам и символам была выделена отдельная таблица. Но посмотрев на одного человека(кого же?! :D ), я все же решил использовать его метод. Банально потому что Я все же думаю, что одна таблица будет меньше чем 3 таблицы в одной. Тем более что количество данных от этого не уменьшится.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

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

Гость
Ответить на вопрос...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


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