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

Копирование таблицы

Вопрос

MineOS но вопрос по луа. Есть 2 таблицы: game.screen и game.screen.buffer. В процессе отрисовки нужно что-бы все параметр из game.screen перекатились в game.screen.buffer. Они это делают но вот загвоздка: мне не всралось что-бы когда в game.screen менялось значение, оно менялось и в game.screen.buffer.

Мега ультра код:

Скрытый текст

for i = 1, #game.screen do
	if game.screen.buffer[i] == nil then
		print('nil !')
		game.screen.buffer[i] = {visible = false}
	end
	print(game.screen.buffer[i].text, game.screen[i].text)

...

print('Copy buffer')
game.screen.buffer = {}
for i = 1,#game.screen do
	table.insert(game.screen.buffer, game.screen[i]) -- Пробовал (изначально было) game.screen.buffer[i] = game.screen[i], результат тотже
	print(game.screen.buffer[i].text)
end

 

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

Весь код:

Скрытый текст

		for i = 1, #game.screen do
					if game.screen.buffer[i] == nil then
							print('nil !')
							game.screen.buffer[i] = {visible = false}
					end
					if game.screen[i].type == 'text' then
							print('text')
							if game.screen[i].visible ~= game.screen.buffer[i].visible then
									print('Visible')
									if game.screen[i] and not game.screen.buffer[i].visible then 
											local tmp = screen:addChild(GUI.text(game.screen[i].x,game.screen[i].y,game.screen[i].color,game.screen[i].text))
											game.screen[i].raw = tmp
									else
											game.screen[i].raw:remove()
									end
							end
							if game.screen[i].x ~= game.screen.buffer[i].x then
									game.screen[i].raw.localX = game.screen[i].x
									print('x')
							end
							if game.screen[i].y ~= game.screen.buffer[i].y then
									game.screen[i].raw.localY = game.screen[i].y
									print('y')
							end
							if game.screen[i].text ~= game.screen.buffer[i].text then
									game.screen[i].raw.text= game.screen[i].text
									print('text')
							end
							if game.screen[i].color ~= game.screen.buffer[i].color then
									game.screen[i].raw.color = game.screen[i].color
									print('color')
							end
					end
		end
		print('Copy buffer')
		game.screen.buffer = {}
		for i = 1,#game.screen do -- Поэелементно и в лоб шо-бы у нас не дюпались буфера (game.screen.buffer = game.screen <-- Содержить буфер), которые там и не будем использовать. (Внутри буффера)
			print(game.screen.buffer[i].text)
			table.insert(game.screen.buffer, game.screen[i]) -- Было еще и game.screen.buffer[i] = game.screen[i]
			print(game.screen.buffer[i].text)
		end

 

 

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

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


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

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

Решение:

function table.copy(originalTable)
 local copyTable = {}
  for k,v in pairs(originalTable) do
    copyTable[k] = v
  end
 return copyTable
end

Нашел на каком-то форуме.

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


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

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

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

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

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

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

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

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

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


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