Понедельник, 14 Октября 2024, 08:47

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Выбор объекта с последующим отпусканием.
ДАРУТАНДата: Вторник, 19 Июня 2012, 19:31 | Сообщение # 1
был не раз
Сейчас нет на сайте
Есть большое число (ок. 2000) объектов - провинции на карте, у них есть родительский объект (может поможет в решении проблемы).
При нажатии ЛКМ по определённой провинции её спрайт меняет кадр на 1.
При нажатии на какую-либо другую провинцию, с ней происходит тоже самое, но у предыдущей кадр спрайта возвращается на 0.
При нажатии ЛКМ на других игровых объектах, при условии выбора до этого какой-то провинции, у неё также кадр возвращается на 0.

Проблема заключается в том, что не могу понять как это реализовать в коде, конкретно отмену/снятие выделения(смена кадра) у предыдущего объекта при выборе новой провинции.


Сообщение отредактировал ДАРУТАН - Вторник, 19 Июня 2012, 19:33
GameMixДата: Вторник, 19 Июня 2012, 20:18 | Сообщение # 2
старожил
Сейчас нет на сайте
ДАРУТАН, сохраняй id предыдущей провинции в переменную a, например. Когда нужно сменить кадр, пиши код:
Code
a.image_index = 0;


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 (МистерИкс)
можно не отрисовывать панель, а просто изменение координат засунуть в драв.

Не получилось, при запуске панель вообще отсутствует на экране. biggrin
Может делаю что-то не так. Для события рисования добавил действие с кодом 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
частый гость
Сейчас нет на сайте
happy
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]+??)
и не паришся...
расшифрую: сама панелька будет продолжать дергатся, но ее изображение станет плавным...



Более мощный компьютер глючит быстрее и точнее.
  • Страница 1 из 1
  • 1
Поиск:

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