Суббота, 30 Ноября 2024, 09:47

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
Результаты поиска
Dva_KotaДата: Среда, 02 Февраля 2011, 13:04 | Сообщение # 241 | Тема: Внешние ресурсы в Game Maker
заслуженный участник
Сейчас нет на сайте
Не пробывал такое делать, но думаю перед загрузкой ресурсов можно загрузить эту картинку, отобразить ее. Саму загрузку ресурсов делать не в событии создания объекта-загрузчика, а в событии alarm0. В событии создания объекта-загрузчика только загрузка ресурсов, необходимых для отображения экрана загрузки (та самая картинка, про которую ты говоришь). Все это в отдельной комнате (или в комнате "меню", но тогда еще загрузи элементы меню). А событии создания, после загрузки "картинки загрузки" отображаем эту картинку и устанавливаем alarm[0]=1. В событии alarm0 загружаем все ресурсы и переходим в следующую комнату (или удаляем объект, показывающий загрузку). Ну как-то так...

Новый пример инвентаря! /20.06.2012/

Energy Wars
Dva_KotaДата: Вторник, 01 Февраля 2011, 10:12 | Сообщение # 242 | Тема: Glob left Pressed
заслуженный участник
Сейчас нет на сайте
NeZnayu, спасибо. Я ставил повторение действия много раз, а оказывается в одном объекте влияние на производительность не значительно. Вообще это очевидно... В одном объекте событие будет происходить только один раз (и одно событие не будет сильно влиять на производительность), а само действие присвоения значения переменной а выполняется с одной скоростью. По этому для одного объекта изменения не заметны. Когда объектов много - события происходят для каждого объекта, и здесь уже можно увидеть какое из них быстрее работает, а какое медленнее. NeZnayu, Спасибо что открыл мне глаза. respect

Новый пример инвентаря! /20.06.2012/

Energy Wars
Dva_KotaДата: Понедельник, 31 Января 2011, 18:01 | Сообщение # 243 | Тема: Архив с вопросами
заслуженный участник
Сейчас нет на сайте
да

Новый пример инвентаря! /20.06.2012/

Energy Wars
Dva_KotaДата: Понедельник, 31 Января 2011, 17:50 | Сообщение # 244 | Тема: Glob left Pressed
заслуженный участник
Сейчас нет на сайте
NeZnayu, ты проверял или это теория?
Может я не самую подходящую проверку делал, но вот пример, где я сравнивал что работает быстрее: событие нажатия клавиши, нажатие клавиши записанное в степ или нажатие клавиши, записанное в триггер. Результаты практически не отличаются (O - событие нажатия клавиши, I - через степ, P - триггер)

http://rghost.ru/4152110

У меня FPS практически не отличается во всех трех случаях (+/- 1)

Добавлено (31.01.2011, 17:50)
---------------------------------------------
В теории, действительно, должно работать быстрее событие нажатия клавиши, но на практике получается не так...


Новый пример инвентаря! /20.06.2012/

Energy Wars


Сообщение отредактировал Dva_Kota - Понедельник, 31 Января 2011, 17:49
Dva_KotaДата: Понедельник, 31 Января 2011, 16:12 | Сообщение # 245 | Тема: Оптимизация игры
заслуженный участник
Сейчас нет на сайте
Бэкграунд загружать лучше при старте комнаты (или игры, если во всех комнатах он одинаковый), а выгружать при выходе из комнаты (если в следующей комнате будет другой бэкграунд).

Новый пример инвентаря! /20.06.2012/

Energy Wars
Dva_KotaДата: Понедельник, 31 Января 2011, 14:59 | Сообщение # 246 | Тема: Glob left Pressed
заслуженный участник
Сейчас нет на сайте
Quote (Riketta)
Я бы посоветовал копипастить весь код имеющий отношение к проблеме либо выкладывать сырец. Никаких маус чек в коде не видно, значит проблему было выявить невозможно.

Код, который в первом посте, у него стоял в событии Glob left Pressed. Теперь он перенес его в степ и добавил проверку нажатия кнопки мыши.

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


Новый пример инвентаря! /20.06.2012/

Energy Wars
Dva_KotaДата: Воскресенье, 30 Января 2011, 10:48 | Сообщение # 247 | Тема: Архив с вопросами
заслуженный участник
Сейчас нет на сайте
Вместо
Code
object41.x
object41.y

поставь просто
Code
x
y

Если пишешь object41.x - это координаты первого созданного объекта object41 (object41 = id первого объекта object41)

Добавлено (30.01.2011, 10:48)
---------------------------------------------
если ставишь просто x y - это будут координаты того образца объекта я которого выполняется код.


Новый пример инвентаря! /20.06.2012/

Energy Wars
Dva_KotaДата: Воскресенье, 30 Января 2011, 10:44 | Сообщение # 248 | Тема: Дробовик
заслуженный участник
Сейчас нет на сайте
Для оптимизации, на сколько я знаю, нет разницы в каком степе ты пишешь код - в любом случае код будет выполняться каждый шаг.

Разница очень хорошо описана в справке:

Quote
...Но Вы также можете выбрать событие начала шага (Begin step) и конца шага(End step). Событие начала шага выполняется в начале каждого шага, перед всеми остальными событиями. Обычное событие шага выполняется перед тем, как экземпляры объекта будут перемещены в новые позиции. Событие конца шага выполняется в конце шага, перед событием рисования. Оно обычно используется, например, для изменения спрайта в зависимости от его текущего направления.

Где писать код зависит от того, когда именно должны выполняться действия. Чаще всего это не имеет значения, по этому основную часть кода можно писать в степ.

А вот привязку одного объекта к другому луче делать в событии End step. Вот код привязки:

Code
x=obj1.x;
y=obj1.y;

Если его выполнить в событии Step, то данный объект переместится в координаты объекта obj1, но движение объекта obj1 выполнится в стобытии End Step. По этому когда привязку объектов делают в step они как бы "отрываются" друг от друга.

Добавлено (30.01.2011, 10:44)
---------------------------------------------
А вообще, для оптимизации лучше убрать из степа код, который не обязательно выполнять каждый шаг, и перенести его в аларм.


Новый пример инвентаря! /20.06.2012/

Energy Wars
Dva_KotaДата: Пятница, 28 Января 2011, 13:57 | Сообщение # 249 | Тема: Дробовик
заслуженный участник
Сейчас нет на сайте
Правильно, нет смысла проверять это в степе - все равно количество патронов уменьшается только когда стреляешь (в большинстве игр).

Новый пример инвентаря! /20.06.2012/

Energy Wars
Dva_KotaДата: Пятница, 28 Января 2011, 13:24 | Сообщение # 250 | Тема: Дробовик
заслуженный участник
Сейчас нет на сайте
Code
{magazBul=0ammoBul=0}

Здесь пробел забыл поставить

Поставь код перезарядки сразу после уменьшения патронов.


Новый пример инвентаря! /20.06.2012/

Energy Wars
Dva_KotaДата: Пятница, 28 Января 2011, 13:16 | Сообщение # 251 | Тема: Дробовик
заслуженный участник
Сейчас нет на сайте
Как сделал перезарядку и уменьшение патронов?
Code
if (mouse_check_button_pressed(mb_left))
{
repeat(5)
{
bullet=instance_create(x,y,o_bulgun)
bullet.speed=random_range(10,13); //Скорость
bullet.direction=direction+random_range(-15,15); //Направление
}
//здесь уменьшаем количество патронов на 1
}


Новый пример инвентаря! /20.06.2012/

Energy Wars


Сообщение отредактировал Dva_Kota - Пятница, 28 Января 2011, 13:17
Dva_KotaДата: Пятница, 28 Января 2011, 12:13 | Сообщение # 252 | Тема: Дробовик
заслуженный участник
Сейчас нет на сайте
Можно сделать короче. В шаге оружия написать:
Code
if (mouse_check_button_pressed(mb_left))  
{
repeat(5)
bullet=instance_create(x,y,o_bulgun)
bullet.speed=random_range(10,13);                    //Скорость
bullet.direction=direction+random_range(-15,15);                             //Направление
}

И в создании пули можно ничего не писать.


Новый пример инвентаря! /20.06.2012/

Energy Wars
Dva_KotaДата: Четверг, 27 Января 2011, 18:28 | Сообщение # 253 | Тема: Вопросы по Game Maker.
заслуженный участник
Сейчас нет на сайте
Если действие создания нового объекта происходит в том объекте, относительно которого нужно создавать, то id писать не нужно. Код в объекте Object2 (например в степ или в нажатии клавиши или в аларм):

Code
if x-Object3.x>0//это когда Object3 находится слева
{
instance_create(x+50,y,Object1);
}

Code
if x-Object3.x<0//это когда Object3 находится справа
{
instance_create(x+50,y,Object1);
}


Новый пример инвентаря! /20.06.2012/

Energy Wars
Dva_KotaДата: Четверг, 27 Января 2011, 14:09 | Сообщение # 254 | Тема: Симуляторские вопросы
заслуженный участник
Сейчас нет на сайте
У меня нет исходника и нет времени его делать. Код такой:
при старте игры задавай переменную time_attak=0
когда должна выполняться атака ставь код:
Code
if (date_current_datetime()-time_attak>0.04)
{
time_attak=date_current_datetime();
//здесь код атаки (удара)
}

Все, больше ничего не нужно.


Новый пример инвентаря! /20.06.2012/

Energy Wars


Сообщение отредактировал Dva_Kota - Четверг, 27 Января 2011, 14:53
Dva_KotaДата: Четверг, 27 Января 2011, 13:19 | Сообщение # 255 | Тема: Симуляторские вопросы
заслуженный участник
Сейчас нет на сайте
2. Используй глобальную переменную. Записывай в нее время, когда происходит удар. При выходе из игры сохраняй игру. При ударе сравнивай эту переменную с текущим временем. Если разница больше часа - можно опять бить.

тебе понадобится эта функция:

Quote
date_current_datetime() Возвращает число формата дата-время настоящего момента.

Число формата дата-вемя равное 1 часу будет 0,04 (если я не ошибаюсь).
Подробнее про функции даты и времени читай в справке.


Новый пример инвентаря! /20.06.2012/

Energy Wars
Dva_KotaДата: Среда, 26 Января 2011, 14:02 | Сообщение # 256 | Тема: Свой интерфейс.
заслуженный участник
Сейчас нет на сайте
Что значит "игнорил другие объекты"? Чтобы не происходило событие столкновение с другими объектами?

Новый пример инвентаря! /20.06.2012/

Energy Wars
Dva_KotaДата: Среда, 26 Января 2011, 13:05 | Сообщение # 257 | Тема: Свой интерфейс.
заслуженный участник
Сейчас нет на сайте
Недавно это обсуждалось здесь: http://gcup.ru/forum/36-12736-1
Вот пример:
http://rghost.ru/4057673


Новый пример инвентаря! /20.06.2012/

Energy Wars


Сообщение отредактировал Dva_Kota - Среда, 26 Января 2011, 13:06
Dva_KotaДата: Вторник, 25 Января 2011, 12:56 | Сообщение # 258 | Тема: Вопрос - Ответ (Game Maker)
заслуженный участник
Сейчас нет на сайте
Да, лучше. Но лучше, я думаю, то что я предлагал выше - через place_meeting(x,obj_игрок.y,obj_игрок). Хотя не знаю что будет быстрее работать.

Новый пример инвентаря! /20.06.2012/

Energy Wars
Dva_KotaДата: Вторник, 25 Января 2011, 11:33 | Сообщение # 259 | Тема: Переход между комнатами...
заслуженный участник
Сейчас нет на сайте
Да, есть. Это то же самое что &&

Новый пример инвентаря! /20.06.2012/

Energy Wars
Dva_KotaДата: Вторник, 25 Января 2011, 11:04 | Сообщение # 260 | Тема: Вопросы по Game Maker.
заслуженный участник
Сейчас нет на сайте
Все на много проще - нужно сравнивать x:

Code
if Object2.x-Object3.x>0//это когда Object3 находится слева
{
instance_create(Object2.x+50,Object2.y,Object1);
}

Code
if Object2.x-Object3.x<0//это когда Object3 находится справа
{
instance_create(Object2.x+50,Object2.y,Object1);
}


Новый пример инвентаря! /20.06.2012/

Energy Wars
Поиск:

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