1 (edited by BSB 2013-11-09 14:09:31)

Topic: Программно создаваемые объекты

Приветствую всех своим первым сообщением!

Много читал, что есть проблемы в программном создании объектов.
Собственно, в вики есть пример (или в семплах видел), что создаются сокровища в бесчетном количестве. Но при этом при сохранении они пропадают.

В моей задаче есть несколько видов однотипных объектов (которые хорошо бы наследовать) и затем они полноценно "гуляют" по комнатам.
Подозреваю, задачка-то попсовая... Есть решение ей?

Другими словами: есть магазин с товарами. Товары можно покупать, а затем они как-то должны сохраниться у игрока.

Re: Программно создаваемые объекты

Привет!
В док-ции см, new. и delete.

3 (edited by z-Hunter 2013-11-10 00:48:16)

Re: Программно создаваемые объекты

Привет. Ещё советую глянуть в Вики статью "приёмы программирования" http://instead.syscall.ru/wiki/ru/gamedev/tricks,  я там постил пример генерируемых и сохраняемых объектов (в своё время тоже долго мучился).

4 (edited by BSB 2013-11-10 15:32:55)

Re: Программно создаваемые объекты

Спасибо! Вроде получается. Только имена у объектов длинные и странные - как их искать потом?
Ну и вообще, как искать объекты (я так понимаю, методом srch)?

И вдогонку вопрос: а можно ли сделать массив(таблицу) ссылок на объекты?

model1=obj {
  nam="Элемент 1"
}

global {
  model={};
  model[1]=model1;
}

5 (edited by z-Hunter 2013-11-10 17:21:31)

Re: Программно создаваемые объекты

>  Только имена у объектов длинные и странные - как их искать потом?

Имена в смысле с номерами?

local r = tostring(rnd(1000));    
ret.nam = "яблоко"..r;

Это просто для наглядности сделано. Имя может быть любым.


> Ну и вообще, как искать объекты (я так понимаю, методом srch)?

Да. Ещё можно через seen()

> И вдогонку вопрос: а можно ли сделать массив(таблицу) ссылок на объекты?

Можно. Достаточно элементу массива присвоить объект и это будет уже ссылка.

Только ты неправильно написал. global не может быть внутри объекта, там вместо этого var.



P.S. Мне кажется, пришло время прошерстить все темы на форме по программированию и составить FAQ.

Re: Программно создаваемые объекты

z-Hunter wrote:

P.S. Мне кажется, пришло время прошерстить все темы на форме по программированию и составить FAQ.

А зачем его составлять?
Есть спец разделы
http://instead.syscall.ru/forum/viewtopic.php?id=573
http://instead.syscall.ru/forum/viewtopic.php?id=136

опять же wiki, которая предоставляет кроме документации множество примеров. Или я тебя не правильно понял?
Кстати как поживает твой модуль?

Ну и опять же вики

Qui habet aures audiendi, audiat...

Re: Программно создаваемые объекты

z-Hunter wrote:

>  Только имена у объектов длинные и странные - как их искать потом?

Имена в смысле с номерами?

В смысле само имя переменной (как к нему обращаться). У меня они в виде allocator["objects"][1]
Тут же всплывает подвопрос: как поймать это название в коде? Пробовал objects.keyname и objects.id (всё с потолка) - не могу поймать

И вот чего я боялся:

То INSTEAD не сможет сохранить этот объект. Это произойдет потому, что вообще говоря, INSTEAD умеет сохранять только те объекты, которые имеют дескрипторы. Объекты, имеющие дескрипторы, это объекты созданные одним из следующих способов:

http://instead.syscall.ru/wiki/ru/gamed … е_объектов

Пример, который там указан, я не в состоянии пока переварить. Если не трудно, распишите на пальцах? Ну или, быть может, уже есть более простой способ (всё-таки движок развивается)?

P.S.: Вообще, хорошо бы (для меня и других начинающих) сделать рабочий пример с сохранением объектов, подобно примерам применения модулей click и counters. Потому что кусками кода лично у меня вообще никак не переваривается  roll

Re: Программно создаваемые объекты

BSB wrote:

P.S.: Вообще, хорошо бы (для меня и других начинающих) сделать рабочий пример с сохранением объектов, подобно примерам применения модулей click и counters. Потому что кусками кода лично у меня вообще никак не переваривается  roll

Вот судя по этому сообщению, я смею заключить, что топикстартер начинающий в создании игр для instead, поэтому настоятельно советую проследовать всем указаниям вот отсюда
http://instead.syscall.ru/wiki/ru/gamedev/quickstart

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

Qui habet aures audiendi, audiat...

9 (edited by z-Hunter 2013-11-11 15:37:16)

Re: Программно создаваемые объекты

> А зачем его составлять?
Есть спец разделы

Потому, что в этих спец. разделах уже столько написано и их так много, что становится сложно что-либо найти даже если ЗНАЕШЬ что оно там есть.  Нужен краткий путеводитель в формате "вопрос - ссылка на ответ".

> Кстати как поживает твой модуль?

Вот сейчас Подлог на него перевожу.




> В смысле само имя переменной (как к нему обращаться). У меня они в виде allocator["objects"][1]
Тут же всплывает подвопрос: как поймать это название в коде? Пробовал objects.keyname и objects.id (всё с потолка) - не могу поймать

Имена переменных ты сам выбираешь. И не понятно, зачем ловить какие-то названия в коде? Перед тем, как рубить такие дрова, мне кажется, надо по Lua немного почитать. smile


> Пример, который там указан, я не в состоянии пока переварить. Если не трудно, распишите на пальцах? Ну или, быть может, уже есть более простой способ (всё-таки движок развивается)?
P.S.: Вообще, хорошо бы (для меня и других начинающих) сделать рабочий пример с сохранением объектов, подобно примерам применения модулей click и counters.

Ну по моей ссылке вообще-то вполне работающий и целостный пример.  Объекты "яблоко"клонируются в любых количествах и сохраняются без всяких проблем. Все дескрипторы там автоматически создаются так как есть функция-конструктор.

10

Re: Программно создаваемые объекты

j-maks wrote:

Вот судя по этому сообщению, я смею заключить, что топикстартер начинающий в создании игр для instead, поэтому настоятельно советую проследовать всем указаниям вот отсюда
http://instead.syscall.ru/wiki/ru/gamedev/quickstart

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

Спасибо, прочёл. В принципе, вводный курс я как раз не читал, но с него ссылки на всё то, что уже прочтено (хоть и, возможно, не очень пристально - не очень много времени, к сожалению). За одним исключением (впрочем, не совсем интересным), всё это мне известно.

z-Hunter wrote:

Имена переменных ты сам выбираешь. И не понятно, зачем ловить какие-то названия в коде? Перед тем, как рубить такие дрова, мне кажется, надо по Lua немного почитать.

В принципе, вышел из положения другим способом: сделал таблицу и линки из создаваемых объектов на элементы таблицы.

z-Hunter wrote:

Ну по моей ссылке вообще-то вполне работающий и целостный пример.

Вот по подобию и сделал - вроде пашет.

Вообще, тут я сам виноват - у меня всего лишь одна свободная неделя, 3 дня знания Instread и Lua, трижды переписанные 2000 строк кода и только 5 сцен. В итоге, в голове каша, а на деле... ну пока даже и нечего показать.

Re: Программно создаваемые объекты

Не совсем понял вопрос, но видимо речь шла о том, чтобы сделать массив (global или var) и хранить там возвор результаты new.
Другое дело, что зачем это нужно не ясно, так как предметы хранятся в объектах и сохраняются сами собой.... Короче - без примера кода не ясно о чем речь.

P.S. имена в виде allocator - это внутренняя кухня, не надо туда лезть, эти имена нужны только движку. Так что лучше бы сформулировать вопрос точнее.

Re: Программно создаваемые объекты

Ну например:

global { x = null; };

....

x = new [[ apple() ]];


Это если уж надо переменную помнить. Но обычно достаточно:

put (new [[ apple() ]])

А поиск, например:

if seen('яблоко')  then-- поиск по nam

Ну или

local a = seen ('яблоко') -- a станет не nil если в тек комнате есть яблоко

13

Re: Программно создаваемые объекты

Да вопросов, в общем-то, больше нет - есть костыли. Есть куча мелких, не существенных:

1.

local perem

, объявленный вне объектов, сохранится?

2. global - какой-то не очень понятный контейнер. Внутри можно создавать таблицы (с подтаблицами), но при этом не удается сделать элемент таблицы объектом:

global {
tovar = {
pylesos = {
object = obj(pylesos),
relation = {1,3,6,1},
},
utyg = {
object = obj(utyg),
relation = {3,3,5,4),
},
}
pylesos = obj {
nam = 'pylesos'
}
utyg = obj {
nam = 'utyg'
}

При этом не очень понятно, почему stead.table.maxn(tovar) вернет 0, и при этом, если заменить в нём pylesos на [1] и utyg на [2], он возвратит 2?
Второе, в object почему-то пусто. Тоже не очень понятно.
И третье, я так понял, что гиблое дело пытаться в obj добавлять

var {
relation={23,54,65};
}

3. Был вопрос про opairs и ipairs, но вроде прояснилось всё...

Re: Программно создаваемые объекты

Ну что, получилось разобраться?

15

Re: Программно создаваемые объекты

Да пока времени нет. Как с декабря взяли в оборот, так конца и краю нет  работе smile
Наверное, радоваться надо в связи с ситуацией вокруг...