Среда, 24 Апреля 2024, 02:39

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Конструкторы игр и лёгкие в освоении системы разработки игр » Game Maker » Вид Карты (Центрирование вида карты кликом мыши)
Вид Карты
KiteKatДата: Четверг, 22 Июня 2017, 23:29 | Сообщение # 1
почетный гость
Сейчас нет на сайте
Как сделать чтобы кликнув по углу вида карты на экране, вид сместился к месту клика мыши?

пример: civilization 1
TLTДата: Пятница, 23 Июня 2017, 15:04 | Сообщение # 2
Сейчас нет на сайте
Прописать привязку координаты к карте и по клику менять X/Y координат камеры.

Дао, выраженное словами, не есть истинное Дао.
KiteKatДата: Воскресенье, 09 Июля 2017, 19:01 | Сообщение # 3
почетный гость
Сейчас нет на сайте
TLT, конкретной координаты у меня нет. Нужно чтобы по клику мыши в любую координату экран ( комната) центрировалась там, где был клик мыши.

Если кто знает... поделитесь, как прописать коды! Ищу примеры работы с камерой в игре 2d.

В подобных играх 2d-шных видел такие примеры передвижения камеры:

1) перетаскивание вида камеры с помощью мыши. (т.е. удерживая кнопку мыши мы двигаем курсор по комнате и наш вид меняется )
Этот пример я нашел:
В step прописываем:

if (mouse_check_button_pressed(mb_left)) {
drag_x = mouse_x
drag_y = mouse_y
}

if (mouse_check_button(mb_left)) {

view_xview = drag_x - (mouse_x - view_xview)
view_yview = drag_y - (mouse_y - view_yview)

view_xview = max(0, min(view_xview, room_width - view_wview))
view_yview = max(0, min(view_yview, room_height - view_hview))
}

2) нужен такой пример: чтобы нажав на кнопку или a , w, s, или d камера сдвигала плавно вид комнаты в соответствующем направлении.
так как я новичок, то я создал прозрачный спрайт, задал ему невидимость(иначе он виден как белый квадрат..почему-то...) и задал ему привязку к камере и назначил буквы на клавиатуре.
Вообще: мне бы хотелось узнать: есть ли способ такого перемещения простым кодом, без привязки к объекту? (если вы знаете, напишите пожалуйста)

3) и такой пример который я изначально искал: что бы можно было кликнуть мышью по любому месту на экране и эта точка (где был клик) была бы центральной точкой координат экрана (камеры) : камера бы сдвигалась в этом направлении.

p.s. - Используя второй вариант ( и первый тоже...) столкнулся с проблемой. У есть миникарта на коричневой подложке. Как только я сдвигаю невидимый спрайт , мини карта, привязанная к координатам остается в углу экрана и "двигается" с камерой. А вот подложка на которой была размещена миникарта остается за пределами камеры :(
Как это можно исправить? Нужно чтобы подложка оставалась именно до миллиметра на том месте где она установлена!


Сообщение отредактировал KiteKat - Воскресенье, 09 Июля 2017, 19:15
ИнтернетДата: Воскресенье, 09 Июля 2017, 19:46 | Сообщение # 4
постоянный участник
Сейчас нет на сайте
По 2-ому пункту приходит в голову самый примитивный вариант решения проблемы.
Код
var; speed_dwig=5
switch(keyboard_key)
   {
case ord('W'): view_yview[0]+=speed_dwig break
case ord('A'): view_xview[0]-=speed_dwig break
case ord('D'): view_xview[0]+=speed_dwig break
case ord('S'): view_yview[0]-=speed_dwig break
   }

Дальше доводи до ума.


Сообщение отредактировал Интернет - Воскресенье, 09 Июля 2017, 19:55
KiteKatДата: Воскресенье, 09 Июля 2017, 22:26 | Сообщение # 5
почетный гость
Сейчас нет на сайте
Интернет, спасибо) проверю) а по поводу моего вопроса по подложке к миникарте, я кажется вспомнил, где видел аналог :) Спасибо вам и на том, чем сумели помочь =)
ИнтернетДата: Воскресенье, 09 Июля 2017, 22:46 | Сообщение # 6
постоянный участник
Сейчас нет на сайте
Ну не зря же я это делал, дерзай.
По 3-ому пункту. пример передвижения вида в место клика
KiteKatДата: Понедельник, 10 Июля 2017, 18:07 | Сообщение # 7
почетный гость
Сейчас нет на сайте
Интернет, ого, спасибо и за третий вариант :) я его опробую!

У меня тут такое дело... Я даже не знаю что и как: или нужен какой-то тут код, или просто в программе такого не заложено... А если и нужен то я не думаю, что кто-то поймёт куда вписывать? Потому что лично для меня это вообще какая-то абракадабра!
В общем, у меня есть комната (долго искал как сделать, чтобы интерфейс не отставал от движения камеры -нашел, теперь мучаюсь) , в комнате слева панель интерфейса (голубая), на которой ,пока что, только миникарта. Вверху у меня бекграундом просто наложена коричневая панель ( я ее потом переделаю). Получается так: я веду камеру вправо, на экране у меня статично ( на положенном месте) голубая панель интерфейса, а вот уже на миникарте(!) эта панель движется за видом перекрывая ландшафт и всё что на нем! \

и почему я говорю, что вряд ли какой-то код поможет, ведь миникарту я делал в создании видов ( там же кодов прописывать не нужно!) так что я даже и не знаю, сможете ли вы дать мне какой-то внятный ответ... (скриншот добавляю)http://s1.uploadpics.ru/images/byqredt8Of.jpg

я вот думаю: может ли быть такое если виды перепутаны? буду проверять

не. с видами не связано вроде..


Сообщение отредактировал KiteKat - Понедельник, 10 Июля 2017, 21:18
ИнтернетДата: Вторник, 11 Июля 2017, 00:17 | Сообщение # 8
постоянный участник
Сейчас нет на сайте
Ну правильно, панель же двигается в комнате, а миникарта, как я понимаю, реализована просто растяжением 2-ого вида на всю комнату, следовательно все передвижения объектов в ней видны. 1-ый же вид это типо только видимая часть комнаты.
Вывод: изменить принцип работы миникарты.
P.s Просто отрисовывай голубой прямоугольник только в 1-ом виде.



Сообщение отредактировал Интернет - Вторник, 11 Июля 2017, 00:24
SandarДата: Вторник, 11 Июля 2017, 06:53 | Сообщение # 9
почетный гость
Сейчас нет на сайте
Пошли к нам, Povstalez тебя поднатаскает, у него есть чему поучиться, поверь ;)
Вот это он за 10 часов сделал :)
*почти завидую его мастерству
KiteKatДата: Вторник, 11 Июля 2017, 12:43 | Сообщение # 10
почетный гость
Сейчас нет на сайте
Интернет, пример с передвижением кликом тот что надо! спасибо =) На просторах интернета это, так сказать, эксклюзив! :)
Но вот по поводу ответа на вопрос про панельку... "P.s Просто отрисовывай голубой прямоугольник только в 1-ом виде."
- я не в видах отрисовывал, да и не знаю как это сделать в видах? Там же дается комната и мы всё в комнате расставляем, а виды мы только меняем, поэтому... что-либо поменять или тем более поставить в виде.. я не знаю, можно ли такое?..
"Самое главное: не используй "пустые" объекты только ради декораций. "
ну, эта панель мне нужна в будущем, чтобы расставить на ней показатели, кнопочки... (если получиться). так что, она далеко не декоративная =)

Добавлено (11 июля 2017, 12:43)
---------------------------------------------
Sandar, к нам. это куда? и что "это" он сделал за 10 часов? :) И, что вы там делаете?

SandarДата: Вторник, 11 Июля 2017, 13:20 | Сообщение # 11
почетный гость
Сейчас нет на сайте
Сори, в 10 окнах фигачу, контрл ц нажал, а контрл в забыл, или форум лаганул, с ним это бывает.
Вобщем исправляюсь ;)
https://gcup.ru/forum/9-98644-1

Добавлено (11 июля 2017, 13:20)
---------------------------------------------
Блин... к нам забыл, еще раз исправляюсь ;)
https://game-creating.nethouse.ru

KiteKatДата: Среда, 12 Июля 2017, 18:23 | Сообщение # 12
почетный гость
Сейчас нет на сайте
ребята... у меня вопрос! ьольшой и , наверное, сложный! Я всё ещё копаюсь с интерфейсом игры который бы не гулял по миникарте и.. наткнулся на просторах инета на некую функцию ...GUI . Я уже почитал что это "GUI (Graphical user interface - графический интерфейс пользователя (ГИП)) – это разновидность пользовательского интерфейса, в котором все элементы (кнопки, меню, пиктограммы, списки) представленые пользователю на дисплее выполнены в виде картинок, графики. В отличие от интерфейса командной строки в GUI пользователь имеет произвольный доступ к видимым объектам с помощью устройств ввода.".
Однако... по-проще можете растолковать мне? :) Это именно то, что мне нужно или нет? Я хоть ищу в этом направлении? Асобственно говоря нужно мне вот что ( см. картинку) http://s1.uploadpics.ru/images/ZyOaEgVdOf.jpg
puksusДата: Среда, 12 Июля 2017, 20:00 | Сообщение # 13
Пчёлка Зоя
Сейчас нет на сайте
Ну я гейм мейкер в жизни не видел и не знаю, как там дела обстоят, да и вопрос не особо понял, но если ты спрашиваешь, как делать миникарту, то
Я бы сделал её пустой картинкой по размеру миникарты (рабочая область - та часть, в которой собственно рисуется миникарта) и картинкой с рамкой. При выводе графики сначала выводим рамку, затем рабочую область посреди рамки.
Пусть наш игровой мир разделён на тайлы. Каждый тайл имеет определённый тип (земля, вода, горы, юнит, ещё что-то). Каждому такому типу тайла поставим в соответствие свой цвет (тот цвет, которым ты хочешь обозначать на миникарте данный тип тайла, например, вода синяя).
Вначале наша рабочая область пустая. Сразу после загрузки\генерирования уровня мы пробегаем по каждому тайлу и смотрим. Этот тайл такого-то типа, значит должен быть такого-то цвета. Отлично, заносим в соответствующий пиксель миникарты данный цвет.
Кроме того, карта может меняться - юниты могут двигаться. В таком случае мы пересчитываем цвет для пикселя, соответствующего предыдущему положению юнита и пиксель, соответствующий текущему положению юнита. И так для каждого юнита, который двигался в данном кадре.
Можно, конечно, пересчитывать всё с нуля каждый кадр, но работать будет медленнее.
Если миникарта вмещает только часть карты или карта не вмещается целиком на миникарту, то тут надо будет ещё немного посидеть и подумать над формулами. При движении камеры по миру также надо перерисовывать миникарту.
Если игра пошаговая - то тогда можно просто заново формировать миникарту на каждом ходу и не париться.
Если нужно добавить возможность тыком на миникарту центрировать камеру на данном месте - то тут ещё будет небольшое колдовство с преобразованием координат.

Ну а для рисовки текста и кнопок наверняка существуют встроенные функции и структуры.


https://vk.com/beezoya

Сообщение отредактировал puksus - Среда, 12 Июля 2017, 20:01
ИнтернетДата: Среда, 12 Июля 2017, 20:48 | Сообщение # 14
постоянный участник
Сейчас нет на сайте
Может проще попробовать реализовать через сурфейс?
Но с передвижением юнитов по миникарте придётся повозиться.


Сообщение отредактировал Интернет - Среда, 12 Июля 2017, 20:49
KiteKatДата: Четверг, 13 Июля 2017, 16:33 | Сообщение # 15
почетный гость
Сейчас нет на сайте
Ничего пока не получается... Но я нашел пару примеров где эта диковинка реализована:

пример GM варкрафта\ https://gcup.ru/load/source/gml/iskhodnik_rts_igry_the_dark_ages_game_maker/28-1-0-937

причем интересно что в варкрафте хотя бы есть баграунд main_panel. но как автор сего исходника применял к виду на карте эту панель я не понял :( но явно что этот вариант ее применения был невидим на миникарте!

и пример GM героем меча и магии/ http://game-maker.ru/infusio....id=1090

Однако в исходниках я так и не понял, где и как реализована миникарта и каким образом поставлен интерфейс? :( просто там не подписано ничего из того что мне требуется...

облазил всё... =(

Если вы знаете какие-то еще похожие примеры -исходники, то прошу вас скинуть ссылку! Я очень хотел бы разобраться в этом вопросе.


Сообщение отредактировал KiteKat - Четверг, 13 Июля 2017, 17:21
ИнтернетДата: Четверг, 13 Июля 2017, 18:40 | Сообщение # 16
постоянный участник
Сейчас нет на сайте
Вот
KiteKatДата: Четверг, 13 Июля 2017, 18:41 | Сообщение # 17
почетный гость
Сейчас нет на сайте
в принципе понял... сам докумекал ;)

понял-то понял... но. не получается :(

* Понял что нужно скрыть на одном из видов объект, так вот, если я хочу скрыть на одном из видов то, что есть на другом виде, как правильно написать код? как скрывать некоторые объекты(интерфейс, надписи и т.п.) в виде 1
но отображать их в виде 0.

что не так ? Я прописываю это всё в объекте obj_panel в событии draw . Если я хочу чтобы в виде 1 не был виден obj_panel, то что мне прописать, если конкретное "имя" я писать не могу, так как не задано значение. Если я пишу background, то - у меня пропадает один из видов ... я не понимаю :(

что же нужно прописать тогда?

if view_visible[1]{
background_visible=true;
view_visible[1]=false
}

p.s. прочел что языку GML учатся 2 -3 года... видать долго ещё буду вникать :( эхх...





Сообщение отредактировал KiteKat - Четверг, 13 Июля 2017, 23:24
ИнтернетДата: Пятница, 14 Июля 2017, 00:05 | Сообщение # 18
постоянный участник
Сейчас нет на сайте
Цитата KiteKat ()
f view_visible[1]{
background_visible=true;
view_visible[1]=false
}

Интересно как это работает!?

Цитата KiteKat ()
прочел что языку GML учатся 2 -3 года... видать долго ещё буду вникать :( эхх...

Эм..... откуда такие точные данные?? А вдруг на час больше или меньше B)

Если хочешь чтобы объект отображал свой спрайт пока view_visible[1]=true то пиши примерно вот так.
Код
if view_visible[1]=true
   {draw_sprite(sprite_index,0,x,y)}


P.s можешь ещё с view_current по мухлевать


Сообщение отредактировал Интернет - Пятница, 14 Июля 2017, 00:40
KiteKatДата: Пятница, 21 Июля 2017, 00:52 | Сообщение # 19
почетный гость
Сейчас нет на сайте
Вопрос решен! спасибо, LunarPixel :)

Добавлено (21 июля 2017, 00:52)
---------------------------------------------
доброго всем вечера . или у кого что... подскажите. есть ли какой скрипт. чтобы сделать на миникарте рамку вида? см.картинку http://s1.uploadpics.ru/images/-y24hlbJKf.jpg

Сообщение отредактировал KiteKat - Пятница, 14 Июля 2017, 19:36
USeR14Дата: Пятница, 21 Июля 2017, 09:14 | Сообщение # 20
RUSOriginal Studio
Сейчас нет на сайте
Это обычный не закрашенный прямоугольник. draw_rectangle.



Форум игроделов » Конструкторы игр и лёгкие в освоении системы разработки игр » Game Maker » Вид Карты (Центрирование вида карты кликом мыши)
  • Страница 1 из 1
  • 1
Поиск:

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