Форум программистов, компьютерный форум, киберфорум
Lua
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/16: Рейтинг темы: голосов - 16, средняя оценка - 4.88
1 / 1 / 1
Регистрация: 13.02.2017
Сообщений: 28

Как в Lua корректно отправить значения из класса update?

12.04.2019, 00:42. Показов 3435. Ответов 9

Студворк — интернет-сервис помощи студентам
как в Lua корректно отправить значения из класса update?

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

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


Игра по сути готова но на этом примере я хочу получше понять "магию ООП" которую
мне все так настоятельно везде рекомендую и как ПРАВИЛЬНО надо это делать

читал и этот ман и тысячи других. не могу сообразить
https://habr.com/ru/post/349718/

у меня есть переменные,мне нужно

1) их как то получить - я их получаю судя по всему правильно.
2) произвести сравнение и операцию. операция проводятся.
3) сохранить изменения. ЗНАЧЕНИЕ КУДА ТО ПРОПАДАЮТ!!!

есть вот функция, код:
Lua
1
2
3
4
5
6
7
8
9
10
11
12
function class_ammo:update(dt)
    local typta = typta or self.typta;  -- статус пули если есть.
    local start_x = start_x or self.start_x;    -- - стартовая координата откуда был произведен выстрел, не должна менятся 
    local x_ammo = x_ammo or self.x_ammo; -- текущая координата патрона , 
    local y_ammo = y_ammo or self.y_ammo;
    if (x_ammo==nil) then x_ammo=0; end; 
    if (y_ammo==nil) then y_ammo=0; end; 
    smsg1="x_ammo="..x_ammo.." y_ammo"..y_ammo.." type="..typta; 
    if (typta=="right") then  plusx=1; y_ammo=y_ammo+100; end ;-- не работает .
    self.x_ammo = x_ammo+100;  -- ему даже на это наплевать.  x_ammo_вообще не меняется. никак.
    self.y_ammo = y_ammo; -- хоть class_ammo:set прямо отсюда вызывай.
end
если я извне класса обращаюсь к конкретной выпущенной пуле это выглядит так::
это загрузка данных конкретной пули в переменные. typta,start_x,start_y,x_ammo,y_ammo,m_x_ ammo,m_y_ammo,ammo_moving,rotate_tt,rend erammoshot_tanks=ammoX[НОМЕРПУЛИВМАССИВЕ]:get();

А вот как записываются , опять же извне.
ammoX[ammonum]:set(typta, start_x,start_y,x_ammo,y_ammo,m_x_ammo,m _y_ammo,ammo_moving,rotate_tt,renderammo shot_tanks);

Т.е. для внешних функций никаких вопросов взять и поменять параметры любого обьекта нет.

мне непонятно как обратиться "изнутри" и перезаписать значение и отправить его в мир.


function class_ammo:get()
return self.x_ammo,... список параметров
end

function class_ammo:set(x_ammo)
local x_ammo = x_ammo or self.x_ammo;
self.x_ammo = x_ammo;
аналогичный список параметров
...
end

саму готовую игру можно скачать в google play (да она там уже есть) или с моего сайта. M2K game называется
в itch io тоже игра есть для Linux + windows + исходники если кто желает почитать полный код.
Дублирую вопрос на видео


https://www.youtube.com/watch?v=rrnr06LBlhE


если кому надо полные игровые сорцы есть но старые (да и смысл если я переделываю движок)
забыл как гитхаб обновить
https://github.com/dj--alex/m2k
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.04.2019, 00:42
Ответы с готовыми решениями:

Скажите, пожалуйста, как правильно реализовать работу методов класса в lua api c++
вот самая простая структура. как вызвать ее конструктор и метод в lua. Подскажите, пожалуйста. using namespace std; struct...

Как корректно передать в метод шаблонного класса объект шаблонного класса в качестве параметра?
header.h template <class T> class MyVector { public: void swap(MyVector<T>Vector); } template <class T> void...

Как получить значения переменных Lua Script в коде программы?
Здравствуйте, мне необходимо изучить и написать небольшую программу с использованием Lua. Пишу я на free pascal. Подключаю библиотеки и...

9
 Аватар для vantfiles
1018 / 1914 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
12.04.2019, 09:07
мндэ...

C
1
2
3
4
    local typta = typta or self.typta
    local start_x = start_x or self.start_x
    local x_ammo = x_ammo or self.x_ammo
    local y_ammo = y_ammo or self.y_ammo
Посмотрите внимательно на эти строки.
0
1 / 1 / 1
Регистрация: 13.02.2017
Сообщений: 28
12.04.2019, 11:43  [ТС]
от локальности надо отказатся?
а вдруг она нужна для чего то . а если я её уберу то всё поломается.

я уже 6 месяцев смотрю, на них на манулы
переставляю то одно то другое

вроде всё верно ошибок нет
все правда без локала делают на хабре
просто
self.a = self.a+1 ;
у них видимо работает

Добавлено через 14 минут
убрал локал
как не работало, так и не работает !

https://youtu.be/w77PsCG8HjI
по завершению update
все переменные сбрасываются в предыдущее состояние

хотя вычисление и производится как надо.
0
 Аватар для vantfiles
1018 / 1914 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
12.04.2019, 11:52
Это что - не ваш проект, как это "а вдруг она нужна" ?

local typta = typta or self.typta

В данном выражении (и остальных) вообще очень мало смысла.

Объявляется локальная переменная typta. Затем, если существует глобальная переменная typta, ее значение присваивается локальной, если не существует, в локальную переменную попадает значение self.typta из экземпляра объекта.

Если в проекте существуют глобальные переменные typta start_x x_ammo y_ammo - их значения и будут каждый раз попадать в локальные переменные каждый раз при вызове метода update.
0
1 / 1 / 1
Регистрация: 13.02.2017
Сообщений: 28
12.04.2019, 20:03  [ТС]
vantfiles,
глобально такой переменной не существует. и не должно существовать,

потому что есть массив ammoX
содержащий по параметру с такими именем для каждой пули.

по логике
update вызывается по очереди системой для того чтобы обработать каждую пулю
т.е. за 1 цикл образно говоря проходит одна путя т.е. как бы get выполняется при запуске функцией с указанием номера пули.

А задача стоит вернуть обратно новые координаты пули

блин ну неужели непонятно обьясняю. я уже несколько месяцев это написать пытаюсь то что я думаю.
return ом данные оттуда не вернуть.т.к. это класс он как бы "все сразу" значения содержит
а не какое то кокретное которое обычная функция содержит.
сам класс понятия не имеет какую именно пулю по номеру он обрабатывает. ему без разницы. и не должно это ему быть важно
для этого оно и написано,



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

П.с. не люблю изучать чужой код . как правило мой код мне понятнее чем чужой.

Добавлено через 24 минуты
перечитывал свои старые заметки
оказывается правильно это называется синглтон.
который я так и не доделал.
0
 Аватар для vantfiles
1018 / 1914 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
13.04.2019, 01:27
какая же каша
0
1 / 1 / 1
Регистрация: 13.02.2017
Сообщений: 28
14.04.2019, 12:08  [ТС]
как обучили и как обучился с помощью людей уроков и тем найденных в интернете
так и обучился.
по крайней мене я смог быстро сделать несколько продуктов уже.

Правильно эт0 называется синглтон. это обьект.
нашёл правильное название
классов т.к. в луа нет - но это пожалуй единственная оговорка.

Я изучил все что смог про синглтон что когда то кстати именно мне один хороший опытный но занятой парень написал мне однако так и не понял умеет ли update возвращать параметр.
В примерах все у всех просто self.a=self.a+1 i зашибись все работает.


Кажется просто есть где то второй цикл который сохраняет значения и восстанавливает их после моего изменения
0
1 / 1 / 1
Регистрация: 13.02.2017
Сообщений: 28
16.04.2019, 12:40  [ТС]
если не можете помочь
подскажите место где мне могут помочь
0
1 / 1 / 1
Регистрация: 13.02.2017
Сообщений: 28
17.04.2019, 22:48  [ТС]
написал за 1 ЧАС написал!!!! . на функциях написал то что 2 месяца в классах написать не мог.
теперь точно сила в функциях а не в классах и синглтонах, они только для запаривания мозга нужны.

полный код функции выстрела . update из синглтона так не может. он не умеет сохранять данные.
и всё работает! как надо сразу же. без манов на разных языках и никто тебе ничего пояснить не может
потому что видимо сами не знают как рассказать показать и обучить.
Lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 if (totalammo>0) then
 
for ammonum=1,totalammo,1 do 
     typta,start_x,start_y,x_ammo,y_ammo,m_x_ammo,m_y_ammo,ammo_moving,rotate_tt,renderammoshot_tanks=ammoX[ammonum]:get(); 
    if (typta~="") then
       x_ammo,y_ammo,m_x_ammo,m_y_ammo,ammo_moving,man_speedx=move_the_man(dt,x_ammo,y_ammo,m_x_ammo, m_y_ammo,ammo_moving,200);  
     
      plux=0; plusy=0;  rz=rozmiarznak;
   if (typta=="up") then  plusy=-1; 
    ammo_moving,m_x_ammo,m_y_ammo=do_a_step(dt, 0, -man_step*2,x_ammo,y_ammo); 
     end ;
    if (typta=="down") then plusy=1; 
      ammo_moving,m_x_ammo,m_y_ammo=do_a_step(dt, 0, man_step*2,x_ammo,y_ammo) ;
      end ;
    if (typta=="left") then plusx=-1; 
      ammo_moving,m_x_ammo,m_y_ammo=do_a_step(dt, -man_step*2,0,x_ammo,y_ammo);
      end ;
    if (typta=="right") then  plusx=1; 
      ammo_moving,m_x_ammo,m_y_ammo=do_a_step(dt, man_step*2, 0,x_ammo,y_ammo);
      end ;
 
     ammoX[ammonum]:set(typta, start_x,start_y,x_ammo,y_ammo,m_x_ammo,m_y_ammo,ammo_moving,rotate_tt,renderammoshot_tanks);
     end --of if typta~="" 
 end
end
и ни один партизан блин не помог ни на одном форуме
никто ничего не обьяснил или даже не сказал "пиши как привык"
https://pp.userapi.com/c856120... eK3tws.jpg
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38169 / 21104 / 4307
Регистрация: 12.02.2012
Сообщений: 34,693
Записей в блоге: 14
18.04.2019, 07:05
Цитата Сообщение от alxius Посмотреть сообщение
написал за 1 ЧАС написал!!!! .
Цитата Сообщение от alxius Посмотреть сообщение
и ни один партизан блин не помог ни на одном форуме никто ничего не обьяснил или даже не сказал "пиши как привык"
- если бы не форум, ты бы до сих пор размышлял, нет?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.04.2019, 07:05
Помогаю со студенческими работами здесь

Не работает корректно Windows Update
Не могу выполнить поиск новых обновлений на Windows 7 Professional SP1 x64, выполняю поиск обновлений, окно закрывается, потом снова...

DataGrid, как корректно заносить значения в БД?
Не подскажите, как вообще корректно заносить в базу новую запись. Если просто в Grid сделать AllowAddNew, то как добраться до введённых...

Как корректно сложить значения из двух TextBox
В общем, при сложении двух строковых, выдает сообщение: System.Windows.Forms.TextBox, Text. private void button1_Click(object...

Как в один метод отправить объект класса и переменную
Здравствуйте подскажите как в один метод отправить объект класса и переменную.

Как корректно записать значения из трех List<> в richtextBox
Доброе утро! Есть три списка List&lt;string&gt; из их эллементов нужно создать строку и поместить ее в richtextbox, вроде все делаю правильно, но...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru