Среда, 13 Ноября 2024, 10:09

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
Вопрос - Ответ (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

Решено с помощью волшебного
Код
With Movable_block


Сообщение отредактировал 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
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг