Вопрос - Ответ (Game Maker)
| |
arthur33 | Дата: Воскресенье, 31 Июля 2016, 02:05 | Сообщение # 5741 |
участник
Сейчас нет на сайте
| Доброго времени суток. Наткнулся на проблемы с созданием инвентаря и вряд ли смогу все подробно объяснить. Проблема в том, что я не пойму как "достучаться" до предметов, чтобы их выбросить/использовать через нажатие на слоты инвентаря (создаются они массивом в контроллере) не получается сделать удаление именного того предмета, на слот которого нажимаешь, а удаляются они поочерёдно . Буду безумно благодарен тому, кто не полениться покопаться в исходнике и помочь исходник
- Опыт - это то, что получаешь, не получив того, чего хотел. Новая головоломка
Сообщение отредактировал arthur33 - Воскресенье, 31 Июля 2016, 02:09 |
|
| |
кракозяба | Дата: Воскресенье, 07 Августа 2016, 07:04 | Сообщение # 5742 |
почетный гость
Сейчас нет на сайте
| arthur33, исходник удалён. У меня тоже есть вопрос, почему game maker тупит, когда нужно складывать числа? Допустим, есть переменная global.ammo=7, при выстреле global.ammo-=1. По сути, игрок может сделать только 7 выстрелов, но он делает 8. После этого подбираются патроны, global.ammo+=1, но добавляются 2 патрона! Далее если написать global.ammo+=0, то ГГ подберет 1 патрон. Это только у меня так или у кого-то еще?
Учи русский! Отговорки "Я не из России", "Мне 11 лет" - не отговорки. Будь грамотным и правильно расставляй запятые!
|
|
| |
FlyOfFly | Дата: Воскресенье, 07 Августа 2016, 09:10 | Сообщение # 5743 |
заслуженный участник
Сейчас нет на сайте
| Цитата кракозяба ( ) У меня тоже есть вопрос, почему game maker тупит, когда нужно складывать числа? Допустим, есть переменная global.ammo=7, при выстреле global.ammo-=1. По сути, игрок может сделать только 7 выстрелов, но он делает 8. После этого подбираются патроны, global.ammo+=1, но добавляются 2 патрона! Далее если написать global.ammo+=0, то ГГ подберет 1 патрон. Это только у меня так или у кого-то еще
ну global.armor -=1 может быть из за того что
Код f(global.ammo >= 0) shoot() global.ammo -=1 допустим
|
|
| |
arthur33 | Дата: Воскресенье, 07 Августа 2016, 11:38 | Сообщение # 5744 |
участник
Сейчас нет на сайте
| Просто на него слишком долго не реагировали)
Цитата кракозяба ( ) arthur33, исходник удалён. Но, я понял как описать проблему: Есть 2 объекта: инв.контроллер ( создаёт массив, создающий ячейки слотов) И обж.слот (сами ячейки) Допустим в инв.контроллер вписан примерно след.код:
Код var for(i = 0; i < 5; i += 1) { // запускаем цикл { cell[i]= instance_create(i * 32, y , obj_slot); // создаём ячейки cell_kol[i]=0 // переменная отвечающая за кол-во предметов в слоте (стак предметов) } }
А в событии подбора предметов, проверяется, если спрайт слота (inv.cell[i].sprite_index) = s_slot, то меняем спрайт слота, на спрайт подобранного предмета и inv.cell_kol[i]+=1, тобишь кол-во увеличивается на 1, а так же, если спрайт слота уже = спрайту подобранного предмета, то просто увеличивается кол-во.. (надеюсь вы не устали читать, близится финал) И вот, таким образом работает подбор предметов, НО необходимо же ещё их исп. из инвентаря. Как я догадался, для этого необходимо в объекте обж_слот, в событии нажатия мышки писать нечто подобное:
Код var i for (i=0;i<5;i+=1) if (sprite_index == spr_item1) { //Тут проверяем спрайт объекта, который находится в данной ячейке и если его спрайт = спрайту первого предмета o_hero.hp+=10 // то предположим прибавляется 10 хп inv.cell_kol[i]-=1; // и кол-во этого предмета уменьшается на 1 break;}
И вот проблема в том, что на какую бы ячейку ты не нажал, кол-во предмета уменьшается в самой первой ячейке, а не из той, в которой лежал предмет. Буду пожизненно благодарен помощи..
- Опыт - это то, что получаешь, не получив того, чего хотел. Новая головоломка
|
|
| |
OpenGOO | Дата: Воскресенье, 07 Августа 2016, 18:20 | Сообщение # 5745 |
почти ветеран
Сейчас нет на сайте
| Может как то так
Код if (inv.cell[i] == id)
Мои проекты: - Свободный и открытый клон World Of Goo - TrueEngine2D (2D игровой фреймворк основанный на FreeBASIC)
[GameMaker: Studio v1.4.9999]
|
|
| |
arthur33 | Дата: Воскресенье, 07 Августа 2016, 18:31 | Сообщение # 5746 |
участник
Сейчас нет на сайте
| OpenGOO, подробнее пожалуйста.
- Опыт - это то, что получаешь, не получив того, чего хотел. Новая головоломка
|
|
| |
OpenGOO | Дата: Воскресенье, 07 Августа 2016, 20:29 | Сообщение # 5747 |
почти ветеран
Сейчас нет на сайте
| Код var i for (i = 0; i < 5; i +=1) { if (inv.cell[i] == id) { if (sprite_index == spr_item1) { o_hero.hp +=10; // то предположим прибавляется 10 хп inv.cell_kol[i] -=1; // и кол-во этого предмета уменьшается на 1 }
break; } }
Мои проекты: - Свободный и открытый клон World Of Goo - TrueEngine2D (2D игровой фреймворк основанный на FreeBASIC)
[GameMaker: Studio v1.4.9999]
|
|
| |
arthur33 | Дата: Воскресенье, 07 Августа 2016, 20:40 | Сообщение # 5748 |
участник
Сейчас нет на сайте
| OpenGOO, недели мучений закончены благодаря одной строчки. Ещё бы объяснить функцию id, определение ин. Номера объекта и обращение именно к нему через inv.cell?
- Опыт - это то, что получаешь, не получив того, чего хотел. Новая головоломка
Сообщение отредактировал arthur33 - Воскресенье, 07 Августа 2016, 20:42 |
|
| |
OpenGOO | Дата: Понедельник, 08 Августа 2016, 13:58 | Сообщение # 5749 |
почти ветеран
Сейчас нет на сайте
| arthur33, id это одно из свойство экземпляра (советую изучить мануал GMS).
В этом примере, мы создаем экземпляр объекта obj_slot и сохраняем его id в массив cell.
Код cell[i]= instance_create(i * 32, y , obj_slot); // создаём ячейки
Мои проекты: - Свободный и открытый клон World Of Goo - TrueEngine2D (2D игровой фреймворк основанный на FreeBASIC)
[GameMaker: Studio v1.4.9999]
|
|
| |
Aizeken | Дата: Среда, 10 Августа 2016, 13:41 | Сообщение # 5750 |
был не раз
Сейчас нет на сайте
| Здравствуйте! Ну собственно - есть игра пошаговая рпг, в которой за 1 ПК должны играть 2 человека. Делаю на движке Game Maker. В окне выбора - есть 4 дракона(эльфийский, человеческий, гномий, орчий) и 4 стихии. В начале - этой румы - вылазит меседж (Player 1 pick) .Вот скрин выбора сторон. http://s1.uploadpics.ru/images/bkuSsj77DZ.jpg После того как переменные VuborRasu1 и VuborStihii1 = false - вылазит меседж (Player 2 pick)
if vuborRasu1=false && vuborStihii1=false && player1xod=true {
player2xod=true player1xod=false
alarm[11]=5 //message (player 2 pick)
} До этого момента Player1 - может спокойно выбрать любую расу и стихию, а вот когда настает черед выбирать Player2 - то начинаются чудеса. Стихии не выбирает, только если нажать на огонь - выбирает воду... Так же с расами. Выбрать можно только 2 расы - в зависимости от того - какую выбрал первый игрок. Код вибора сторон - выглядит так: (плз почитайте - может че подскажите)
//Эти переменные отвечают за то - какую расу и стихию выбрал 1 игрок, что бы потом в соответствии с этим он появился на карте в нужном месте и с нужной стихией (они не столь важны в моем вопросе) vuborOrki=0 vuborLudi=0 vuborElfu=0 vuborGnomu=0 vuborVozduh=0 vuborOgon=0 vuborVoda=0 vuborZemlya=0
//Эти переменные отвечают за то - какую расу и стихию выбрал 2 игрок, что бы потом в соответствии с этим он появился на карте в нужном месте и с нужной стихией (они не столь важны в моем вопросе) vuborOrki2=0 vuborLudi2=0 vuborElfu2=0 vuborGnomu2=0 vuborVozduh2=0 vuborOgon2=0 vuborVoda2=0 vuborZemlya2=0
//переменные для возможности выбора 1 и 2 игрокам рас и стихий - по 1му разу(по 1 клику на расу и на стихию каждому игроку)
globalvar vuborRasu1, vuborStihii1, vuborRasu2, vuborStihii2,player1xod,player2xod; vuborRasu1=true vuborStihii1=true vuborRasu2=true vuborStihii2=true
player1xod=true player2xod=false
alarm[0]=5 // message (Player 1 pick!)
//И так - сам скрипт:
//PLAYER1
if player1xod=true {
//Orki if mouse_x>230 and mouse_x<625 and mouse_y>80 and mouse_y<775 // координаты мышки над позицией обьекта(рисунка) при нажатии на который выберутся орки и тд. к всем остальным
{ if mouse_check_button_released(mb_left) //Если отпустить левую кл. мышки { if vuborRasu1=true // Если выбор расы1 (то есть для 1го игрока) - позволен { if vuborOrki=0 {vuborOrki=1 vuborRasu1=false alarm[1]=1 } // Если ВиборОрки=0 (то есть никто еще не выбирал орков). То Выбор Орки=1 (орков нельзя уже будет выбрать, вибор Раси1(первому игроку) - запрещен(фолс). //Алармы во всех пунктах - отвечают за смену спрайта для определенного объекта рас или стихий, который выбрали. } } } //Ludi if mouse_x>1525 and mouse_x<1920 and mouse_y>90 and mouse_y<585 {
if mouse_check_button_released(mb_left) { if vuborRasu1=true { if vuborLudi=0 {vuborLudi=1 vuborRasu1=false alarm[2]=1 }
} } }
//Elfu if mouse_x>225 and mouse_x<620 and mouse_y>720 and mouse_y<1215 {
if mouse_check_button_released(mb_left) { if vuborRasu1=true { if vuborElfu=0 {vuborElfu=1 vuborRasu1=false alarm[3]=1 }
} } }
//Gnomu if mouse_x>1525 and mouse_x<1920 and mouse_y>720 and mouse_y<1215 {
if mouse_check_button_released(mb_left) { if vuborRasu1=true { if vuborGnomu=0 {vuborGnomu=1 vuborRasu1=false alarm[4]=1 } }
} }
//Voda if mouse_x>860 and mouse_x<1057 and mouse_y>16 and mouse_y<206 {
if mouse_check_button_released(mb_left) { if vuborStihii1=true { if vuborVoda=0 {vuborVoda=1 vuborStihii1=false alarm[5]=1} }
} }
//Zemlya if mouse_x>1088 and mouse_x<1288 and mouse_y>16 and mouse_y<206 {
if mouse_check_button_released(mb_left) { if vuborStihii1=true { if vuborZemlya=0 {vuborZemlya=1 vuborStihii1=false alarm[6]=1}
} } } //Ogon if mouse_x>635 and mouse_x<831 and mouse_y>16 and mouse_y<206 {
if mouse_check_button_released(mb_left) { if vuborStihii1=true { if vuborOgon=0 {vuborOgon=1 vuborStihii1=false alarm[7]=1}
} } } //Vozduh if mouse_x>1317 and mouse_x<1515 and mouse_y>16 and mouse_y<206 {
if mouse_check_button_released(mb_left) { if vuborStihii1=true { if vuborVozduh=0 {vuborVozduh=1 vuborStihii1=false alarm[8]=1} } }
}
}
//PLAYER2 //Вот тут - всё так же как и для 1 игрока написано - просто вместо единиц в переменных - стоит двойка (естественно для 2 игрока - другие переменные, но для тех же объектов) //Но - почти все не работает... Я не могу понять как выбор первым игроком влияет на выбор второго.. if player2xod=true { //Orki2 if mouse_x>230 and mouse_x<625 and mouse_y>80 and mouse_y<775 {
if mouse_check_button_released(mb_left) { if vuborRasu2=true { if vuborOrki=0 {vuborOrki2=1 vuborRasu2=false alarm[1]=1 }
} } }
//Ludi2 if mouse_x>1525 and mouse_x<1920 and mouse_y>90 and mouse_y<585 {
if mouse_check_button_released(mb_left) { if vuborRasu2=true { if vuborLudi=0 {vuborLudi2=1 vuborRasu2=false alarm[2]=1 } }
} }
//Elfu2 if mouse_x>230 and mouse_x<625 and mouse_y>80 and mouse_y<775 {
if mouse_check_button_released(mb_left) { if vuborRasu2=true { if vuborElfu=0 {vuborElfu2=1 vuborRasu2=false alarm[3]=1 } }
} }
//Gnomu2 if mouse_x>230 and mouse_x<625 and mouse_y>80 and mouse_y<775 {
if mouse_check_button_released(mb_left) { if vuborRasu2=true { if vuborGnomu=0 {vuborGnomu2=1 vuborRasu2=false alarm[4]=1 } } }
}
//Voda2 if mouse_x>635 and mouse_x<831 and mouse_y>16 and mouse_y<206 {
if mouse_check_button_released(mb_left) { if vuborStihii2=true { if vuborVoda=0 {vuborVoda2=1 vuborStihii2=false alarm[5]=1} }
} }
//Zemlya2 if mouse_x>635 and mouse_x<831 and mouse_y>16 and mouse_y<206 {
if mouse_check_button_released(mb_left) { if vuborStihii2=true { if vuborZemlya=0 {vuborZemlya2=1 vuborStihii2=false alarm[6]=1} }
} }
//Ogon2 if mouse_x>635 and mouse_x<831 and mouse_y>16 and mouse_y<206 {
if mouse_check_button_released(mb_left) { if vuborStihii2=true { if vuborOgon=0 {vuborOgon2=1 vuborStihii2=false alarm[7]=1} }
} }
//Vozduh2 if mouse_x>635 and mouse_x<831 and mouse_y>16 and mouse_y<206 {
if mouse_check_button_released(mb_left) { if vuborStihii2=true { if vuborVozduh=0 {vuborVozduh2=1 vuborStihii2=false alarm[8]=1} }
} }
}
|
|
| |
Quad69 | Дата: Среда, 31 Августа 2016, 00:06 | Сообщение # 5751 |
заслуженный участник
Сейчас нет на сайте
| Вопрос. Хочу сделать игрушку с большим изменяемым миром(типо террарии или майнкрафта) P.s Знаю, делать это на гм плохая идея, но я делаю чисто ради интереса.
Через пару попыток понял что хранить каждый блок как объект идея плохая. Тут я нашёл интересный пример(yal.cc) в нём показано как хранить весь мир в 2d массиве. Например, есть блок Камень, он просто отрисовывается и всё, он больше ничего не делает. Дак вот сам вопрос: А что если мне нужно сделать например печку, в которой можно переплавлять разные предметы? Как можно сделать процесс переплавки если это даже не объект?
|
|
| |
JackFilov | Дата: Пятница, 02 Сентября 2016, 21:02 | Сообщение # 5752 |
был не раз
Сейчас нет на сайте
| maksim1221232, используй свой примером(измени что-бы некоторые объекты(например Печка, Камень и т.д.) имели свои свойства). В предоставленном примере есть генерация что облегчит создание игрушки
|
|
| |
dildo_bomber | Дата: Понедельник, 05 Сентября 2016, 16:28 | Сообщение # 5753 |
частый гость
Сейчас нет на сайте
| всё. догнал.
Сообщение отредактировал dildo_bomber - Среда, 07 Сентября 2016, 15:12 |
|
| |
mafon2 | Дата: Среда, 07 Сентября 2016, 20:05 | Сообщение # 5754 |
был не раз
Сейчас нет на сайте
| И снова я возвращаюсь с вопросами про place_meeting...
В общем, мне нужно, чтобы блок разбивался, если на него падает другой блок.
Код следующий:
Код if (place_meeting(x,y-Movable_block.speedY,Movable_block)) { instance_destroy(); }
Но проблема в том, что это работает, только когда Movable_block один, а их может быть и несколько. Пытался поколдовать с "other", но без толку. Вообще не понимаю, как выделить один объект из множества подобных.
UPD
Попробовал решить тем, что переписал столкновение на Movable_block, а не на obj_rubble. Но т.к. у obj_rubble родитель obj_block через который просчитываются все столкновения, окончательно запутался.
UPD
Решено с помощью волшебного
Сообщение отредактировал mafon2 - Вторник, 13 Сентября 2016, 22:07 |
|
| |
dildo_bomber | Дата: Пятница, 23 Сентября 2016, 13:35 | Сообщение # 5755 |
частый гость
Сейчас нет на сайте
| еще раз здрасте! у меня такая ситуация. есть курсор, есть объект, который двигается за ним по оси х. после определённого триггера объект должен откинуть это всё и лететь на середину комнаты.
Код if phase3 = 1 then { if move_end = 0 { if x <> 259 {move_towards_point(259, y, 1)} else {hspeed = 0 pahse3 = 0 move_end = 1} } }
он подлетает к точке 259 и начинает дёргаться. сначала шаг был 2, поэтому он перепрыгивал точку. потом поставил шаг 1, но подёргивание осталось. выяснил почему. в дебаггере увидел: координаты объекта не всегда целые получаются, т.е. x = 259.1111112354 поэтому он прыгает с 259.111 на 258.111 и обратно.
как с этим справиться? как округлить фактические координаты или что сделать с проверкой такого случая?
|
|
| |
Fill_Freeman | Дата: Пятница, 23 Сентября 2016, 15:02 | Сообщение # 5756 |
почетный гость
Сейчас нет на сайте
| Цитата dildo_bomber ( ) как с этим справиться? как округлить фактические координаты или что сделать с проверкой такого случая?
Код if (x < 258 or x > 260) { move_towards_point(259, y, 1) }
|
|
| |
dildo_bomber | Дата: Среда, 12 Октября 2016, 13:28 | Сообщение # 5757 |
частый гость
Сейчас нет на сайте
| почему я сам не догадался, лол спасибо!Добавлено (12 октября 2016, 13:28) --------------------------------------------- подскажите, а возможно ли сделать так: возможно ли в событии при создании объекта вложить в него переменную из объекта вызывающего это создание? т.е. у меня есть пуля,у неё есть параметр dmg. при попадании во врага я буду создавать объект obj_text, которому я как либо передам знаение dmg переменной. такое вообще возможно? что то типа в событии столкновения у пули instance_create(x,y,obj_text) obj_text.dmg = dmg
или в событии создания объекта текст, что то типа other.dmg = dmg // тоесть переменнуя создающего объекта присваиваю этому дочернему объекту.
сложность в том, что пуль много, у всех свои значения dmg. и при попадании во врагов, пуля не всегда уничтожается, а продолжает лететь дальше. вот в чем загвоздка. кто-нибуть понял, что я имею ввиду?
|
|
| |
OpenGOO | Дата: Среда, 12 Октября 2016, 20:45 | Сообщение # 5758 |
почти ветеран
Сейчас нет на сайте
| Код var inst = instance_create(x,y,obj_text); inst.dmg = dmg;
Мои проекты: - Свободный и открытый клон World Of Goo - TrueEngine2D (2D игровой фреймворк основанный на FreeBASIC)
[GameMaker: Studio v1.4.9999]
|
|
| |
dildo_bomber | Дата: Четверг, 13 Октября 2016, 15:22 | Сообщение # 5759 |
частый гость
Сейчас нет на сайте
| OpenGOO, спасибо!
Добавлено (13 октября 2016, 15:22) --------------------------------------------- я немного уточню, а для какой версии ГМ это правдиво? у меня 8.1 lite и он не понимает этой конструкции. или где то в определённом месте писать надо?
EDIT всё заработало. нужно было написать в столкновении без var
Сообщение отредактировал dildo_bomber - Четверг, 13 Октября 2016, 15:44 |
|
| |
Raven84 | Дата: Четверг, 13 Октября 2016, 15:22 | Сообщение # 5760 |
старожил
Сейчас нет на сайте
| Почему-то перестала работать физика box2d при компиляции в html5. При компиляции под Windows все работает прекрасно, но в браузере или тупо не загружается комната с физикой или зависает! Пока особо не копался на оф.форуме yoyogames, но может кто уже нашёл решение этой проблемы? Я прозевал момент когда это случилось, но подозреваю с одним из последних обновлений скорее всего.
Super Knight Story (в разработке) Idolzzz - игра доступна в Steam и Play Market Oliver's Adventures in the Fairyland
|
|
| |
|