я все равно не собираюсь идти на попятную. мне надо разобраться почему глючит написанный мной код
Добавлено (13.01.2011, 18:57) --------------------------------------------- у меня другого объяснения не находится кроме как:
if(image_index = 1) {...image_index =0....} и затем этот же объект выполняет часть кода помле else мол потому что image_index уже равен нулю. Хотя я думал что при выполнении первого условия оператор завершается несмотря на вторую проверку что нах-ся в варианте else
И забавно что это происходит не всегда. в большинстве же своем как я уже сказал код работает как я и планировал
Добавлено (13.01.2011, 22:56) --------------------------------------------- в общем я сам нашел недочет
http://farchive.jino.ru/
Сообщение отредактировал vsDaTavs - Четверг, 13 Января 2011, 18:59
Запасной план у меня есть всегда. Так например добавить в посторонний объект переменную-контроллер, которая не будет допускать 2 выделенных объекта(image_index=1) и хранить значения 0 и 1. + объект временной памяти, который будет отвечать за заменяемый объект. а каждый шаг будет проверка контроллера и через преме памяти смена кадра для второго объекта.
Так я ж бьюсь чтоб код был короче
Добавлено (13.01.2011, 17:27) --------------------------------------------- а в вашем случа я бы не советовал так делать т.к. может возникнуть много багов, например при перетаскивание нажатой кнопке. ну и код проверок получится объемным
http://farchive.jino.ru/
Сообщение отредактировал vsDaTavs - Четверг, 13 Января 2011, 17:27
сразу замечу, чтоб не возникало лишних вопросов что у меня не совсем инвентарь как в понимание в РПГ "рюкзак" и при переходе в мое подобие инвентаря у меня грузится отдельная комната
для реализации задачки у меня имеется 3 объекта item_1, item_2, item_3 которые представляют собой предметы инвентаря есть также объект родитель для последних item в котором содержатся следующий код
в событие creat image_speed = 0 image_index = 0 select = 0 // не обращать внимания
в событие step if(image_index=1) { x = mouse_x y = mouse_y} // если объект выделен( 0 спрайт -нет, 1 - да), то он двигается за мышкой
в событие pressed mouse на объект item
if(image_index = 1) // я опеделяю выделен ли объект { n = (mouse_y-64) div 68 // k = (mouse_x-32) div 68 //определяю ячейку(есть массив, хранящий инфу о расположение итемов в инвентаре тут не стоит заострять внимания ибо проблема не в этом image_index = 0 // оповещаю, что объект больше не выделен(положен в ячейку) x = k*68+32 y = n*68+64 //не обращать внимания - позиционирую объект относительно ячейки item_0.jaika[n,k] = select // не обращать внимания select = 0 // ибо тут манипуляции с массивом, не влияющим на данную задачку mouse_clear(1) // подстраховываюсь очищая действие мыши
} else {
if(image_index = 0) // если объект не выделен { image_index = 1 // знач его выделяем mouse_clear(1) }
}
В принципе код работает - я нажимаю на предмет - он выделяется и далее движется за мышой, аналогично я его могу положить, заменить. Вот тут-то беда, часто замена проходит гладко, но иногда оба предмета вдруг цепляются за мышь. я нарошно в коде mose pressed код написал в 1 действие через else. но каким то образом программка иногда это препятствие обходит. Прошу высказывать у кого какие есть предположения, даж самые абсурдные, ибо изучая этот движок методом тыка я убедился что частенько абсурдные ошибки и получаются
http://farchive.jino.ru/
Сообщение отредактировал vsDaTavs - Четверг, 13 Января 2011, 16:35
аТнОтХоАн, спасиб. Это пригодится если я не найду другого выхода. Но пока я подумаю над более оптимальным кодом ++
Добавлено (12.01.2011, 13:11) --------------------------------------------- Dva_Kota, изменил код. но он странным образом работает. для проверки я задал значения ячейка
и если я задаю что все ячейки не пусты(нет нулей), а такое ведь может быть, программа выдает ошибку ERROR in action number 1 of Other Event: Room Start for object item_0: // объект контролеер в которм расположен код
Error in code at line 2: while (jnr[n,k]!= 0 )
at position 9: Unknown variable jnr or array index out of bounds
и еще одно
если задать ячейки так jnr[0,0] = item_1 jnr[0,1] = item_2 jnr[0,2] = item_3 jnr[1,0] = item_3 jnr[1,1] = 0 jnr[1,2] = item_1 создаются соответствующие объекты в первых 4 ячейках а 5 и 6 нет. while ( jnr[n,k] != 0) // а если 0 то цикл то завершается. пробую другое условие для цикла, а проверка на ноль в массиве осуществляю в выражении, так в этом случае массив не распознается.
items = 12 // общее количество имеющихся предметов n = 0 k = 0 while ( items >0) { if(jnr[n,k] != 0) { instance_create(36+66*n,68+66*k,jnr[n,k]) } items -= 1 if(k<2) {k +=1} else {n +=1 k=0} }
ERROR in action number 1 of Other Event: Room Start for object item_0:
Error in code at line 5: if(jnr[n,k] != 0)
at position 7: Unknown variable jnr or array index out of bounds
Добавлено (12.01.2011, 15:14) --------------------------------------------- понял в чем ошибки и как исправить все равно спс за помощь
Добавлено (13.01.2011, 16:01) --------------------------------------------- можно тему закрывать, я разобрался
http://farchive.jino.ru/
Сообщение отредактировал vsDaTavs - Среда, 12 Января 2011, 13:40
спс конечно, но вот такие объемные обходные лазейки я и сам могу придумать. Я интересовался нет ли каких команд в GML для массивов. например: обратиться к данному элементу массива как в прочих ЯП, удалить данный эл-нт и т.д... http://farchive.jino.ru/
Сообщение отредактировал vsDaTavs - Среда, 12 Января 2011, 15:50
подскажите плз как манипулировать размером массива(я имею ввиду индекс), а также как удалять последние(не помешало бы знать как удалять и определенные), перемещать(менять местами). И самое главное мне нужно знать как определить размер массива(индекс) П.С. в справке оч мало про массивы сказано, только сама структура
ах да. еще вот что меня интересует: массивы сами по себе глобальны?или как задать глобальные значения массивам
http://farchive.jino.ru/
Сообщение отредактировал vsDaTavs - Среда, 12 Января 2011, 15:59
jnr - массив, инициализованный в объекте контроллере при старте комнаты n и k - определения индекса массива(строка и столбец) item - совершенно пустой объект-родитель для объектов item_1, item_2, ... при старте игры также в объекте контроллере след. код jnr[0,0] = item_1 jnr[0,1] = item_2 jnr[0,2] = item_3 т е предметы 1, 2 и 3 имеются и располагаются соотв. в ячейках 1, 2,3 первой строки
Делаю что то наподобие инвентаря.
Код рассчитан на то, чтобы при загрузке комнаты проверялось на наличие предмета (item_1,2,3) в инвентаре ( jnr[n,k] ) и если это правда, создавался соответствующий объект в оопределенных координатах.
n = 0 k = 0 // начинаем с первой строки и первого столбца while (item = jnr[n,k]) // если данному индексу присвоено значение item (в данной ячейке расположен предмет) { instance_create(36+66*n,68+66*k,item) // создаем объект в подсчитанных мной координатах if(k<2) {k +=1} // если предмет не располагается в последнем столбце, увеличиваем столбец на 1 else {n +=1 k=0} // если же столбец последний, увеличиваем строку и задаем первый столбец }
проблема в принципе понятна. Задав объектам item_1,2,3,4 родителя item и использовав последнего в коде, я надеялся что item_1,2,3 наследуя операции, совершаемые над их родителем будут создавать себя-объекты в комнате. но не создаются. Хотел бы услышать альтернативу...
(я сам вижу возможные альтернативы, но тогда мне нужно знать 1 как определить объект(не образец) через значение переменной (или еще как). либо 2 можно ли как используя функцию создать себя-объект ( instanсe_creat(x,y, Я):)?
. заранее благодарен
http://farchive.jino.ru/
Сообщение отредактировал vsDaTavs - Вторник, 11 Января 2011, 23:39
Добавлено (09.12.2010, 20:09) --------------------------------------------- нелья работать с переменной объекта, которого еще не существует, т к переменная еще не определена
Добавлено (09.12.2010, 20:10) --------------------------------------------- в общем давай перейдем на ЛС чтоб не засорять тему и я те объясню зачем мне ето
Добавлено (09.12.2010, 19:52) --------------------------------------------- не получилось(
Знаю, что при столкновение образца объекта с другим образцом, св-ва данного объекта могут измениться, не задевая свойства не только родителя, но и других образцов данного объекта.То-есть изменения касаются конкретного объекта, даж если он находится в родственной группе. Мне необъодимо контролировать такие изменения свойств, но не через столкновение.
http://farchive.jino.ru/
Сообщение отредактировал vsDaTavs - Четверг, 09 Декабря 2010, 19:57
при старте игра имеет объект "object0". - он родитель для последующих.. он имеет переменную, к примеру "Presence=false".(она должна проверять наличие образца данного объекта в игре)
мне нужно чтобы при каком-либо условии(нажатии кнопки мыши) задавалось значение переменной Presence=true для всех родственных(расчитывая имеющихся на данный момент)(дочерних и самому) обекту object0 и создать новый объект, дочерний данному родителю. ВНИМАНИЕ! необходимо чтобы вновь созданный дочерний объект имел значение переменной Presence = false вот какой код я планировал.
if(mouse_check_button_released(1)) { if(object0.Presence=false) // означает, что объект не имеет образца { object0.Presence=true // задаем пременной, отвечающая за наличие образца значение - истинна.
instance_create(mouse_x,mouse_y,object0) //теперь размещаем образец данного объекта new_obj=object_add() object_set_parent(new_obj,object0)//создаем новый объект, дочерний первому(который по моим планам должен иметь ложное значение переменной Presence. но почему то новый объект наследует не только изначальный код родителя, но его свойства.(изменение переменной до появление данного дочернего объекта.) этот барьер я не знаю как пройти } }
http://farchive.jino.ru/
Сообщение отредактировал vsDaTavs - Четверг, 09 Декабря 2010, 19:36
Кидаешь в объект кубика в событие Step компонент Align to grid (на вкладке move квадратик в сеточку).. и там прописываешь размер сетки
совершенно верно
Для редактирования:
задаешь размер сетки на панели инструментов. Какой размер задашь(32х32) по такой сетке и будут выравниваться следующие поставленные (или передвинутые)тобой объекты.!!!!
Доп инфо В свойствах спрайта во втором столбце можно задать координаты оригинала(х и у) - это сдвиг спрайта относительно сетки.
можете проверить: например если спрайт объекта имеет размер по 32, и вы измените координаты оригинала в свойствах спрайта на: x=16, y=16 то ваш объект разместится на карте таким образом, что сетка будет пересекаться в центре вашего объекта
Чтоб вы не запутались в сдвигах, я даю наводку: координата -x -сдвиг вправо, -у - вниз, +х - влево, +у - вверх. вот так получается по осям координат как бы наоборот
http://farchive.jino.ru/
Сообщение отредактировал vsDaTavs - Среда, 08 Декабря 2010, 17:01
а если здаровья мало то противник бросает все включает команду_3 и отступает куда-либо для регенерации или спрятаться
Следует заметить что етот вариант приемлим для уникальных монстров. Так сказать для мобов высшего порядка. . Мобы низшего порядка, то есть обычные рядовые мобы не прекращают борьбу с героем пока кто нить не сдохнет.
Quote
ну имея саму "идею" в письменом варианте я могу её легко перенести в игру
Я могу изложить свои идеи по етому жанру. Как я сказал уже ранее, для етого нужно знать хотябы общие возможности монстра и физики игры. Если етой информации не будет, то и варианты будет слишком общие, а вы просите умного ИИ мммда. .. http://farchive.jino.ru/
1 отбегать монстру следует не только когда он имеет мало жизней, но и когда он подряд получает большие повреждения. (если ты атаковал монстра в рукопашную, и видеш что твои жизни быстро улетают ты не пременно отбежишь). Такие вещи я делаю через метки-переменные. 2 Также через метки воссоздать систему приоритетов например атак (тут вовсе обобщенно, поскольку я незнаю что умеет твой монстр) 3. Также если атаки монстра неэффективны(например промахивается, наносит много меньше повреждений, чем должен наносить прием, Эффект не срабатывает(например заклинание проклятья) то следует понизить приоритет. 4. приоритеты также можно менять, сравнивая общие параметры героя и монстра. Это только в общем.Для большей конкретики необходимо знать больше о персонажах и гемплее(возможностей в игре)
http://farchive.jino.ru/
Сообщение отредактировал vsDaTavs - Вторник, 19 Октября 2010, 11:42
По вашей рекомендации посмотрел я етот сцирра. Может на нем и лучше делать игры, но что мне не понравилось, ето нет файла помощи(уроки нечто другое, не так уж и шороко они описано, то есть мануал еще делается..) и интерфейс в ГМ более располагает. http://farchive.jino.ru/
Сообщение отредактировал vsDaTavs - Суббота, 16 Октября 2010, 17:45
К примеру в исходнике имеется объект Prev1 у него имеется свои коды и множество разных переменных (mxn, G, Ltb...) Вопрос: как кодом создать новый объект, Prev2, Prev3, Prev4, чтобы он имел точно такой же код(и переменные) как и в Prev1, и как объект определять по счетчику через имя (prev(i-ое))
к слову для чего:
имеется объект LIT он имеет переменную Money Мне нужно проверить все однотипные объекты (Prev1, Prev2, Prev3...) на переменную mxn чтобы увеличивать знчение переменной Money
и вот в объекте LIT мне нужно прописать код который звучит наподобие if (Prev1.mxn = LIT) {Money += Prev1.G} if (Prev2.mxn = LIT) {Money += Prev2.G} if (Prev3.mxn = LIT) {Money += Prev3.G} ... Вот мне необходимо составить код в виде цикла, чтоб не писать огромный список.. Но проблема в том что я не знаю как в цикле мне определить объекты - нужно проверить переменные mxn во всех объектах, где таковая переменная имеется
(или все объекты на переменную mxn, но в этом случае чтоб не загромождать код, проверка объектов - находящиъхся в одной группе)
http://farchive.jino.ru/
Сообщение отредактировал vsDaTavs - Пятница, 15 Октября 2010, 12:20
Я не боюсь давать развернутых ответов, многим это может помочь.
Quote
но лучше не просто писать код, а пояснять как то
Пардон, я хотел сказать: главное указать в чем была ошибка. а иначе твой код могут просто принять как данное. (тему то просматривают не только автор и ответчики а еще множество нубов) (а у тебя так, косвенно указанно на ошибку, как бы не подчеркнуто:) без обид) http://farchive.jino.ru/
Сообщение отредактировал vsDaTavs - Четверг, 14 Октября 2010, 11:31
if global.xp=50 {global.lvl+=1} Могу объяснить почему так не получилось - потому что в данном случае лвл поднимается ТОЛЬКО при xp=50, а что если перескочит? праильно - неактивируется См для размышления NeZnayu вы праильно попправили, но лучше не просто писать код, а пояснять как то, иначе люди могут дважды попасться на одном и том же . http://farchive.jino.ru/
Сообщение отредактировал vsDaTavs - Четверг, 14 Октября 2010, 10:19