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

Войти
Новости:
 
   Начало   Game Maker Помощь Правила форума Поиск Календарь Войти Регистрация  
Страниц: 1 2 3 [4] 5 6 ... 9   Вниз
  Печать  
Автор Тема: Оптимизация  (Прочитано 70112 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Dva_Kota
Гл. Администратор
*

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

Пол: Мужской
Награды:
3000 сообщений!За постоянность! [500 дней на форуме]За лояльность! [+500 репутации]Настоящий игродел!Тру Админ :D1 место за игру: Energy Wars (Конкурс Золотые Руки)...
API: GameMaker Studio Standard
Сообщений: 3245



« Ответ #45 : Октябрь 21, 2010, 13:16:30 »

Я обычно так делал:
Код:
newchance = ceil(random(100));

if newchance > 0 && newchance <= 21  //21%
{операторы1}

if newchance > 21 && newchance <= 48  //48-21=27%
{операторы2}

if newchance > 48 && newchance <= 85  //85-48=37%
{операторы3}

if newchance > 85 && newchance <= 100  //100-85=15%
{операторы4}


Но в другом языке программинга я встречал такую запись:
case 1-4: оператор;
Там это интерпретировалось как число от 1 до 4.

Была еще такая запись:
case 1,3,5: оператор;
То есть выполняется для 1, 3 и 5.

Не уверен, что GM сможет это переварить ^-^

Да, я хотел что-то типо case 1-4: оператор; или case 1,3,5: оператор;, но такая запись не работает. Если делать через if - будет каждый раз выполняться много проверок. Мне кажется что это будет медленнее чем через switch (хотя я еще не проверял).

Добавлено: Март 02, 2011, 13:52:14
Можно написать так:

Код:
newchance = irandom(100);
switch (true)
      {
      case (newchance < 22): {операторы1}; break; //21%
      case (newchance < 49): {операторы2}; break; //48-21=27%
      case (newchance < 86): {операторы3}; break; //85-48=37%
      default: {операторы4} //100-85=15%
      }

Получается почти то же самое что через if, только в этом случае если выполнится первое условие - остальные не будут проверяться. Знак = я убрал и увеличил числа на 1 (где-то читал что "<" выполняет одну проверку, а "<=" выполняет две проверки: на меньше и на равенство). ceil(random(100) заменил на irandom(100). Эта функция сразу и рендомно выбирает, и округляет.

FanTom, спасибо, опять помог ;)
« Последнее редактирование: Октябрь 12, 2012, 12:26:52 от Dva_Kota » Записан

DeatHSoul
GM Pro user
*

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

Пол: Мужской
Награды:
За постоянность! [50 дней на форуме]FAQ для начинающих & Сленг и ТерминологияЗа лояльность! [+150 репутации]За помощь новичкам!Знаток Game Maker
API: GameMaker Studio Standard
Сообщений: 478


« Ответ #46 : Октябрь 24, 2010, 20:52:57 »

Знак = я убрал и увеличил числа на 1 (где-то читал что "<" выполняет одну проверку, а "<=" выполняет две проверки: на меньше и на равенство).
Ну и вы и маньяки оптимизации, честно  )  Менять "<=" на "<" только для того, чтобы добиться большей скорости... На дворе 21 век )  Но, это конечно ваше дело... )

Сорри за флуд.
Записан
Dva_Kota
Гл. Администратор
*

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

Пол: Мужской
Награды:
3000 сообщений!За постоянность! [500 дней на форуме]За лояльность! [+500 репутации]Настоящий игродел!Тру Админ :D1 место за игру: Energy Wars (Конкурс Золотые Руки)...
API: GameMaker Studio Standard
Сообщений: 3245



« Ответ #47 : Октябрь 25, 2010, 11:07:28 »

Да, оптимизация у меня сильно затянулась... Уже больше месяца оптимизирую игру. Оптимизацию начал делать через неделю после начала разработки и после этого внешне игра почти не изменилась и почти ничего не было добавлено. Если запустить на нормальном компе старую и новую - различия никакого... Но если запустить на древнем компе (которому чуть меньше 10 лет)... Без оптимизации fps 2-3... А теперь 60 стабильно:)
Есть же люди у которых компы очень старенькие... Например в офисах...

А вообще, если честно, просто интересное это занятие...  :)

Добавлено: Март 02, 2011, 13:52:34
Все таки не дает мне покоя вопрос: действительно ли "<" работает быстрее чем "<=". Но fps примерно одинаковое (слишком сильно прыгает чтобы точно определить). У меня, вроде бы, "<" работает быстрее. Но из-за того что fps не держится постоянно одним числом этой информации не могу доверять... Может ли мне кто-то помочь? Ниже пример.

p.s.: Вопрос, конечно не жизненно важный, но очень интересно...

* больше или равно.gmk (9.49 Кб - загружено 530 раз.)
« Последнее редактирование: Март 02, 2011, 13:52:34 от FanTom » Записан

Fantom
I am... All of me
Гл. Администратор
*

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

Пол: Мужской
Награды:
5000 сообщений!За постоянность! [500 дней на форуме]За лояльность! [+1000 репутации]За отличные статьи по Game Maker!Тру Админ :DЗнаток Game Maker...
API: GameMaker Studio Master
Сообщений: 5026



« Ответ #48 : Ноябрь 05, 2010, 12:50:29 »

Все таки не дает мне покоя вопрос: действительно ли "<" работает быстрее чем "<=".
Да, действительно ;)
Я на своих танках испытал.
Половину комнаты заставил стенами, в шаге которых проверялось следующее:
на словах: if hp is not larger than 0 then destroy instance.
фпс был 7-8.

Потом поменял на:
if hp is smaller than 0 then destroy instance
фпс поднялся до 8-9. :)
Записан

Dva_Kota
Гл. Администратор
*

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

Пол: Мужской
Награды:
3000 сообщений!За постоянность! [500 дней на форуме]За лояльность! [+500 репутации]Настоящий игродел!Тру Админ :D1 место за игру: Energy Wars (Конкурс Золотые Руки)...
API: GameMaker Studio Standard
Сообщений: 3245



« Ответ #49 : Ноябрь 05, 2010, 12:52:27 »

Спасибо! Очень помог (а то мне это "<=" спать не давало)
 :D
Записан

Илья
Посетитель
**

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

Сообщений: 18


« Ответ #50 : Ноябрь 05, 2010, 13:58:10 »

Цитировать
Вопрос в следующем: как лучше сделать, весь код писать в "Шаг" или перенести код в скрипты, а в шаге только прописать условия, и при выполнении условий вызывать нужные скрипты?

И еще вопрос: В зависимости от нажатых клавиш выполняются различные действия (перемещение игрока, стрельба, смена оружия и др.). Как лучше сделать писать проверку нажатия клавиш в "Шаг" или для каждой клавиши создать событие? (При нажатии некоторых клавиш выполняется много действий и проверок (длинный код))
В справке написано "Избегайте огромных кодов в событиях шага или рисования."
По поводу первого, скрипты работают раз в 5 медленее шага. Использовать их нужно с умом. В степ, ни в коем случае не ставим.
По поводу второго, пофиг где напишеш. Подумай просто.
Записан
denisus
Участник
****

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

Пол: Мужской
Сообщений: 153


правило хорошего программиста игр №34: Не знаешь ч


« Ответ #51 : Декабрь 07, 2010, 05:47:09 »

1)При создании игры ,столкнулся с такой проблемой: Нарисовано большое количество спрайтов, как в движении так и без (карта большая) ...Есть ли технология создания функции исчезновения спрайтов в не экрана,и их появления при его приближении...? ???
И если есть ,то помогает ли оно в разгрузки компьютера...? ::)

2) Имеет ли смысл в звуки загружать менее весомые файлы или нет ?

Записан

Dva_Kota
Гл. Администратор
*

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

Пол: Мужской
Награды:
3000 сообщений!За постоянность! [500 дней на форуме]За лояльность! [+500 репутации]Настоящий игродел!Тру Админ :D1 место за игру: Energy Wars (Конкурс Золотые Руки)...
API: GameMaker Studio Standard
Сообщений: 3245



« Ответ #52 : Декабрь 07, 2010, 09:40:10 »

1. Да, есть.

Цитата: Цитата из справки
чтобы деактивировать все экземпляры объекта за пределами вида и активировать их в виде, Вы можете вставить следующее коды в событии шага движущегося персонажа:

{
  instance_activate_all();
  instance_deactivate_region(view_xview[0],view_yview[0],
                        view_wview[0],view_hview[0],false,true);
}

2. Думаю имеет. Хотя, смотря какой формат. Если, например, взять два звука wav и mp3. mp3 будет весить меньше, на wav будет работать быстрее. Но лучше стремиться к тому чтобы звуки как можно меньше весили.
Записан

denisus
Участник
****

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

Пол: Мужской
Сообщений: 153


правило хорошего программиста игр №34: Не знаешь ч


« Ответ #53 : Декабрь 07, 2010, 10:50:28 »

1){
  instance_activate_all(); //Относится ко всем объектам...? ::)
  instance_deactivate_region(view_xview[0],view_yview[0], //Выключать область по края монитора на Х\Y,                                                                                     false?,правдивый) ::)   
                        view_wview[0],view_hview[0],false,true);=  ??? ?
   }
Код мне нужно ставить в скрипт ,который всегда находится По середине экрана ?(Герой) ???

2) А если я буду с помощью программы загружать из вне ... ::) Звук работать быстрее будет? Или из-за дополнительного кода переменной наоборот дольше грузить ? ???
Записан

Alcatraz
Flight Dream Studio
«Старожил форума»
******

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

Пол: Мужской
Награды:
3000 сообщений!За постоянность! [100 дней на форуме]За лояльность! [+300 репутации]Знаток Unity 3D3 место в конкурсе: Адекватные игры #2 [Стимпанк]2 место за игру: Dead Night (Конкурс Золотые Руки)...
API: Unity 3D
Деятельность: C#, C++, UNITY3D
Сообщений: 3392


http://vk.com/alcatraz_rus


WWW
« Ответ #54 : Декабрь 07, 2010, 11:49:39 »

false=неправда/нет
true=правда/да
Записан

Dva_Kota
Гл. Администратор
*

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

Пол: Мужской
Награды:
3000 сообщений!За постоянность! [500 дней на форуме]За лояльность! [+500 репутации]Настоящий игродел!Тру Админ :D1 место за игру: Energy Wars (Конкурс Золотые Руки)...
API: GameMaker Studio Standard
Сообщений: 3245



« Ответ #55 : Декабрь 07, 2010, 12:04:08 »

1. Код на две строки разбит. Координаты здесь относительно вида, по этому не важно где будет объект, у которого ты будешь выполнять этот код. Главное, чтобы он постоянно находился внутри вида (не обязательно по центру). Пропиши этот код игроку.
Подробнее про эти функции читай в справке:
Деактивация экземпляров

Лучше, по возможности, не использовать скрипты, а писать код прямо в событиях объектов. Об этом говорилось где-то в этой теме.

2. Да, если загружать звук из внешний папки работать будет заметно быстрее. То же касается и спрайтов.

Загружать ресурсы лучше всего в самом начале игры в отдельном объекте, а потом, при назначении ресурсов, просто ссылаться на данный объект (он должен быть постоянным). Объект, загружающий ресурсы, должен быть поставлен раньше чем объекты, которые будут использовать загруженные ресурсы.
Записан

denisus
Участник
****

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

Пол: Мужской
Сообщений: 153


правило хорошего программиста игр №34: Не знаешь ч


« Ответ #56 : Декабрь 07, 2010, 23:58:54 »

Спасибо,Спасибо,Спасибо... ;D

Спасибо вам всем ...Что не забиваете на меня болт  ;)
                               ;) Уважуха ;)
Записан

Hamster099
«Старожил форума»
******

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

Награды:
1000 сообщений!За постоянность! [100 дней на форуме]За лояльность! [+150 репутации]
API: GameMaker Studio Master
Сообщений: 1264



« Ответ #57 : Декабрь 15, 2010, 15:21:28 »

Возникла такая проблемка. Есть у меня некоторое количество зомби, у всех один итотже спрайт. Я заметил, что чем больше спрайт, тем больше тормоза, даже если его нет сейчас на экране. Даже если использовать маленький спрайт и увеличить его раз в 5 в драве, тормоза растут значительно. Попробовал я сделать рисование спрайта только если он видим на экране, но невыходит. Вот такой код
Код: (step)
if distance_to_object(o_camera_navpoint)<600 visible=true else visible=false;
почему-то не работает ???
Записан
Dva_Kota
Гл. Администратор
*

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

Пол: Мужской
Награды:
3000 сообщений!За постоянность! [500 дней на форуме]За лояльность! [+500 репутации]Настоящий игродел!Тру Админ :D1 место за игру: Energy Wars (Конкурс Золотые Руки)...
API: GameMaker Studio Standard
Сообщений: 3245



« Ответ #58 : Декабрь 15, 2010, 16:16:14 »

Visibl, на сколько я понимаю, не поднимет производительность. Объекты за пределами вида и так не рисуются (вроде бы). Тормоза у тебя, скорее всего, из-за действий в объектах. В частности из-за события столкновения. Наверное чем больше объект - тем дольше обрабатывается событие столкновения для него (я не проверял).
Цитата: Из справки
visible Отражает, рисовать ли спрайт для объекта (истина) или нет (ложь). Невидимые экземпляры объекта всё еще активны и создают события столкновения; Вы только не видите их. Установка видимости в ложь полезно, например, когда нужно скрыть некий объект-контроллер (сделайте его нетвёрдым телом, чтобы избегать событий столкновения) или невидимые переключатели.

Чтобы увеличить производительность - деактивируй образцы за приделами вида, если позволяет геймплей (в справке об этом есть).
Записан

Hamster099
«Старожил форума»
******

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

Награды:
1000 сообщений!За постоянность! [100 дней на форуме]За лояльность! [+150 репутации]
API: GameMaker Studio Master
Сообщений: 1264



« Ответ #59 : Декабрь 15, 2010, 21:29:37 »

Visibl, на сколько я понимаю, не поднимет производительность.
В том-то и дело, что подымает. Я улучшал быстродействие уменьшением обьектов, но случайно наткнулся на такую вещь, что обьект сам маленький, и маска у него маленькая, а спрайт я увеличил в 4 раза в событии драва (он получился размытым, но не суть). Главное, что фпс просело моментально, как только такой мегазомби появился. Ещё я заметил что оно проседает независимо от того вижу я его или нет, главное что он существует. Вот тот код с визиблом что я написал убирает тормоза практически совсем, но не выполняется условие - обьекты невидимые всегда. Вот я и пытаюсь узнать что нетак
Записан
Страниц: 1 2 3 [4] 5 6 ... 9   Вверх
  Печать  
 
Перейти в:  

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