Перейти к содержимому
Джанкер

Помогите с Гейм Мейкером

Рекомендуемые сообщения

Вопрос: есть какой-нибудь способ выполнить/узнать код, выполняемый при создании комнаты? ОК, будем химичить тогда

Вопрос 2: как использовать команду instance_xth_nearest ( x, y, obj, n, variable, value, operator ) из Instance Nearest Extended? Я пытаюсь сделать хоминг, использую код (в игроке)

with (homingTarget) {if sign(x-objPlayer.x)=objPlayer.xdir homingable=true else homingable=false} //определяет, повернут ли Соник лицом к цели
i=instance_xth_nearest(x,y,homingTarget, 1, homingable=true, true, "=")//определяет ближайшую цель, на которую смотрит Соник

однако ничего не получаю и ВНЕЗАПНО проблема решена добавлением кавычек

Изменено пользователем 1001

Поделиться сообщением


Ссылка на сообщение
Вопрос: есть какой-нибудь способ выполнить/узнать код, выполняемый при создании комнаты?

Нет, насколько я знаю.

Поделиться сообщением


Ссылка на сообщение

Кто-нибудь знает, как сделать освещение в 3D?(не направленный свет)

Поделиться сообщением


Ссылка на сообщение
Кто-нибудь знает, как сделать освещение в 3D?(не направленный свет)

3d_point_light

 

Или что-то вроде того. Ищи в офф мануале инфу, там все написано. Единственное, назначать свет нужно в create, а менять его положение надо в step, иначе будет у тебя куча огоньков, которые сожрут проц с хлебом на постном масле.

Вопрос 2: как использовать команду instance_xth_nearest ( x, y, obj, n, variable, value, operator ) из Instance Nearest Extended?

А конструкция

a=instance_nearest(x,y,object);
move_towards_point(a.x,a.y);

уже не канает? Или обязательно извратиться и через жопу сделать надо?

Изменено пользователем Джанкер

Поделиться сообщением


Ссылка на сообщение

Новые вопросы

1 - как оптимизировать игру, чтобы она меньше/не тормозила?

UPD: Или вообще - какие есть методы оптимизации?

2 - если будут ресурсы снаружи, будет ли работать быстрее/медленее?

3 - как эффективнее отключать объекты? На данный момент используется пример из справки:

{

instance_activate_all();

instance_deactivate_region(view_xview[0],view_yview[0],

view_wview[0],view_hview[0],false,true);

}

4 - как сделать так, чтобы игрок нормально перемещался между платформой и обычным полом? На платформе стоит нормально, но при переходе со пола на платформу падает

Изменено пользователем 1001

Поделиться сообщением


Ссылка на сообщение

1) Переносить некоторые функции в Create, чтобы он выполнял их только один раз, оптимизировать схемы передвижения. Способов и вариантов до хрена и больше.

2) Одинаково. Просто скорость загрузки будет выше.

3) Насколько я знаю, только так и можно. Хотя нет, есть еще способ "через жопу", когда ты рассчитываешь расстояние от объекта до игрока. Но оно тебе нужно?

4) Не совсем понял проблемы.

Поделиться сообщением


Ссылка на сообщение
1) Переносить некоторые функции в Create, чтобы он выполнял их только один раз, оптимизировать схемы передвижения. Способов и вариантов до хрена и больше.

2) Одинаково. Просто скорость загрузки будет выше.

3) Насколько я знаю, только так и можно. Хотя нет, есть еще способ "через жопу", когда ты рассчитываешь расстояние от объекта до игрока. Но оно тебе нужно?

4) Не совсем понял проблемы.

1) Для Draw есть какие-нибудь общие советы?

3) Конечно нет

4) http://rghost.ru/4051963 - ехешник с демонстрацией глюка

22899767.png

Второй "этаж" состоит из платформы (левая половина) и поверхности (правая)

Выделенное красным - граница между платформой и обычной поверхностью, с которой он сваливается

 

Новый вопрос

5 - Как сделать так - чтобы отрисовывалось на виде ТОЛЬКО то, что необходимо и НИЧЕГО больше.

Была идея

if view_current=1 screen_refresh()
код_для_отрисовки

но не сработала

Изменено пользователем 1001

Поделиться сообщением


Ссылка на сообщение

1) Есть. Поменьше использовать в них функции для расчета, если используются. Больше пока в голову ничего не приходит.

4) Вероятно, какая-то проблема с твердостью объекта. Так навскидку ничего сказать нельзя, нужно кусок кода просматривать.

5) Если я не ошибаюсь, view_current нужно не проверять, а только присваивать ему значение вида, на котором будут рисоваться объекты. Так что тут нужно делать так:

view_current=1;
код_для_отрисовки

Поделиться сообщением


Ссылка на сообщение
5 - Как сделать так - чтобы отрисовывалось на виде ТОЛЬКО то, что необходимо и НИЧЕГО больше.

Хоть гамаком уже не пользовался больше полугода, но до сих пор помню как разбирался с view_current.

В неё заносится вид, который рисуется в данный момент.

 

if(view_current==0) //если сейчас идёт отрисовка 0го вида

{

//рисуем здесь вещи только в этом виде

};

 

Как то так.

 

У тебя же судя по всему не работало из-за отсутствия скобок.

Поделиться сообщением


Ссылка на сообщение
4) Вероятно, какая-то проблема с твердостью объекта. Так навскидку ничего сказать нельзя, нужно кусок кода просматривать.

http://rghost.ru/4057511 - Подпиленный исходник (+40-60 FPS к заявленным ниже 90-120)

5) Если я не ошибаюсь, view_current нужно не проверять, а только присваивать ему значение вида, на котором будут рисоваться объекты. Так что тут нужно делать так:

view_current=1;
код_для_отрисовки

Нет, его нужно проверять, так как если без проверки, то у меня случилась ошибка. Алсо,

view_current* The currently drawn view (0-7). Use this only in the drawing event. You can for example check this variable to draw certain things in only one view. Variable cannot be changed

Для небольшогго теста взял "рисовать эффект-кольцо":

view_current=1;
effect_create_above(ef_ring,view_xview[1],view_yview[1],2,c_white)

Error in code at line 1:
  view_current=1;
 ^
at position 1: Cannot assign to the variable

 

К тому же - это же вроде для рисования чего-то на определенном виде (если до меня все дошло, а это не всегда), а я хочу чтобы это "что-то" рисовалось на виде, а все остальное (объекты и прочая шушера) - нет. Что-то вроде вида только для интерфейса

 

Хоть гамаком уже не пользовался больше полугода, но до сих пор помню как разбирался с view_current.

В неё заносится вид, который рисуется в данный момент.

if(view_current==0) //если сейчас идёт отрисовка 0го вида

{

//рисуем здесь вещи только в этом виде

};

Как то так.

У тебя же судя по всему не работало из-за отсутствия скобок.

Это-то и такому тормозу, как я, понятно, однако чего я хочу - рисовать интерфейс на отдельном виде, а Draw всех остальных отправить лесом, дабы не обсчитывался и не тратил FPS (которых и так 90-120 на 4ядернике 3 ГГц и 4 Гб памяти, что является катастрофой)

Изменено пользователем 1001

Поделиться сообщением


Ссылка на сообщение

Без разницы. Draw для всех остальных все равно обсчитывается, если у объектов есть спрайт. А так у тебя в два раза больше нагрузки уйдет - два вида используется.

П.С. В исходнике проверки на столкновение с платформой вообще не нашел, так что...

Изменено пользователем Джанкер

Поделиться сообщением


Ссылка на сообщение
П.С. В исходнике проверки на столкновение с платформой вообще не нашел, так что...

А в обычных проверках на коллизии? Потому что я воткнул туда проверку на платформы

 

collision_sensor_bottom - нижний сенсор

collision_test = place_meeting(floor(objPlayer.x)+sin(degtorad(objPlayer.angle))*1,floor(objPlayer.y)+cos(degtorad(objPlayer.angle))*1,objPlatform) &&
			!place_meeting(floor(objPlayer.x),floor(objPlayer.y),objPlatform)

if ((check&obstacle_layer) && collision_circle(x+(dsin*mask_radius),y+(dcos*mask_radius),radius,objPlatform,true,true)>0) and collision_test=true return true;

 

collision_sensor_left_line - левый нижний

collision_test = place_meeting(floor(objPlayer.x)+sin(degtorad(objPlayer.angle))*1,floor(objPlayer.y)+cos(degtorad(objPlayer.angle))*1,objPlatform) &&
			!place_meeting(floor(objPlayer.x),floor(objPlayer.y),objPlatform)
if ((check&obstacle_layer) && collision_line(x-(dcos*8)+(dsin*mask_radius),y+(dsin*8)+(dcos*mask_radius),x-(dcos*8)+(dsin*(mask_radius+25)),y+(dsin*8)+(dcos*(mask_radius+25)),objPlatform,true,true)>0) and collision_test=true return true

 

collision_sensor_right_line - правый нижний

collision_test = place_meeting(floor(objPlayer.x)+sin(degtorad(objPlayer.angle))*1,floor(objPlayer.y)+cos(degtorad(objPlayer.angle))*1,objPlatform) &&
			!place_meeting(floor(objPlayer.x),floor(objPlayer.y),objPlatform)
if ((check&obstacle_layer) && collision_line(x+(dcos*8)+(dsin*mask_radius),y-(dsin*8)+(dcos*mask_radius),x+(dcos*8)+(dsin*(mask_radius+25)),y-(dsin*8)+(dcos*(mask_radius+25)),objPlatform,true,true)>0) and collision_test=true return true

Поделиться сообщением


Ссылка на сообщение

Ну так в этом и проблема. Нужно вместо этого играться с настройками твердости, ибо оригинальная проверка проверяет все твердые объекты с родительским объектом obj_wall (или какой там для стенок, не помню уже)

Поделиться сообщением


Ссылка на сообщение

Я вернулся! *Героически показывая пальцем в небо*

 

Вопрос такой, как человек поступивший на Computer Programmer интересуюсь - А надо ли в gml ставить ";" после каждой (ну, не Каждой, но в конце тех, которых нужно) строчки кода, как в C?

Ну, тоесть, на сколько я вижу все и так работает, но сильно ли что-то изменится?

Изменено пользователем Reven The Hedgehog

Поделиться сообщением


Ссылка на сообщение

По справке -

Statements must be separated with a ';' symbol
Выражения должны разделяться знаком ';'

 

На деле я разницы не заметил, он мне как-то раз (помойму то ли в switch/case, то ли в while) выкинул ошибку ( "; expected" или как-то так) и больше не вспомнил про них

Изменено пользователем 1001

Поделиться сообщением


Ссылка на сообщение
Вопрос такой, как человек поступивший на Computer Programmer интересуюсь - А надо ли в gml ставить ";" после каждой (ну, не Каждой, но в конце тех, которых нужно) строчки кода, как в C?

Ну, тоесть, на сколько я вижу все и так работает, но сильно ли что-то изменится?

На деле я разницы не заметил, он мне как-то раз (помойму то ли в switch/case, то ли в while) выкинул ошибку ( "; expected" или как-то так) и больше не вспомнил про них

Можно ставить, можно не ставить, это дело стиля, к в котором ты привык писать код. Game Maker обсчитает правильно в любом случае. Но некоторые операторы всё-таки требуют использования кавычек. Такие как For ( for(i=0;i<value;i+=1) ).

 

Вобще, в GameMaker, используется смешанный стиль кода.

Код можно писать в стиле C:

while(foo!=bar)
{
bar=2;
}

В стиле Pascal:

while foo!=bar do
begin
bar:=2;
end;

Можно вобще смешивать стили

while foo!=bar do
{
bar=2;
}

 

И всё это будет обсчитываться нормально.

Изменено пользователем 3DI70R

Поделиться сообщением


Ссылка на сообщение

Знак ; после строчки надо ставить, если ты потом на этой же строчке ещё одно действие прописываешь

Например:

if a > 0
{
a=0;b=1;c=1
}

Изменено пользователем Jackrost

Поделиться сообщением


Ссылка на сообщение
Знак ; после строчки надо ставить, если ты потом на этой же строчке ещё одно действие прописываешь

Например:

if a > 0
{
a=0;b=1;c=1
}

Да ну?

 

Код отбивашки (если туп - извините, другой делать неохота)

if other.ready=0
{
other.jumping=0
hspeed=hsp
vspeed=vsp
hsp=0 vsp=0
action_bounce(objBumper,1)
hsp=hspeed
vsp=vspeed
hspeed=0 vspeed=0
homing=0 dashed=0 blur=0
other.ready=6
effect_create_below(ef_ring,other.x,other.y,1,c_white)
sound_play(sndBumper)
score+=10
a=instance_create(other.x,other.y,objScore)
a.drawscore=10
}

 

И ни одной ошибки

Изменено пользователем 1001

Поделиться сообщением


Ссылка на сообщение

Угу, спасибо, вот еще такой лаг:

У меня есть объект (примеров много - пружина, моб и так далее, как пример использую Mob) и еще второй объект, в котором содержатся все коды sprite_replace (Draw_Sprites) так вот, если засунуть код "sprite_replace (MobSpr...)" в объект Mob, то все будет нормально, но я вот подумал "Ну, надо сохранить немного памяти, ибо каждый объект будет заменять спрайт много раз, а это лишение процессы" и засунул эту строку кода в Draw_Sprites, а в Mob поставил sprite_index = MobSpr.

Результат - Mob делает все действия, но потерял solid'ность и не действует на игрока (не сталкивается).

 

Я знаю, что сказать Так просто сложно, но может хоть варианты есть?

Изменено пользователем Reven The Hedgehog

Поделиться сообщением


Ссылка на сообщение

Попробуй похимичить с маской

 

оригинальная проверка проверяет все твердые объекты с родительским объектом obj_wall (или какой там для стенок, не помню уже)

Оригинальная проверка проверяет все объекты (независимо от твердости) с родительским объектом obj_walls. Так вот, я похимичил и мне удалось избежать проваливания, однако теперь 360 на платформах отсутствует. У кого-нибудь есть идеи как сделать нормальный обсчет 360 для платформ?

Поделиться сообщением


Ссылка на сообщение

Ревен , я не уверен, но попробуй через parent .

1001 , вртяли есть что то лучше Дамизиеновского двига.

Изменено пользователем Jackrost

Поделиться сообщением


Ссылка на сообщение

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

Изменено пользователем 1001

Поделиться сообщением


Ссылка на сообщение

Люди, вот еще такой вопрос - Какой способ "расстановки" тайлов по уровню более эффективный (экономный/лучший)?

1. Имеется два объекта - в одном все коды background_replace, в другом draw_background для всего уровня.

2. Один объект с кодами background_replace, а сами бэкграунды расставлены по уровню "вручную".

3. А может (что, скорее всего) есть что-то чего я не знаю?)

Изменено пользователем Reven The Hedgehog

Поделиться сообщением


Ссылка на сообщение

Reven The Hedgehog

для тайлов нужны другие функции.

background 'ы не используются (кроме самого файла с изображением).

имел дело с "кодированием тайлов".имхо проще всего сделать объект "менеджер" тайлов и если будет необходимость, то можно ещё под некоторые тайлы спец.объекты делать,например если нужен блендинг.

Поделиться сообщением


Ссылка на сообщение

Вообще ты можешь и через массив попробовать всё расставить .

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

Поделиться сообщением


Ссылка на сообщение

Ладно, тогда еще такая ситуация - Пытаюсь сделать объект с некоторым количеством копий (В смысле сам объект один "Spin", а в комнате таких их расставлено несколько), пытаюсь сделать так, чтобы каждый объект крутился с разной скоростью. Уже поставил, чтобы спрайты распределялись случайным образом, а вот угол никак настроить не могу, вот что я пробовал:

 

Create:
Spin.angle_speed = choose (1,10)
Step:
Spin.image_angle += Spin.angle_speed

 

Create:
Spin.angle_speed = choose (1,10)
Step:
Spin.image_angle += angle_speed

 

Create:
Spin.angle_speed = choose (1,10)
Step:
image_angle += Spin.angle_speed

 

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

Может кто скажет где ошибка? Или как исправить? a3ba339a.png

Изменено пользователем Reven The Hedgehog

Поделиться сообщением


Ссылка на сообщение
1)

Create:
Spin.angle_speed = choose (1,10)
Step:
Spin.image_angle += Spin.angle_speed

2)

Create:
Spin.angle_speed = choose (1,10)
Step:
Spin.image_angle += angle_speed

3)

Create:
Spin.angle_speed = choose (1,10)
Step:
image_angle += Spin.angle_speed

 

1) Всем обьектам типа Spin. выбирается единственное рандомное значение, после чего в Step, всем обьектам Spin. прибавляется значение из Spin.angle_speed, которое у всех одинаково.

2) Идентично первому, только теперь код берёт не общую angle_speed, а локальную, которая в шаге step поставилась всем объектам типа Spin. одинаковая.

3) Снова идентично первому, но теперь одинаковое у всех значение Spin.angle_speed прибавляется к локальному значению image_angle.

 

Create:
angle_speed = choose (1,10)
Step:
image_angle += angle_speed

 

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

 

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

Ибо это бред, ведь все переменные и так доступны, и незачем усложнять себе жизнь.

Изменено пользователем 3DI70R

Поделиться сообщением


Ссылка на сообщение

И на будущее скажу что в редакторе комнаты (room) держишь Ctrl и нажимаешь правой мышкой на объекте , и в появившемся меню выбираешь Create code. Этим способом можно одинаковым объектам добавить разный код в момент когда они создадуться.

Поделиться сообщением


Ссылка на сообщение

О как, век живи, век учись! 9e73d54a.png

 

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

 

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

Ибо это бред, ведь все переменные и так доступны, и незачем усложнять себе жизнь.

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

 

И на будущее скажу что в редакторе комнаты (room) держишь Ctrl и нажимаешь правой мышкой на объекте , и в появившемся меню выбираешь Create code. Этим способом можно одинаковым объектам добавить разный код в момент когда они создадуться.

В данном случае мне это не пригодится, но в будущем обязательно найду применение, ибо не знал что так можно.

Поделиться сообщением


Ссылка на сообщение

Как в ГМе сделать Special Stage аля Соник 2? Вернее, как все это привязать к y-координате и выводить на экран? ok done

Изменено пользователем 1001

Поделиться сообщением


Ссылка на сообщение
Гость
Эта тема закрыта для публикации сообщений.

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×