Game Maker - создание игр | HellRoom Games
Май 13, 2025, 09:16:46 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
Новости:
 
   Начало   Game Maker Помощь Правила форума Поиск Календарь Войти Регистрация  
Ссылки на события
  • Новый урок в школе GML: Сентябрь 04, 2011 - Сентябрь 07, 2011
Страниц: [1]   Вниз
  Печать  
Автор Тема: Урок 11. Практические советы. ПКР№2  (Прочитано 15780 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Hummer
scio me nihil scire
GM Pro user
*

Репутация: 335
Offline Offline

Пол: Мужской
Награды:
2000 сообщений!За постоянность! [100 дней на форуме]За лояльность! [+300 репутации]Знаток Game Maker!За помощь новичкам!
API: Game Maker 8.0 Pro
Деятельность: GML, С++, OpenGL, Java. Бывший Директор бывшей школы GML
Сообщений: 2573


« : Сентябрь 04, 2011, 10:38:22 »

Доброго времени суток! Начнём одиннадцатую серию нашей учебной эпопеи. Эта серия особенная. Она завязывает интригу перед концом второго сезона. Проще сказать, сегодня мы будем готовиться к контрольной работе.
Часть полезных советов была в уроке № 9. Напомню их

1) Создание объекта относительно краёв комнаты. Используются константы room_width, room_height. Например
Код:
instance_create(room_width-5, room_height/2, obj)

2) Создание объекта относительно положения мыши. Используются константы mouse_x, mouse_y. Например
Код:
instance_create(mouse_x+7, mouse_y-4, obj)

3) Создание n объектов через одинаковое расстояние t начиная с m по горизонтали
Код:
for(i=0; i<n; i+=1)
{
instance_create(m+i*t, y, obj)
}
3.1) -- по вертикали
Код:
for(i=0; i<n; i+=1)
{
instance_create(x, m+i*t, obj)
}
PS : если надо в обратном порядке, то минус заменяем на плюс

4) Создание объекта в случайном месте.
Код:
instance_create(random(room_width), random(room_height), obj)

5) Создание случайного объекта
Код:
instance_create(xx, yy, choose(obj1, obj2, obj3 ... obj16))
ИЛИ (на более 16 объектов)
Код: (Create)
object[0]=obj0
object[1]=obj1
object[n]=objn
...
Код: (Нужное событие)
instance_create(xx, yy, object[irandom(n)])

6) obj1 сталкивается с obj2, при этом obj1 должен исчезнуть
Код: (Collision WITH obj2 (то есть у obj1))
with(self)
{
instance_destroy()
}
ИЛИ
Код: (Collision WITH obj1 (то есть у obj2))
with(other)
{
instance_destroy()
}

7) Уничтожение объекта, если тот ниже нижней границы окна (например если игрок упал в пропасть в платформере)
Код: (Step)
if(y>room_height)
{
instance_destroy()
}

8) Завершить или перезапустить игру, если кончились жизни (или здоровье)
Код: (Step)
if(<переменная, отвечающая за здоровье или жизни><=0)
{
game_end()//или game_restart()
}


Теперь поговорим о манёврах с переменными. В прошлом подобном уроке (№5) я поведал о способе булевых переменных. Напомню, этот способ применяется, если вы хотите, чтобы отдельные участки кода выполнялись в нужное вам время. Новый способ понадобится вам для реализации примерно следующего запроса.
Цитировать
Если <определённое событие> повторяется n раз...
Собственно это счётчик событий с проверкой.
Например, если игрок нажал пробел 10 раз, то показываем сообщение "Вы нажали пробел 10 раз". Видимо нам придётся считать события, а именно нажатие пробела.
Заведём переменную, с помощью которой мы будем считать
Код: (Create объекта-контроллера)
count=0
А при нажатии пробела будем её инкрементировать (увеличивать на 1)
Код: (Key Press Space объекта-контроллера)
count+=1
Учитесь перестраивать запросы, учитывая то, что уже сделали. Например запрос "Если нажали пробел 15 раз...", учитывая код, который мы только что написали будет звучать так "Если count равна 15..."//нажали пробел заменили на count, а дальше дело русского языка
Этот запрос вы уже должны уметь реализовывать
Код: (Key Press Space (продолжение))
if(count==15)//почему стоит ==? Все ответы в третьей четверти! :)
{
show_message("Вы нажали на пробел 15 раз!");
count=0//обнуляем счётчик для многоразового использования
}
Есть и другой способ. Например, в Create объявить переменную count равную 15, а в нажатии пробела её декрементировать (уменьшать на 1) (не забудьте проверять её на равенство нулю if(count==0))
У этого способа есть несколько плюсов. Например, не надо бегать по событиям, если вы захотите изменить число, а достаточно зайти в Create и изменить его там. Но вообще, эти способы ничем не отличаются.

Тот же способ можно расширить с предварительной проверкой. Возьмём наш пример и усовершенствуем. Например, если игрок нажал пробел 3 раза, то мы запрашиваем у него число и потом выводим его; если 7 раз, то показываем сообщение "Пробел нажат 7 раз. Осталось ещё 3"; если 10 раз, то завершаем игру.
Начнём реализацию
Код: (Create)
count=0;
max_count=10;//максимальное количество при счёте (для удобства изменения)
Код: (Key Press <Space>)
count+=1;
if(count==3)
{
a=get_integer('Введите число', 0)//заметьте, 0 без кавычек! буду снижать оценки за такую халатность!
show_message(string(a))//не забываем про string()
}
if(count==7)
{
show_message("Вы нажали на пробел "+string(count)+" раз. Осталось ещё "+string(max_count-count)+" раз")//разберитесь с этим кодом
}
if(count==max_count)
{
game_end();
}

Вот так. Научитесь видеть ситуации, где можно применять этот способ. Он универсален и очень полезен.
Что ж, удачи вам. Желаю вас увидеть на контрольной работе, которая состоится 11 сентября.
« Последнее редактирование: Сентябрь 06, 2011, 14:41:14 от Hummer » Записан

Есть вещи, которые нельзя объяснить. Для всего остального есть Справка
Рандом-рандом-рандомище (с)

C++ & OpenGL
Михаил144
Участник
****

Репутация: 21
Offline Offline

Пол: Мужской
API: Game Maker 8.0 Pro
Сообщений: 181

Помни где ты живешь - Цив-я Брато и Отцеубийства


WWW
« Ответ #1 : Сентябрь 04, 2011, 16:49:03 »

Цитировать
if(count==15)//почему стоит ==? Все ответы в третьей четверти! :)
Насколько я думал == (два раза равно) - это равносильно ! и означает "не равно"
или я не прав!
Записан

Да пройдутся Святые Катары по земле своими огненными жезлами и возжгутся сердца миллионов огнем чистой Любви....
OverBoy
GM Pro user
*

Репутация: 130
Offline Offline

Пол: Мужской
Награды:
За постоянность! [100 дней на форуме]За победу в новогоднем конкурсе [месяц тематических игр - 2012] (1 место)
API: Game Maker 8.0 Pro
Сообщений: 448



WWW
« Ответ #2 : Сентябрь 04, 2011, 17:04:09 »

"==" - это что-то типа оператора сравнения.
В С++ он используется в проверках. В данном случае сравнивается count и число 15. Если написать if(count=15), то переменной count присвоится значение 15. Но это в С++.В ГМ этот оператор сильной роли не играет. Хотите пишите "=", а хотите пишите "==", разницы не будет))
Записан

Михаил144
Участник
****

Репутация: 21
Offline Offline

Пол: Мужской
API: Game Maker 8.0 Pro
Сообщений: 181

Помни где ты живешь - Цив-я Брато и Отцеубийства


WWW
« Ответ #3 : Сентябрь 04, 2011, 17:43:34 »

"==" - это что-то типа оператора сравнения.
В С++ он используется в проверках. В данном случае сравнивается count и число 15. Если написать if(count=15), то переменной count присвоится значение 15. Но это в С++.В ГМ этот оператор сильной роли не играет. Хотите пишите "=", а хотите пишите "==", разницы не будет))
Благодарю, что просветили по поводу С++, думаю все таки между = и == в гм есть разница, иначе нет смысла менять = на ==.
Думаю, кто то ещё прокомментирует, уже самому интересно стало.
Записан

Да пройдутся Святые Катары по земле своими огненными жезлами и возжгутся сердца миллионов огнем чистой Любви....
Hummer
scio me nihil scire
GM Pro user
*

Репутация: 335
Offline Offline

Пол: Мужской
Награды:
2000 сообщений!За постоянность! [100 дней на форуме]За лояльность! [+300 репутации]Знаток Game Maker!За помощь новичкам!
API: Game Maker 8.0 Pro
Деятельность: GML, С++, OpenGL, Java. Бывший Директор бывшей школы GML
Сообщений: 2573


« Ответ #4 : Сентябрь 04, 2011, 18:24:14 »

Читать умеем? Все объяснения в третьей четверти. На самом деле между ними есть весомая разница. Давайте наберёмся терпения и прочитаем мои комментарии уже в начале октября по этому поводу.
Записан

Есть вещи, которые нельзя объяснить. Для всего остального есть Справка
Рандом-рандом-рандомище (с)

C++ & OpenGL
Dmi7ry
Гл. Администратор
*

Репутация: 1379
Offline Offline

Пол: Мужской
Награды:
5000 сообщений!За постоянность! [200 дней на форуме]За лояльность! [+1000 репутации]За помощь в развитии форума!Знаток Game Maker!За помощь новичкам!
API: GameMaker Studio Master
Деятельность: Code, design
Сообщений: 6626



WWW
« Ответ #5 : Сентябрь 06, 2011, 08:48:38 »

1) Создание объекта относительно краёв окна. Используются константы room_width, room_height. Например
Код:
instance_create(room_width-5, room_height/2, obj)
Не относительно краёв окна, а относительно краёв комнаты.
Записан

- А какой, собственно, командой процессора колобок ест черта?
- Командой EAT...
Справка и FAQ в правом верхнем углу...
Hummer
scio me nihil scire
GM Pro user
*

Репутация: 335
Offline Offline

Пол: Мужской
Награды:
2000 сообщений!За постоянность! [100 дней на форуме]За лояльность! [+300 репутации]Знаток Game Maker!За помощь новичкам!
API: Game Maker 8.0 Pro
Деятельность: GML, С++, OpenGL, Java. Бывший Директор бывшей школы GML
Сообщений: 2573


« Ответ #6 : Сентябрь 06, 2011, 14:40:59 »

ок
Записан

Есть вещи, которые нельзя объяснить. Для всего остального есть Справка
Рандом-рандом-рандомище (с)

C++ & OpenGL
Lunatiq
Новичок
*

Репутация: 0
Offline Offline

API: GameMaker 8.1 Lite
Сообщений: 1



« Ответ #7 : Июль 16, 2015, 11:45:03 »

1) Создание объекта относительно краёв окна. Используются константы room_width, room_height. Например
Код:
instance_create(room_width-5, room_height/2, obj)
Не относительно краёв окна, а относительно краёв комнаты.
как сделать относительно окна?
Записан
AndrewVideoGames
Главный Модератор
*

Репутация: 821
Offline Offline

Пол: Мужской
Награды:
За постоянность! [500 дней на форуме]За лояльность! [+750 репутации]5000 сообщений!За помощь новичкам!
API: GameMaker Studio Pro
Деятельность: А я кто? А я руководитель!
Сообщений: 7316



« Ответ #8 : Июль 16, 2015, 12:41:17 »

1) Создание объекта относительно краёв окна. Используются константы room_width, room_height. Например
Код:
instance_create(room_width-5, room_height/2, obj)
Не относительно краёв окна, а относительно краёв комнаты.
как сделать относительно окна?
Вы понимаете разницу между комнатой и окном? Если в игре используются виды, то вместо room_width поставьте view_wview, если комната заполняется все окно, то в этом нет нужды.

P.S. Теме уже почти четыре года.
Записан
luden
GM Pro user
*

Репутация: 151
Offline Offline

Награды:
500 сообщений!За постоянность! [200 дней на форуме]
API: GameMaker Studio Master
Сообщений: 704


« Ответ #9 : Июль 16, 2015, 12:51:42 »

Если в игре используются виды, то вместо room_width поставьте view_wview,
Не только, ещё и точку отсчёта. Так что будет выглядить как - instance_create(view_xview[0] + view_wview[0] / 2 - 5, view_yview[0] + view_hview[0] / 2, obj)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

HellRoom Games © 2006-2012 All Rights Reserved
Powered by SMF 1.1.21 | SMF © 2013, Simple Machines
Страница сгенерирована за 0.173 секунд. Запросов: 33.