Выбор объекта с последующим отпусканием.
|
|
ДАРУТАН | Дата: Вторник, 19 Июня 2012, 19:31 | Сообщение # 1 |
был не раз
Сейчас нет на сайте
| Есть большое число (ок. 2000) объектов - провинции на карте, у них есть родительский объект (может поможет в решении проблемы). При нажатии ЛКМ по определённой провинции её спрайт меняет кадр на 1. При нажатии на какую-либо другую провинцию, с ней происходит тоже самое, но у предыдущей кадр спрайта возвращается на 0. При нажатии ЛКМ на других игровых объектах, при условии выбора до этого какой-то провинции, у неё также кадр возвращается на 0.
Проблема заключается в том, что не могу понять как это реализовать в коде, конкретно отмену/снятие выделения(смена кадра) у предыдущего объекта при выборе новой провинции.
Сообщение отредактировал ДАРУТАН - Вторник, 19 Июня 2012, 19:33 |
|
| |
GameMix | Дата: Вторник, 19 Июня 2012, 20:18 | Сообщение # 2 |
старожил
Сейчас нет на сайте
| ДАРУТАН, сохраняй id предыдущей провинции в переменную a, например. Когда нужно сменить кадр, пиши код:
Steel Standoff - 2D аркада. Мои статьи
|
|
| |
ДАРУТАН | Дата: Вторник, 19 Июня 2012, 20:36 | Сообщение # 3 |
был не раз
Сейчас нет на сайте
| GameMix, спасибо, подскажите ещё как присвоить переменной а идишник объекта.
|
|
| |
BrightSpot | Дата: Вторник, 19 Июня 2012, 21:20 | Сообщение # 4 |
заслуженный участник
Сейчас нет на сайте
| я бы сделал так... создаем обьект с глобальной переменной global.target ри нажатии на провинцыю забиваем global.target=id в степе обьекта или в рисовании забиваем :if global.target=id{image_index=1}else{image_index=0} таким образом потом можно легко определять что выделено и в других обьектах...
Более мощный компьютер глючит быстрее и точнее.
|
|
| |
ДАРУТАН | Дата: Вторник, 19 Июня 2012, 22:08 | Сообщение # 5 |
был не раз
Сейчас нет на сайте
| BrightSpot, потрясающе, самое что для меня было важно, работает с родительским объектом, во все 2 тысячи вбивать не надо, большое Вам спасибо, что бы делали новички без помощи профи.
Да бы не плодить тем, задам здесь ещё один вопрос по проблеме, с которой только что столкнулся.
Интерфейс, состоящий из панели слева экрана должен двигаться за видом, комната большая, 10х10 тысяч. Как только мышку подвожу к краю экрана и начинается перемещение, панель запаздывает. Реализовывал передвижение через степ с привязкой на вид. Читая темы, видел, что такой вопрос уже поднимался, вроде бы ЛунарПиксель сообщал там, что возможности для молниеносного перемещения объекта в след виду нет. Но при этом можно реализовать по-хитрому, делать рисование спрайта панели с привязкой на вид, а сам объект панели делать невидимым и прикреплять как раньше степом. Нет ли иного решения?
Сообщение отредактировал ДАРУТАН - Вторник, 19 Июня 2012, 22:09 |
|
| |
gansterm | Дата: Вторник, 19 Июня 2012, 23:19 | Сообщение # 6 |
частый гость
Сейчас нет на сайте
| Quote (ДАРУТАН) Интерфейс, состоящий из панели слева экрана должен двигаться за видом, комната большая, 10х10 тысяч. Как только мышку подвожу к краю экрана и начинается перемещение, панель запаздывает. Реализовывал передвижение через степ с привязкой на вид. Читая темы, видел, что такой вопрос уже поднимался, вроде бы ЛунарПиксель сообщал там, что возможности для молниеносного перемещения объекта в след виду нет. Но при этом можно реализовать по-хитрому, делать рисование спрайта панели с привязкой на вид, а сам объект панели делать невидимым и прикреплять как раньше степом. Нет ли иного решения? Добавьте код в End steep или через Draw
Сообщение отредактировал gansterm - Вторник, 19 Июня 2012, 23:25 |
|
| |
cosferaps | Дата: Среда, 20 Июня 2012, 00:13 | Сообщение # 7 |
почетный гость
Сейчас нет на сайте
| Было бы проще сделать так: В событии нажатии мыши: if a=1 {vibor=true a=0}; В глобальном событии отпускания мыши(или когда там нужно): vibor=false; a=1; В степе: if vibor {sprite_index=1}else{sprite_index=0};
GMS MC
|
|
| |
ДАРУТАН | Дата: Среда, 20 Июня 2012, 00:45 | Сообщение # 8 |
был не раз
Сейчас нет на сайте
| Quote (gansterm) Добавьте код в End steep или через Draw Добавил привязку кроме как к степу, ещё и к енд степу, не помогло. Через рисование конечно хорошо, но если при этом не делать дополнительно невидимого объекта под рисующимся спрайтом, то на эту панель не выйдет кнопочек и менюшек всяких прикрутить, а для этого она и задумывалась.
|
|
| |
МистерИкс | Дата: Среда, 20 Июня 2012, 09:54 | Сообщение # 9 |
Текстовик
Сейчас нет на сайте
| А если отрисовывать панель сразу с кнопками, а нажатие определять по координатам? (if mouse_x>=... and mouse y>=... and mouse_x<=... and mouse_y<=...)
Три Пути - текстовый квест Not Quite Heroes - пародийная jRPG в разработке
|
|
| |
Saladin | Дата: Среда, 20 Июня 2012, 09:55 | Сообщение # 10 |
заслуженный участник
Сейчас нет на сайте
| Почему не выйдет? Координаты относительно вида они и есть координаты относительно вида. Так же как прикрутил саму панель, прикручивай и кнопки с менюшками.
Анбаннэд. Хэлоу эгин =)
|
|
| |
МистерИкс | Дата: Среда, 20 Июня 2012, 09:58 | Сообщение # 11 |
Текстовик
Сейчас нет на сайте
| Quote (МистерИкс) под рисующимся спрайтом можно не отрисовывать панель, а просто изменение координат засунуть в драв.
Три Пути - текстовый квест Not Quite Heroes - пародийная jRPG в разработке
|
|
| |
ДАРУТАН | Дата: Среда, 20 Июня 2012, 12:38 | Сообщение # 12 |
был не раз
Сейчас нет на сайте
| Quote (МистерИкс) можно не отрисовывать панель, а просто изменение координат засунуть в драв. Не получилось, при запуске панель вообще отсутствует на экране. Может делаю что-то не так. Для события рисования добавил действие с кодом x=view_xview[0] y=view_yview[0], как надо было?
|
|
| |
GameMix | Дата: Среда, 20 Июня 2012, 13:11 | Сообщение # 13 |
старожил
Сейчас нет на сайте
| ДАРУТАН, если в объекте есть событие Draw, то этот объект перестает отрисовывать свой спрайт, и это приходится делать вручную.
Steel Standoff - 2D аркада. Мои статьи
|
|
| |
Qvant | Дата: Среда, 20 Июня 2012, 13:20 | Сообщение # 14 |
почти ветеран
Сейчас нет на сайте
| В draw любого объекта пиши код draw_sprite(имя спрайта,номер кадра спрайта,view_xview[0]+сдвиг по горизонтале,view_yview[0]+ сдвиг по вертикале); и не обязательно делать новый невидимый объект.
|
|
| |
Programmer_MouseMove | Дата: Среда, 20 Июня 2012, 13:29 | Сообщение # 15 |
частый гость
Сейчас нет на сайте
|
|
|
| |
Dva_Kota | Дата: Среда, 20 Июня 2012, 16:16 | Сообщение # 16 |
заслуженный участник
Сейчас нет на сайте
| Первая проблема, вроде бы, решена, но решение не самой рациональное. BrightSpot предлагает не самый лучший вариант. Выполнять каждый шаг у 2000 объектов код - не самая лучшая идея. Ведь спрайт меняется только при нажатии клавиши, вот и проверять нужно в этом событии. Я бы изменил код таким образом:
Create какого-то объекта Code global.target = false;//сначала ни какой id не записан
Нажатие ЛКМ у родительского объекта для провинций Code if (global.target)//если в переменную записан id { global.target.image_index = 0; }
global.target = id//записывает id этого экземпляра (эта провинция выбрана) image_index = 1;
Нажатие ЛКМ у других игровых объектов Code if (global.target)//если в переменную записан id { global.target.image_index = 0; }
global.target =false;//ни какой объект не выбран
Новый пример инвентаря! /20.06.2012/
Energy Wars
|
|
| |
Programmer_MouseMove | Дата: Среда, 20 Июня 2012, 16:46 | Сообщение # 17 |
частый гость
Сейчас нет на сайте
| А кто тут хорошо шарит в С++ ?
|
|
| |
Stalker_Shooter | Дата: Среда, 20 Июня 2012, 17:16 | Сообщение # 18 |
3D XNA'шник
Сейчас нет на сайте
| Quote (Programmer_MouseMove) А кто тут хорошо шарит в С++ ? Quote Конструкторы игр и лёгкие в освоении системы разработки игр » Game Maker
Ты уверен, что написал в нужный раздел?
*Не убегай от снайпера, умрешь уставшим. *Мои статьи...
|
|
| |
BrightSpot | Дата: Среда, 20 Июня 2012, 19:04 | Сообщение # 19 |
заслуженный участник
Сейчас нет на сайте
| Quote (Dva_Kota) Я бы изменил код таким образом код взял с головы на ходу... твой метод реально легче система прокрутит, но в принципе сейчас такие мелкие оптимашки уже не оч актуальны(или мож то у меня слишком сильная машина...)Добавлено (20.06.2012, 19:04) --------------------------------------------- и по поводу перемещения панельки... в степ забивай x=view_xview[0]+?? y=view_yview[0]+?? в драв забивай draw_sprite(sprite_index,-1,view_xview[0]+??,view_yview[0]+??) и не паришся... расшифрую: сама панелька будет продолжать дергатся, но ее изображение станет плавным...
Более мощный компьютер глючит быстрее и точнее.
|
|
| |