Dva_Kota
|
 |
« Ответ #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
Пол:  Награды: ![За постоянность! [50 дней на форуме] За постоянность! [50 дней на форуме]](http://forum.hellroom.ru/awards/d09ba76b977b84fd4f5dcfae1f2918ff_hellroomforum_time_copper.gif)  ![За лояльность! [+150 репутации] За лояльность! [+150 репутации]](http://forum.hellroom.ru/awards/d3334d4fd3e3124bd7ba2ce29fab5c8a_hellroomforum_good_tin.gif)  
API: GameMaker Studio Standard
Сообщений: 478
|
 |
« Ответ #46 : Октябрь 24, 2010, 20:52:57 » |
|
Знак = я убрал и увеличил числа на 1 (где-то читал что "<" выполняет одну проверку, а "<=" выполняет две проверки: на меньше и на равенство).
Ну и вы и маньяки оптимизации, честно ) Менять "<=" на "<" только для того, чтобы добиться большей скорости... На дворе 21 век ) Но, это конечно ваше дело... ) Сорри за флуд.
|
|
|
Записан
|
|
|
|
Dva_Kota
|
 |
« Ответ #47 : Октябрь 25, 2010, 11:07:28 » |
|
Да, оптимизация у меня сильно затянулась... Уже больше месяца оптимизирую игру. Оптимизацию начал делать через неделю после начала разработки и после этого внешне игра почти не изменилась и почти ничего не было добавлено. Если запустить на нормальном компе старую и новую - различия никакого... Но если запустить на древнем компе (которому чуть меньше 10 лет)... Без оптимизации fps 2-3... А теперь 60 стабильно:) Есть же люди у которых компы очень старенькие... Например в офисах...
А вообще, если честно, просто интересное это занятие... :)
Добавлено: Март 02, 2011, 13:52:34 Все таки не дает мне покоя вопрос: действительно ли "<" работает быстрее чем "<=". Но fps примерно одинаковое (слишком сильно прыгает чтобы точно определить). У меня, вроде бы, "<" работает быстрее. Но из-за того что fps не держится постоянно одним числом этой информации не могу доверять... Может ли мне кто-то помочь? Ниже пример.
p.s.: Вопрос, конечно не жизненно важный, но очень интересно...
|
|
« Последнее редактирование: Март 02, 2011, 13:52:34 от FanTom »
|
Записан
|
|
|
|
Fantom
I am... All of me
Гл. Администратор
Репутация: 1325
Offline
Пол:  Награды:  ![За постоянность! [500 дней на форуме] За постоянность! [500 дней на форуме]](http://forum.hellroom.ru/awards/e0371460a203dd46d2dc161571bf6144_hellroomforum_time_gold.gif) ![За лояльность! [+1000 репутации] За лояльность! [+1000 репутации]](http://forum.hellroom.ru/awards/49d1e615667c15086498002286ccd3e9_hellroomforum_good_gold.gif)   ...
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
|
 |
« Ответ #49 : Ноябрь 05, 2010, 12:52:27 » |
|
Спасибо! Очень помог (а то мне это "<=" спать не давало) :D
|
|
|
Записан
|
|
|
|
Илья
Посетитель

Репутация: 1
Offline
Сообщений: 18
|
 |
« Ответ #50 : Ноябрь 05, 2010, 13:58:10 » |
|
Вопрос в следующем: как лучше сделать, весь код писать в "Шаг" или перенести код в скрипты, а в шаге только прописать условия, и при выполнении условий вызывать нужные скрипты?
И еще вопрос: В зависимости от нажатых клавиш выполняются различные действия (перемещение игрока, стрельба, смена оружия и др.). Как лучше сделать писать проверку нажатия клавиш в "Шаг" или для каждой клавиши создать событие? (При нажатии некоторых клавиш выполняется много действий и проверок (длинный код)) В справке написано "Избегайте огромных кодов в событиях шага или рисования." По поводу первого, скрипты работают раз в 5 медленее шага. Использовать их нужно с умом. В степ, ни в коем случае не ставим. По поводу второго, пофиг где напишеш. Подумай просто.
|
|
|
Записан
|
|
|
|
denisus
Участник
  
Репутация: 3
Offline
Пол: 
Сообщений: 153
правило хорошего программиста игр №34: Не знаешь ч
|
 |
« Ответ #51 : Декабрь 07, 2010, 05:47:09 » |
|
1)При создании игры ,столкнулся с такой проблемой: Нарисовано большое количество спрайтов, как в движении так и без (карта большая) ...Есть ли технология создания функции исчезновения спрайтов в не экрана,и их появления при его приближении...? ??? И если есть ,то помогает ли оно в разгрузки компьютера...? ::)
2) Имеет ли смысл в звуки загружать менее весомые файлы или нет ?
|
|
|
Записан
|
|
|
|
Dva_Kota
|
 |
« Ответ #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
Пол: 
Сообщений: 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
|
 |
« Ответ #54 : Декабрь 07, 2010, 11:49:39 » |
|
false=неправда/нет true=правда/да
|
|
|
Записан
|
|
|
|
Dva_Kota
|
 |
« Ответ #55 : Декабрь 07, 2010, 12:04:08 » |
|
1. Код на две строки разбит. Координаты здесь относительно вида, по этому не важно где будет объект, у которого ты будешь выполнять этот код. Главное, чтобы он постоянно находился внутри вида (не обязательно по центру). Пропиши этот код игроку. Подробнее про эти функции читай в справке: Деактивация экземпляровЛучше, по возможности, не использовать скрипты, а писать код прямо в событиях объектов. Об этом говорилось где-то в этой теме. 2. Да, если загружать звук из внешний папки работать будет заметно быстрее. То же касается и спрайтов. Загружать ресурсы лучше всего в самом начале игры в отдельном объекте, а потом, при назначении ресурсов, просто ссылаться на данный объект (он должен быть постоянным). Объект, загружающий ресурсы, должен быть поставлен раньше чем объекты, которые будут использовать загруженные ресурсы.
|
|
|
Записан
|
|
|
|
denisus
Участник
  
Репутация: 3
Offline
Пол: 
Сообщений: 153
правило хорошего программиста игр №34: Не знаешь ч
|
 |
« Ответ #56 : Декабрь 07, 2010, 23:58:54 » |
|
Спасибо,Спасибо,Спасибо... ;D Спасибо вам всем ...Что не забиваете на меня болт ;) ;)  ;)
|
|
|
Записан
|
|
|
|
Hamster099
|
 |
« Ответ #57 : Декабрь 15, 2010, 15:21:28 » |
|
Возникла такая проблемка. Есть у меня некоторое количество зомби, у всех один итотже спрайт. Я заметил, что чем больше спрайт, тем больше тормоза, даже если его нет сейчас на экране. Даже если использовать маленький спрайт и увеличить его раз в 5 в драве, тормоза растут значительно. Попробовал я сделать рисование спрайта только если он видим на экране, но невыходит. Вот такой код if distance_to_object(o_camera_navpoint)<600 visible=true else visible=false; почему-то не работает ???
|
|
|
Записан
|
|
|
|
Dva_Kota
|
 |
« Ответ #58 : Декабрь 15, 2010, 16:16:14 » |
|
Visibl, на сколько я понимаю, не поднимет производительность. Объекты за пределами вида и так не рисуются (вроде бы). Тормоза у тебя, скорее всего, из-за действий в объектах. В частности из-за события столкновения. Наверное чем больше объект - тем дольше обрабатывается событие столкновения для него (я не проверял). visible Отражает, рисовать ли спрайт для объекта (истина) или нет (ложь). Невидимые экземпляры объекта всё еще активны и создают события столкновения; Вы только не видите их. Установка видимости в ложь полезно, например, когда нужно скрыть некий объект-контроллер (сделайте его нетвёрдым телом, чтобы избегать событий столкновения) или невидимые переключатели. Чтобы увеличить производительность - деактивируй образцы за приделами вида, если позволяет геймплей (в справке об этом есть).
|
|
|
Записан
|
|
|
|
Hamster099
|
 |
« Ответ #59 : Декабрь 15, 2010, 21:29:37 » |
|
Visibl, на сколько я понимаю, не поднимет производительность.
В том-то и дело, что подымает. Я улучшал быстродействие уменьшением обьектов, но случайно наткнулся на такую вещь, что обьект сам маленький, и маска у него маленькая, а спрайт я увеличил в 4 раза в событии драва (он получился размытым, но не суть). Главное, что фпс просело моментально, как только такой мегазомби появился. Ещё я заметил что оно проседает независимо от того вижу я его или нет, главное что он существует. Вот тот код с визиблом что я написал убирает тормоза практически совсем, но не выполняется условие - обьекты невидимые всегда. Вот я и пытаюсь узнать что нетак
|
|
|
Записан
|
|
|
|
|