Четверг, 18 Апреля 2024, 04:48

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 2 из 2
  • «
  • 1
  • 2
Форум игроделов » Конструкторы игр и лёгкие в освоении системы разработки игр » Game Maker » Выделение кнопкой (сабж)
Выделение кнопкой
XageuДата: Среда, 06 Июля 2011, 01:27 | Сообщение # 21
Хадей - Друг Детей
Сейчас нет на сайте
Но как вносить в список предметы из видимой области? Вида. Как чистить понятно, но надо держать в нем только то, что в виде. Нужна команда какая-то, какая-нибудь smile Ну или вообще, какое-нибудь условие записи, я со списками дел не имел, так что проблема для меня.



Сообщение отредактировал Загё - Среда, 06 Июля 2011, 01:28
kasheyДата: Среда, 06 Июля 2011, 01:32 | Сообщение # 22
постоянный участник
Сейчас нет на сайте
Quote (Загё)
Но как вносить в список предметы из видимой области?

Вообще то в список нужно вносить обьекты сразу, а не когда они в виде появляются.
Проверить, находится ли обьект из списка в виде можно простым перебором координат обьектов. Заводим цикл, и проверяем по очереди каждую позицию списка. Как определить находится ли точка (х,у) в пределах вида думаю обьяснять не нужно?
NeZnayuДата: Среда, 06 Июля 2011, 01:41 | Сообщение # 23
__танцуй!__
Сейчас нет на сайте


Код прокомментировал.


CombatForce - 2d TDS долгожданный релиз
Noobster - самый простой конструктор игр в мире
LaLaLaLAMA! - игра не про Ламу


Сообщение отредактировал NeZnayu - Среда, 06 Июля 2011, 01:44
NeZnayuДата: Среда, 06 Июля 2011, 01:45 | Сообщение # 24
__танцуй!__
Сейчас нет на сайте
Quote (Загё)
Но как вносить в список предметы из видимой области? Вида.

Может проще все предметы что за пределами деактивировать? или они там тоже "жить" должны?


CombatForce - 2d TDS долгожданный релиз
Noobster - самый простой конструктор игр в мире
LaLaLaLAMA! - игра не про Ламу
kasheyДата: Среда, 06 Июля 2011, 01:45 | Сообщение # 25
постоянный участник
Сейчас нет на сайте
Простой пример:
instance_create(o_player)=player_1
instance_create(o_player)=player_2
team_1=ds_list_create()
ds_list_add(team_1,player_1)
ds_l ist_add(team_1,player_2)

for n=0 (view_xview[0]>ds_list_find_value(team_1,n).x>(view_xview[0]+view_width) && 'далее так де находим игрик координату') n+=1

ds_list_find_value(team_1,n) //нужная в результате вычислений инстансь

Как то так, надеюсь правильно описал. У емсалата вкус тоньше, может он что-то более элегантное придумает...
NeZnayuДата: Среда, 06 Июля 2011, 01:48 | Сообщение # 26
__танцуй!__
Сейчас нет на сайте
kashey, ну если все эти предметы за пределами вида не обязательно должны взаимодействовать с окружающей средой - то проще их просто деактивировать

И тогда:

with ob_predmet
{
ds_list_add(LIST, id);
}


какраз добавит в список все объекты внутри вида


CombatForce - 2d TDS долгожданный релиз
Noobster - самый простой конструктор игр в мире
LaLaLaLAMA! - игра не про Ламу
kasheyДата: Среда, 06 Июля 2011, 01:51 | Сообщение # 27
постоянный участник
Сейчас нет на сайте
Quote (NeZnayu)
kashey, ну если все эти предметы за пределами вида не обязательно должны взаимодействовать с окружающей средой - то проще их просто деактивировать

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


Сообщение отредактировал kashey - Среда, 06 Июля 2011, 01:53
NeZnayuДата: Среда, 06 Июля 2011, 02:00 | Сообщение # 28
__танцуй!__
Сейчас нет на сайте
with ob_predmet
{
if (x<view_xview[0]+view_wview[0])&& ... и т.д.
ds_list_add(LIST, id);
}

Тогда так, для оптимизации это необязательно делать каждый step, можно раз 5-10 в секунду например.


CombatForce - 2d TDS долгожданный релиз
Noobster - самый простой конструктор игр в мире
LaLaLaLAMA! - игра не про Ламу
NeZnayuДата: Среда, 06 Июля 2011, 02:04 | Сообщение # 29
__танцуй!__
Сейчас нет на сайте
Т.е. для каждого объекта игрока проверяем находится ли он в текущий момент внутри вида, и если да - добавляем его в список.

CombatForce - 2d TDS долгожданный релиз
Noobster - самый простой конструктор игр в мире
LaLaLaLAMA! - игра не про Ламу
kasheyДата: Среда, 06 Июля 2011, 02:06 | Сообщение # 30
постоянный участник
Сейчас нет на сайте
Нет, ты не понял biggrin
Я не с твоим подходом не согласен, а с подходом стартера. Все таки при атаке нападающие и центральные защитники должны подтягиваться к вражеским воротам. А вражеские наоборот подтягиваться к своим. А навес через половину поля? Как это осуществить, если все обьекты вне вида не реагируют? Ну и да, в степ все писать конечно не обязательно, это я для примера написал одним блоком специально для человека, у которого со списками не очень, чтобы он принцип схватил.


Сообщение отредактировал kashey - Среда, 06 Июля 2011, 02:08
XageuДата: Суббота, 09 Июля 2011, 15:54 | Сообщение # 31
Хадей - Друг Детей
Сейчас нет на сайте
Я не делаю никакого футбола, причем тут защитники и нападающие smile
-апдейт-
спасибо за пример, буду разбираться.

Добавлено (09.07.2011, 15:54)
---------------------------------------------
Quote (NeZnayu)
with ob_predmet
{
if (x<view_xview[0]+view_wview[0])&& ... и т.д.
ds_list_add(LIST, id);
}


Если предмет сначала попал в список, а потом не проходит по условиям, он разве будет удален? Т.е. получается мяч и на него будет скакать.
Я пытался сделать удаление из списка и сортировку, но как то не очень получилось.
По хорошему, всё должно выглядеть так:
-Все игроки добавляются в список.
-Нажимаем кнопку - мяч передается к следующему игроку, если он в виде. Если нет, должна идти проверка ДО ТЕХ ПОР, пока не найдется игрок, который в виде. Вот это ДО ТЕХ ПОР никак не могу сделать.
-Нашли игрока - передали ему мяч
-Если игрок последний в списке, то <событие> - с этим разобрался, это как везде. smile

Собственно, с этим ДО ТЕХ ПОР и прошу помочь. Я собрал код NeZnayu в один объект, и всё получается, но т.к. с логикой списков я не сильно знаком всё же, это условие прикрепить не выходит. Цикл в цикле мб.




Сообщение отредактировал Загё - Суббота, 09 Июля 2011, 15:56
Made_In_USSRДата: Суббота, 09 Июля 2011, 16:02 | Сообщение # 32
заслуженный участник
Сейчас нет на сайте
Quote (Загё)
Цикл в цикле мб.

Не может быть, а точно в цикл.
Quote (kashey)
for n=0 (view_xview[0]>ds_list_find_value(team_1,n).x>(view_xview[0]+view_width) && 'далее так де находим игрик координату') n+=1

ds_list_find_value(team_1,n) //нужная в результате вычислений инстансь

Вот же тебе код дали.


Новичкам изучающим GML кликать сюда.
Много примеров, исходников, библиотек и вообще всего что вам только может пригодиться. Автор портала, прости меня за ссылку, наболело =)
XageuДата: Суббота, 09 Июля 2011, 20:22 | Сообщение # 33
Хадей - Друг Детей
Сейчас нет на сайте
оу, мне казалось, я прочитал всё в этой теме еще в прошлый, сонный раз. Пойду пробовать. :P

Добавлено (09.07.2011, 18:10)
---------------------------------------------
Code
if targetmode=1
{
var i;
for (i=0; (view_xview[0]<ds_list_find_value(global.targetlist,i).x<(view_xview[0]+390) && view_yview[0]<ds_list_find_value(global.targetlist,i).y<(view_yview[0]+190)); i+=1)
{
player = ds_list_find_value(global.targetlist,i)
if player.targeted = true
{
if i=ds_list_size(global.targetlist)-1 {next_player=ds_list_find_value(global.targetlist,0)}
else
{next_player = ds_list_find_value(global.targetlist,i+1)}
player.targeted = false;
next_player.targeted = true;
break;
}
}
}


Описание:
-Если режим "таргетинга" включен (он у меня включается, собственно), то:
--Начинается цикл, для i. Причем, судя по коду, должны браться только те i, соответствующие игроки которых имеют данные координаты.
---Задаем игрока как число из списка (а список у нас отрегулирован в цикле, от 0 до i, причем так, как написано выше)
---Если игрок в "прицеле", то:
----Если этот игрок в конце списка, то выбираем начального игрока (напоминаю, в полный список у меня внесены ВСЕ игроки, а этот код обрабатывает ТОЛЬКО видимых)
----Иначе переходим к следующему игроку
----Снимаем "прицел" с текущего
----Ставим "прицел" на следующего
----Брейк biggrin

Где я не прав? Т.к. мяч передается абсолютно по всем, видимым на экране и невидимым.
Список задан кодом в другом объекте:
Code
with player
{
ds_list_add(global.targetlist,id)
}


Добавлено (09.07.2011, 20:22)
---------------------------------------------
По факту, нужно просто как-то научить его в течение одного шага цикла пропускать всех игроков, чьи координаты не вписываются в требования. Шожеделать biggrin

оффтоп: на вопросы "как сделать гравитацию", "как перейти в другую комнату" и прочие отвечают гораздо быстрее, кстати :D




Сообщение отредактировал Загё - Суббота, 09 Июля 2011, 20:23
Made_In_USSRДата: Воскресенье, 10 Июля 2011, 00:35 | Сообщение # 34
заслуженный участник
Сейчас нет на сайте
Quote (Загё)
Список задан кодом в другом объекте:

А собственно сам список существует? Я вижу веременную, которая оп идее содержит айди списка, но не виду самого списка ds_list_create()

Добавлено (10.07.2011, 00:30)
---------------------------------------------
Quote (Загё)
with player
{
ds_list_add(global.targetlist,id)
}

Насколько я понимаю так айди адресовать не получится. Потому как имя обьекта содержит идентификатор только первого созданного образца или это как бы контейнер для всех обьектов типа player, точно не скажу, не знаю smile В любом случае нужно обращаться персонально к каждому игроку и не через имя обьекта.

Добавлено (10.07.2011, 00:35)
---------------------------------------------
Можешь сделать небольшой эксперимент и вывести на экран список текстом. Сразу увидишь что в списке будет или один и тот же айди на каждой позиции, или в списке будет всего одна позиция. Аж самому стало интересно biggrin


Новичкам изучающим GML кликать сюда.
Много примеров, исходников, библиотек и вообще всего что вам только может пригодиться. Автор портала, прости меня за ссылку, наболело =)


Сообщение отредактировал Made_In_USSR - Воскресенье, 10 Июля 2011, 00:33
XageuДата: Воскресенье, 10 Июля 2011, 00:35 | Сообщение # 35
Хадей - Друг Детей
Сейчас нет на сайте
Да, сам список существует. Первый код в моем предыдущем сообщении содержится в событии "Если кнопка нажата"

Made_In_USSRДата: Воскресенье, 10 Июля 2011, 01:15 | Сообщение # 36
заслуженный участник
Сейчас нет на сайте
Я бы попробовал перенести добавление айди обьекта в список в криэйт этого обьекта. Тогда айди точно будут те что нужно.

Добавлено (10.07.2011, 00:48)
---------------------------------------------
И еще я бы все таки проверил, работают ли струкуры вроде n<x<z в гамаке или нужно разбивать их на одноклеточные n<x&&x<z. Имеются сомнения.
И не забываем про дебаг мод. Мониторь переменные, так намного легче разобраться что именно не работает.

Добавлено (10.07.2011, 01:15)
---------------------------------------------
И вот еще небольшая расшифровка, если не совсем понятно что делает код:

Quote (Загё)
for (i=0; (view_xview[0]<ds_list_find_value(global.targetlist,i).x<(view_xview[0]+390) && view_yview[0]<ds_list_find_value(global.targetlist,i).y<(view_yview[0]+190)); i+=1)

Для обьекта из списка targetlist в позиции i
Если х-координата обьекта из списка targetlist в позиции i находится за пределами вида, и если у-координата обьекта из списка targetlist в позиции i находится за пределами видаперейти к следующей по списку позиции.
Тоесть список прокручивается с нулевой позиции по ту, в которой будет встречен образец с координатами х,у находящимися в пределах вида. Номер этой позиции содержит айди обьекта, который удовлетворяет условиям.


Новичкам изучающим GML кликать сюда.
Много примеров, исходников, библиотек и вообще всего что вам только может пригодиться. Автор портала, прости меня за ссылку, наболело =)


Сообщение отредактировал Made_In_USSR - Воскресенье, 10 Июля 2011, 01:02
NeZnayuДата: Воскресенье, 10 Июля 2011, 01:55 | Сообщение # 37
__танцуй!__
Сейчас нет на сайте
Code
with ob_predmet  
  {  
  if (x<view_xview[0]+view_wview[0])&& ... и т.д.  
  ds_list_add(LIST, id);  
  }


Может туплю, но по-моему ответ уже давно прозвучал.


CombatForce - 2d TDS долгожданный релиз
Noobster - самый простой конструктор игр в мире
LaLaLaLAMA! - игра не про Ламу
XageuДата: Воскресенье, 10 Июля 2011, 03:24 | Сообщение # 38
Хадей - Друг Детей
Сейчас нет на сайте
Это же все должно быть динамичным. А тут на данный момент просто добавляется в список персонаж. А если он выходит за пределы экрана?

Добавлено (10.07.2011, 03:24)
---------------------------------------------
Вот решение (спасибо всем за помощь, я бы сам не справился):
Загнать в степ:
Quote
with player
{
if x<(view_xview+view_wview[0]) && x>view_xview[0] && y>view_yview[0] && y<(view_yview[0]+view_hview[0])
ds_list_add(global.targetlist,id)
else
ds_list_delete(global.targetlist,id)
}


Хотя, я немного соврал, в код вкралась ошибка (создание листа дублировалось в начале степа), поэтому все работало. Но так же быть не должно biggrin




Сообщение отредактировал Загё - Воскресенье, 10 Июля 2011, 03:28
NeZnayuДата: Воскресенье, 10 Июля 2011, 04:45 | Сообщение # 39
__танцуй!__
Сейчас нет на сайте
ds_list_delete(global.targetlist,id) - там где у тебя id на самом деле должна быть позиция в листе.

Quote (Загё)
Это же все должно быть динамичным. А тут на данный момент просто добавляется в список персонаж. А если он выходит за пределы экрана?

Вот именно список нужно очищать и заполнять постоянно (перед каждой "передачей мяча"):
Code
ds_list_clear(LIST); // очищаем список

with ob_predmet    
    {    
    if (x<view_xview[0]+view_wview[0])&& ... и т.д.  // проверяем каждый объект, и если он находится в пределах вида
    ds_list_add(LIST, id);  // добавляем его в список
    }


CombatForce - 2d TDS долгожданный релиз
Noobster - самый простой конструктор игр в мире
LaLaLaLAMA! - игра не про Ламу


Сообщение отредактировал NeZnayu - Воскресенье, 10 Июля 2011, 04:49
Форум игроделов » Конструкторы игр и лёгкие в освоении системы разработки игр » Game Maker » Выделение кнопкой (сабж)
  • Страница 2 из 2
  • «
  • 1
  • 2
Поиск:

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