Elite Games - Свобода среди звезд!
.
ВНИМАНИЕ!
Наша конференция посвящена космической тематике и компьютерным играм.
Политические вопросы и происходящие в мире события в данный момент на нашем сайте не обсуждаются!

  » Game Maker вопросница | страница 1
Конференция предназначена для общения пилотов. Для удобства она разделена на каналы, каждый из которых посвящен определенной игре. Пожалуйста, открывайте темы только в соответствующих каналах и после того, как убедитесь, что данный вопрос не обсуждался ранее.

Поиск | Правила конференции | Фотоальбом | Регистрация | Список пилотов | Профиль | Войти и проверить личные сообщения | Вход

   Страница 1 из 1
 
Поиск в этой теме:
Канал Игры Мечты: «Game Maker вопросница»
Else
 140 EGP


Рейтинг канала: 1(4)
Репутация: 29
Сообщения: 313
Откуда: Тверская обл.
Зарегистрирован: 08.11.2007
В этом разделе есть много тем, объеденёных общим смыслом - Помогите разработать игру. Давайте в этой теме поможем друг-другу разобраться в хорошой (на мой взгляд) среде програмирования игр Game Maker.

Для начала я хотел задать такой вопрос: Как в этой среде нормально организовать текстовые сообщения. т.е. вывод текстовых сообщений, запрос какой-либо информации (текстовой).

И немного FAQ
Как организовать начальные данные в игре
В играх есть много данных значения которых необходимо учитывать с самого начала, допустим есть классы кораблей: Легкий истребитель, Средний истребитель и т.д. с жестко заданными характеристиками, можно конечно в теле программы при запуске сделать код типа
Код:
Name[1]='Легкий истребитель'
speed[1]=100
cargo[1]=40
Name[2]='Средний истребитель'
speed[2]=80
cargo[2]=65
...


это один, но не самый лучший путь, на мой взгляд лучше применять ini файлы, для этого в папке с игрой создаем файл с расширением ini, например tipship.ini, в блокноте открываем и заносим в него.
Код:
[n_ship]
n=2

[ship1]
name=Легкий истребитель
speed=100
cargo=40

[ship2]
name=Средний истребитель
speed=80
cargo=65


где переменная n - количество описанных кораблей

в самой программе делаем код
Код:

ini_open('tipship.ini');
n=ini_read_real('n_ship','n',1)
 for (i=1;i<=n;i+=1)
 {ShSect='Ship'+string(i);
//Создание массива кораблей
  global.ShName[i]=ini_read_string(ShSect,'Name','Инкогнито');
  global.ShSpeed[i]=ini_read_real(ShSect,'Speed',1);
  global.ShCargo[i]=ini_read_real(ShSect,'Cargo',1);
  }

Этим мы добьемся создания массивов с нужными нам параметров из файла
Преимущества такого метода заключается в том
1)Мы не загружаем код игры лишними кодами,
2)Параметры легкодоступны, даже если не открыта среда разработки, легко добавить новые параметры (надо лишь изменить число n в файле на кол-во доступных кораблей и внести информацию по ним по установленому образцу в файл.
Данные операторы хорошо использовать для организации сэйвов игры, записи текущих настроек и много другого.
_________________
Интересно, а пить водку в полночь, считается после работы или до?

Последний раз редактировалось: Else (16:02 10-01-2008), всего редактировалось 2 раз(а)
    Добавлено: 14:08 10-01-2008   
Kalembas
 1335 EGP


Няшка
Рейтинг канала: 2(24)
Репутация: 263
Сообщения: 18999
Откуда: Санкт-Петербург
Зарегистрирован: 21.03.2003
Else :
n=ini_read_real('n_ship','n',0)
for (i=1;i<=n;i+=1)

Я в глаза не видел Game Maker и не знаю какие в нем предусмотрены договоренности.
Но если я правильно понимаю смысл строки:
n=ini_read_real('n_ship','n',0) - то n будет равно 'n' из инишки, или, если n там не определена (равна NULL), то 0 - по дефолту, согласно последнему аргументу функции ini_read_real.
Так вот, при n = 0 в обычной IDE условие твоего цикла:
for (i=1;i<=n;i+=1) в лучшем случае, приведет к "вечному" циклу, поскольку условие остановки не будет выполнено никогда. Что собственно приведет к крашу твоей программы.
Возможно в языке Game Maker - все иначе, но все таки будь внимательнее с этим. В данном конкретном случае, тебе необходимо в качетсве дефолтного значения ставить "1", поскольку, судя по логике, в твоем массиве всегда будет как минимум один корабль: а именно с именем "Инкогнито" и ТТХ: 1,1.
_________________
Делаешь – не бойся, боишься – не делай, а сделал – не сожалей...
    Добавлено: 15:34 10-01-2008   
Else
 140 EGP


Рейтинг канала: 1(4)
Репутация: 29
Сообщения: 313
Откуда: Тверская обл.
Зарегистрирован: 08.11.2007
Сорри, опечатка вышла.
Исправил
_________________
Интересно, а пить водку в полночь, считается после работы или до?

Последний раз редактировалось: Else (16:15 10-01-2008), всего редактировалось 1 раз
    Добавлено: 15:45 10-01-2008   
Kalembas
 1335 EGP


Няшка
Рейтинг канала: 2(24)
Репутация: 263
Сообщения: 18999
Откуда: Санкт-Петербург
Зарегистрирован: 21.03.2003
Да нет. Это не опечатка, это явно смысловая ошибка, так что:
Kalembas :
будь внимательнее с этим

_________________
Делаешь – не бойся, боишься – не делай, а сделал – не сожалей...
    Добавлено: 15:47 10-01-2008   
Варсик
 545 EGP


Рейтинг канала: 4(81)
Репутация: 117
Сообщения: 4041
Откуда: Москва
Зарегистрирован: 22.12.2002
Кальмарик, не пинай его... Он пытается помочь!

Кстати, а ты случаем не КальМарик? (Щютка)
_________________
WARNING: By reading this post you accept that this post is genius.

Последний раз редактировалось: Варсик (22:49 10-01-2008), всего редактировалось 1 раз
    Добавлено: 22:49 10-01-2008   
Kalembas
 1335 EGP


Няшка
Рейтинг канала: 2(24)
Репутация: 263
Сообщения: 18999
Откуда: Санкт-Петербург
Зарегистрирован: 21.03.2003
Варстоун, с твоего позволения: Калем или Калембас.
Никто никого не пинает. Наоборот, я помогаю человеку не запутаться в своих же ошибках. Одно дело если просто опечатка, другое дело, если идет недопонимание процесса.
В будущем это освободит от лишних часов дебага в поисках неотлавливаемой компилятором смысловой ошибки.
Внимательность, внимательность и еще раз... что?... верно Улыбка
_________________
Делаешь – не бойся, боишься – не делай, а сделал – не сожалей...
    Добавлено: 00:06 11-01-2008   
Else
 140 EGP


Рейтинг канала: 1(4)
Репутация: 29
Сообщения: 313
Откуда: Тверская обл.
Зарегистрирован: 08.11.2007
Каюсь, в моей проге была ошибка, часть кода скопировал и не посмотрел.

Поправил, что-б не вводить в заблуждение.

Так-что, не кому тема не интересна?
_________________
Интересно, а пить водку в полночь, считается после работы или до?

Последний раз редактировалось: Else (13:12 11-01-2008), всего редактировалось 2 раз(а)
    Добавлено: 08:34 11-01-2008   
Jurec
 348 EGP


Ведущий раздела
Рейтинг канала: 4(76)
Репутация: 102
Сообщения: 1441 Заблокирован
Откуда: Seattle
Зарегистрирован: 25.02.2006
Else :
в моей проге была ошибка


Else :
n=ini_read_real('n_ship','n',1)

Мне кажется, или она осталась?
_________________
MOV topka, C++
    Добавлено: 12:51 11-01-2008   
Kalembas
 1335 EGP


Няшка
Рейтинг канала: 2(24)
Репутация: 263
Сообщения: 18999
Откуда: Санкт-Петербург
Зарегистрирован: 21.03.2003
Юрец, не зацикливайся на этом. Все нормально.

Else :
Так-что, не кому тема не интересна?

Отчего же? Если никто не ответил сразу, это не говорит что тема не интересна.
_________________
Делаешь – не бойся, боишься – не делай, а сделал – не сожалей...
    Добавлено: 14:01 11-01-2008   
SEMIONE
 70 EGP


Рейтинг канала: 1(6)
Репутация: 10
Сообщения: 58
Откуда: Москва
Зарегистрирован: 03.02.2006
Ой, наверное опять чушь скажу...
Зачем добавлять корабль в массив, если можно средствами GM делать объект, который будет знать свои тип и запрашивать свои ТТХ, хранящиеся в объекте инициализаторе? С точки зрения GM на мой взгляд это будет рациональнее, чем использование GML для этих целей.
_________________
Бойся красивых интерфейсов!
    Добавлено: 13:45 12-01-2008   
Else
 140 EGP


Рейтинг канала: 1(4)
Репутация: 29
Сообщения: 313
Откуда: Тверская обл.
Зарегистрирован: 08.11.2007
SEMIONE, если можно поподробнее, что имеешь ввиду
_________________
Интересно, а пить водку в полночь, считается после работы или до?
    Добавлено: 08:24 14-01-2008   
SEMIONE
 70 EGP


Рейтинг канала: 1(6)
Репутация: 10
Сообщения: 58
Откуда: Москва
Зарегистрирован: 03.02.2006
В гейммеикер как я помню входил не токо GML, но и понятие конструктора обьектов. Создай невидимый обьект(назови его Info) и запихай его в Roomу, если не ошибаюсь в event "Create" заноси переменные типа таких: Lightfighter_speed, Freighter_armor, Capital1_cargo.
Вот, стартовые значения есть.
Если это типа стратеии то создай "цветочницу", то есть в Create обьекта Unit запихай переменную ShipType. Как юнит отсроился(предположим) сообщай ему значение на ShipType его типа.
Осталось самое простое, реализовать разветвление( Улыбка ) через конструктор обьектов или тотже GML. Тоесть, если ТИП карабля Freighter, то за своим карго и скоростью обращяеться так - info.Freighter_speed и info.Freighter_cargo. Всо с учётом регистра.
P.S. Если опять всо перемешал я и ничо непонятно, то мона в личке спросить.
Ммм... Про тексть... Ох криво у него с этим. Создай обьект какойнить, который перемещаетья вместе с экраном, ну и пусть рисует текст те с масива. 1 - элемент = первая строка, второй элемент = вторая строка ну иногда и подсортировывай почуть-чуть Улыбка
Вот зачем придумали в играх тексты и менюшки? И так моно на глаз догадаться, что на клаве жать и что произошло...
_________________
Бойся красивых интерфейсов!

Последний раз редактировалось: SEMIONE (12:23 17-01-2008), всего редактировалось 1 раз
    Добавлено: 12:15 17-01-2008   
Else
 140 EGP


Рейтинг канала: 1(4)
Репутация: 29
Сообщения: 313
Откуда: Тверская обл.
Зарегистрирован: 08.11.2007
Semione, неплохая идея, тенькс, буду юзать. Улыбка
_________________
Интересно, а пить водку в полночь, считается после работы или до?
    Добавлено: 16:36 17-01-2008   
Else
 140 EGP


Рейтинг канала: 1(4)
Репутация: 29
Сообщения: 313
Откуда: Тверская обл.
Зарегистрирован: 08.11.2007
Организация кнопок

При программировании у меня возникла такая интересная проблема: Надо было сделать несколько кнопок, например "Новая игра", "Продолжить", "Выход" и сделать обработку событий на каждую кнопку. Делать отдельные объекты?, можно и так, но мы легких путей не ищем и врезультате все кнопки обрабатываются одним объектом. Для этого делаем комнату, делаем обьект кнопку и ставим несколько экземпляров объектов в комнате, вниз экрана, при наведении на объект пишится его ID номер, в событиях мыши объекта создаем событие например "no button", те событие происходит когда над объектом проходит мышь, пишем код:
Код:
switch (id)
{ case 100001: room_caption="Новая игра"; break;
  case 100002: room_caption="Продолжить игру"; break
  case 100003: room_caption="Конец игры"; break;}


и в результате наведении мыши нна кнопку мы получаем надпись в заглавии окна, таким - же образом можно организовать обработку нажатий на каждую отдельную кнопку.
Вопрос: как сделать так, чтоб при наведении на кнопку спрайт менялся, например для того чтоб надпись или рисунок на кнопке делался ярче или менял цвет с красного на зеленый.
_________________
Интересно, а пить водку в полночь, считается после работы или до?
    Добавлено: 11:02 21-01-2008   
SEMIONE
 70 EGP


Рейтинг канала: 1(6)
Репутация: 10
Сообщения: 58
Откуда: Москва
Зарегистрирован: 03.02.2006
евент у обьекта MouseOver или както так, деиствие ChangeSprite и на спраит, можно юзать Изменение цвета спраита, но мне эти функции по изменению вида спраитов что-то не гуд, да и зделай лучше обьектами, а то глюков мона набрать много, можно ищо добавить анимацию того как она становиться ярче, тоесть в Шаге субимажу прировнять к переменной какойнить, а потом при маус овер увеличить на 1, а сбавлять её в шаге умножением на 0.95, вообщем играться можно зачотно с числами Улыбка
_________________
Бойся красивых интерфейсов!
    Добавлено: 11:16 21-01-2008   
ZEUStiger
 67 EGP


Рейтинг канала: 1(3)
Репутация: 12
Сообщения: 112
Откуда: Украина - Ужгород
Зарегистрирован: 08.06.2006
Ух ты!.. Даже и не заметил, что темка появилась...

Во-первых, я б очень порекомендовал при движении экрана интерфейс (кнопки, меню, текст и т.д.) делать не объектами со спрайтами, а отрисовывать спрайты ДРАВингом. Проблема в том, что движение экрана судя по всему обрабатывается уже после перемещения объектов, и в результате будет, что спрайты отстают от экрана. С рисованием такого не будет.

Тепер про организацию кнопок. Много спрайтов маздай. Улыбка . Если кнопка не анимирована, то можно закинуть несколько вариантов кнопки в один спрайт, как анимацию. Сама анимация останавливается image_speed=0. Плюс ко всему есть переменная image_blend отвечающая за цвет спрайта. При c_white - он нормального цвета, при c_black - чёрный. Другие цвета будут менять цвет спрайта. Сам спрайт можно менять переменной sprite_index, получать название спрайта - sprite_get_name(sprite_index)

Else, у тебя в коде один большой глюк. id указывает на id объекта, с которого оно (ид) вызивается, никак не ид объекта под курсором. Объект под курсором вызивается функцией instance_position(...) или instance_place(...)

Ну и напоследок, рекомендую создать скрипт с названием например mouse_inside_region и там прописать такое:
Код:
if(mouse_x>=argument0&&mouse_x<=argument1&&mouse_y>=argument2&&mouse_y<=argument3){return true}else{return false}

Потом вызивать так:
Код:
if(mouse_inside_region(x-16,y,x+256,y+32)){...}


добавлено спустя 29 минут:
А вот кстати вариант решения кнопок меню:
В create:
Код:
text[0]='New Game';action[0]='room_goto(RoomGame)'
text[1]='Load Game';action[1]='room_goto(RoomLoad)'
text[2]='Options';action[2]='room_goto(RoomOpt)'
text[3]='Exit';action[3]='game_end()'

btn_w=128
btn_h=32
btn_selected=-1
btn_max=3

В step:
Код:
for(i=1;i<=btn_max;i+=1){if(mouse_inside_region(x,y+(i-1)*btn_h,x+btn_w,y+(i)*btn_h)&&mouse_button=mb_left){execute_string(action[i])}}

B draw:
Код:
for(i=1;i<=btn_max;i+=1){draw_text(x,y+(i-1)*btn_h,text[i])}


Надеюсь понятно, что весь прикол в том, что действие при нажатии мы записываем в значение переменной, а потом выполняем то, что там написано Хы...
_________________
Что бы учёные не делали, всегда найдутся люди которые превратят любое изобретение в оружие.

Последний раз редактировалось: ZEUStiger (20:37 24-01-2008), всего редактировалось 1 раз
    Добавлено: 20:37 24-01-2008   
Else
 140 EGP


Рейтинг канала: 1(4)
Репутация: 29
Сообщения: 313
Откуда: Тверская обл.
Зарегистрирован: 08.11.2007
ZEUStiger :
Else, у тебя в коде один большой глюк. id указывает на id объекта, с которого оно (ид) вызивается, никак не ид объекта под курсором. Объект под курсором вызивается функцией instance_position(...) или instance_place(...)


ZEUStiger, а в чём конкретно может проявляется глюк? Есть объект "кнопка", в игре присутствуют несколько таких обьектов, событие мыши "No buttom" принадлежит объекту, соответственно обрабатывается ID объекта, а switch выбирает какой конкретно объект вызвал событие. Такая конструкция работает, проверял. Или есть что-то, что было не учтено? И что может вызвать глюк. Подозрение.

Код:
switch(instance_position(mouse_x,mouse_y,menubutton))

Ага, попробую так.
_________________
Интересно, а пить водку в полночь, считается после работы или до?

Последний раз редактировалось: Else (09:58 25-01-2008), всего редактировалось 1 раз
    Добавлено: 09:38 25-01-2008   
ZEUStiger
 67 EGP


Рейтинг канала: 1(3)
Репутация: 12
Сообщения: 112
Откуда: Украина - Ужгород
Зарегистрирован: 08.06.2006
id - это id объекта, с которого он вызивается. То есть, если ты вызываеш его из под к примеру obj_mouse, то он и введёт значение ид этого obj_mouse.

пиши так:
Код:
switch(instance_position(mouse_x,mouse_y,menubutton))

Создай объект menubutton и поставь всем кнопкам parent: на него.
_________________
Что бы учёные не делали, всегда найдутся люди которые превратят любое изобретение в оружие.
    Добавлено: 09:46 25-01-2008   
Канал Игры Мечты: «Game Maker вопросница»
 
  
Показать: 
Предыдущая тема | Следующая тема |
К списку каналов | Наверх страницы
Цитата не в тему: Мы так не договаривались нифига! Тока я, панимаишь, в образ вошла и фсе такое, а мне тут заявляют, что кина не будет! (возмущается Nadin)

  » Game Maker вопросница | страница 1
Каналы: Новости | Elite | Elite: Dangerous | Freelancer | Star Citizen | X-Tension/X-BTF | X2: The Threat | X3: Reunion | X3: Terran Conflict | X Rebirth | X4: Foundations | EVE Online | Orbiter | Kerbal Space Program | Evochron | VoidExpanse | Космические Миры | Онлайновые игры | Другие игры | Цифровая дистрибуция | play.elite-games.ru | ЗВ 2: Гражданская война | Творчество | Железо | Игра Мечты | Сайт
   Дизайн Elite Games V5 beta.18