Среда, 20 Ноября 2024, 18:25

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
Вопрос - Ответ (Game Maker)
BrightSpotДата: Четверг, 12 Июля 2012, 11:07 | Сообщение # 3401
заслуженный участник
Сейчас нет на сайте
Quote (Dva_Kota)
но то что они работают медленно - известный факт
самый неприятный минус гм-а... очень медленная работа при не очень больших запросах(2000х2000 кубов в 3д выдают 10-15 фпс и компик далеко не слабенький)



Более мощный компьютер глючит быстрее и точнее.
Dva_KotaДата: Четверг, 12 Июля 2012, 11:28 | Сообщение # 3402
заслуженный участник
Сейчас нет на сайте
Сделал небольшой пример сравнения скорости выполнения кода в объекте, скрипта, и скрипта в скрипте, может быть кому-то интересно:
скачать


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

Energy Wars
belsenДата: Среда, 18 Июля 2012, 15:44 | Сообщение # 3403
был не раз
Сейчас нет на сайте
Здравствуйте, хочу сделать генерацию припятствий при создании комнаты. За это будет отвечать объект obj_rocks_creator. У него в действии "Room start" прописываю такой код:

Code

{
repeat(random_range(35, 50))
{
     do
     {
         new_rock_x = random(room_width);                            
         new_rock_y = random(room_height);
     }
     until (place_meeting(new_rock_x, new_rock_y, all))     // Если в этой точке уже есть другой объект, продолжить генерацию координат
      
     instance_create(new_rock_x, new_rock_y, obj_rock);
}
}


Но при выполнении игра по-ходу входит в бесконечный цикл и повисает с черным экраном.

Сразу извиняюсь если вопрос нубский, начал изучать GML только сегодня
GameMixДата: Среда, 18 Июля 2012, 15:59 | Сообщение # 3404
старожил
Сейчас нет на сайте
belsen, random_range(35, 50) - функция возвращает случайное вещественное число от 35 до 50 (дробные числа в этом интервале тоже считаются). Т.е. у тебя может действие повторяться хоть раз 50. + Шанс, что у тебя будет выпадать нужная координата очень мал. Т.к. лучше генерировать такую координату, при помещении в которую спрайт объекта не будет пересекать другой. Тем более не следует использовать генерирование случайных вещественных чисел от 0 до размера комнаты, т.к. координаты объекта исчисляются в целых значениях.

Да и сам способ генерации препятствия прост, но в то же время не самый лучший для такого дела. При генерировании координат нужно исключать координаты, в которые входит спрайт созданного объекта. Но сама проблема не в скобках repeat, а в условии until и содержании скобок после do.


Steel Standoff - 2D аркада.
Мои статьи


Сообщение отредактировал GameMix - Среда, 18 Июля 2012, 16:07
belsenДата: Среда, 18 Июля 2012, 16:13 | Сообщение # 3405
был не раз
Сейчас нет на сайте
Исправил для генерации целых чисел. Но симтомы те же. Вот код с комментариями, может я неправильно алгоритм использую.

Code
{
repeat(irandom_range(35, 50))                    // Генерируется количество препятствий в комнате от 35 до 50
{
      do
      {
          new_rock_x = irandom(room_width);                    // Генерируется координата x препятствия
          new_rock_y = irandom(room_height);                   // Генерируется координата y препятствия
      }
      until (place_meeting(new_rock_x, new_rock_y, all))    // Если в этой точке уже есть другой объект, сгенерировать новые координаты
        
      instance_create(new_rock_x, new_rock_y, obj_rock);  // Если в сгенерированных координатах нет другого объекта, создать в нем новый экземпляр
}
}


Пробовал уменьшить кол-во итераций repeat(irandom_range(1, 3)). Все равно тоже самое. Дело не в том, что он не может долго найти подходящие координаты, а скорее всего в этой строчке:
until (place_meeting(new_rock_x, new_rock_y, all))


Сообщение отредактировал belsen - Среда, 18 Июля 2012, 16:18
GameMixДата: Среда, 18 Июля 2012, 16:38 | Сообщение # 3406
старожил
Сейчас нет на сайте
Как вариант - создавать дополнительную базу с координатами, а потом отсеивать из базы занятые координаты. Я так раньше делал. Довольно быстро генерировались объекты. smile

Steel Standoff - 2D аркада.
Мои статьи


Сообщение отредактировал GameMix - Среда, 18 Июля 2012, 16:39
hero564Дата: Среда, 18 Июля 2012, 20:02 | Сообщение # 3407
Made in Ukraine
Сейчас нет на сайте
belsen, почему не сделать через for ?
GameMixДата: Среда, 18 Июля 2012, 20:05 | Сообщение # 3408
старожил
Сейчас нет на сайте
hero564, тут не в for дело, а в способе подбора координат.

Steel Standoff - 2D аркада.
Мои статьи
hero564Дата: Среда, 18 Июля 2012, 20:09 | Сообщение # 3409
Made in Ukraine
Сейчас нет на сайте
belsen, проблема решена! вместо
Code
until (place_meeting(new_rock_x, new_rock_y, all))

введи
until not (place_meeting(new_rock_x, new_rock_y, all))

Добавлено (18.07.2012, 20:09)
---------------------------------------------

Quote (GameMix)
hero564, тут не в for дело, а в способе подбора координат.

GameMix, понял я уже... happy
GameMixДата: Среда, 18 Июля 2012, 20:14 | Сообщение # 3410
старожил
Сейчас нет на сайте
Quote (hero564)
until not (place_meeting(new_rock_x, new_rock_y, all))

Даже от этого ничего не изменится. У меня моим способом быстро генерируется, без задержки при запуске, но мелкий баг с накладыванием объектов друг на друга все портит angry


Steel Standoff - 2D аркада.
Мои статьи


Сообщение отредактировал GameMix - Среда, 18 Июля 2012, 20:15
hero564Дата: Среда, 18 Июля 2012, 20:21 | Сообщение # 3411
Made in Ukraine
Сейчас нет на сайте
GameMix, я не знаю только что пробовал , все получилось , ща скрин закину

Добавлено (18.07.2012, 20:21)
---------------------------------------------

вот , только у меня деревья вместо камней

GameMixДата: Среда, 18 Июля 2012, 20:29 | Сообщение # 3412
старожил
Сейчас нет на сайте
hero564, да, точно, работает. Ну тогда мне можно теперь не торопиться с генерированием. happy Можно выбрать, какой результат больше подходит beslen'у.


Steel Standoff - 2D аркада.
Мои статьи
hero564Дата: Среда, 18 Июля 2012, 20:39 | Сообщение # 3413
Made in Ukraine
Сейчас нет на сайте
GameMix, можно еще сделать выравнивание по сетке,

Добавлено (18.07.2012, 20:39)
---------------------------------------------
hero564, тогда походу должно получится что-то вроде твоего варианта

GameMixДата: Среда, 18 Июля 2012, 20:47 | Сообщение # 3414
старожил
Сейчас нет на сайте
Quote (hero564)
hero564, тогда походу должно получится что-то вроде твоего варианта

Да, ещё и получится с таким же багом, как у меня - наложением объектов.


Steel Standoff - 2D аркада.
Мои статьи


Сообщение отредактировал GameMix - Среда, 18 Июля 2012, 20:47
hero564Дата: Среда, 18 Июля 2012, 20:54 | Сообщение # 3415
Made in Ukraine
Сейчас нет на сайте
GameMix, действительно, тогда можно создавать, выравнивать по сетке, проверять столкновения(если накладываются то удалять) , и проверять сколько обьектов осталось создать
как то так

Добавлено (18.07.2012, 20:53)
---------------------------------------------
все вышеуказанное в цикл запихнуть

Добавлено (18.07.2012, 20:54)
---------------------------------------------
тогда удобнее через for будет

belsenДата: Четверг, 19 Июля 2012, 16:32 | Сообщение # 3416
был не раз
Сейчас нет на сайте
GameMix, hero564 большое спасибо за помощь!

Все таки я пошел своим путем. Может кому-то пригодится:

Сделал шаг сетки по горизонтали и вертикали равным 1. Origin сделал по центру спрайта препятствия.
В Creation Code комнаты прописал следующее:

Code

{       
       rocks_num = irandom_range(100, 150);                    // Здесь задается количество препятствий
       while(rocks_num >= 0)
       {
           new_rock_x = irandom_range(16, room_width - 16);                           //  Генерируются координаты нового препятсвия (значения взяты (16, room_width - 16) и (16, room_height - 16)
           new_rock_y = irandom_range(16, room_height - 16);                          //  для того, чтобы препятствия не вылазили за пределы экрана)
              
           if !position_meeting(new_rock_x + 16, new_rock_y, obj_rock)              // Здесь происходит проверка перекрытия с уже созданным экземпляром справа,
               && !position_meeting(new_rock_x-16, new_rock_y, obj_rock)           // слева,
               && !position_meeting(new_rock_x, new_rock_y+16, obj_rock)          // сверху,
               && !position_meeting(new_rock_x, new_rock_y-16, obj_rock)           // снизу,
               && !position_meeting(new_rock_x + 16, new_rock_y + 16, obj_rock)// в правом верхнем углу,
               && !position_meeting(new_rock_x - 16, new_rock_y + 16, obj_rock) // в левом верхнем углу,
               && !position_meeting(new_rock_x + 16, new_rock_y - 16, obj_rock) // в правом нижнем углу,
               && !position_meeting(new_rock_x - 16, new_rock_y - 16, obj_rock)  // в левом нижнем углу
            {
               instance_create(new_rock_x, new_rock_y, obj_rock);                      // Если перекрытия не происходит, создается новый экземпляр
               rocks_num -= 1;                    // и количество оставшихся препятствий уменьшается на 1
            }
       }
}




Вариант конечно получился довольно неуклюжий, но вполне работоспособный и препятствия создаются без привязки к сетке.
Работает это все довольно шустро.


Сообщение отредактировал belsen - Пятница, 20 Июля 2012, 07:55
GameMixДата: Четверг, 19 Июля 2012, 17:20 | Сообщение # 3417
старожил
Сейчас нет на сайте
belsen, быстро ты в GML растёшь! smile

Steel Standoff - 2D аркада.
Мои статьи
k0feДата: Пятница, 20 Июля 2012, 22:50 | Сообщение # 3418
BRONX
Сейчас нет на сайте
У меня есть код
Code
draw_text(5,50, global.name)

С помощью него, игрок на экране видит имя персонажа, которое он записал в начале....
И всё бы хорошо, но если имя игрока написано кириллицей, то GM его не видит wacko


мой стрим, который я редко включаю, но зато на нём я делаю игры
МистерИксДата: Пятница, 20 Июля 2012, 22:51 | Сообщение # 3419
Текстовик
Сейчас нет на сайте
ЙаСаня, чтобы была видна кириллица, нужно создать новый шрифт (font), в полях указать числа 0 и 255, а в креэйт:
draw_set_font(имя_шрифта)



Три Пути - текстовый квест
Not Quite Heroes - пародийная jRPG в разработке
k0feДата: Суббота, 21 Июля 2012, 03:06 | Сообщение # 3420
BRONX
Сейчас нет на сайте
МистерИкс, спасибо! Шрифт уже был, а вот числа в полях не заполнил, вот и вся проблема smile

Добавлено (21.07.2012, 01:41)
---------------------------------------------
У меня есть персонаж со спрайтом 16х16px
Как заставить его ходить "по клеточкам"?
Что-бы один его ход был равен 16px
За пример можно взять roguelike игры

Добавлено (21.07.2012, 03:06)
---------------------------------------------
Ап вопроса wacko


мой стрим, который я редко включаю, но зато на нём я делаю игры
Поиск:

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