Пятница, 19 Апреля 2024, 07:10

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Записи участника » belsen [6]
Результаты поиска
belsenДата: Четверг, 19 Июля 2012, 16:32 | Сообщение # 1 | Тема: Вопрос - Ответ (Game Maker)
был не раз
Сейчас нет на сайте
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
belsenДата: Среда, 18 Июля 2012, 16:13 | Сообщение # 2 | Тема: Вопрос - Ответ (Game Maker)
был не раз
Сейчас нет на сайте
Исправил для генерации целых чисел. Но симтомы те же. Вот код с комментариями, может я неправильно алгоритм использую.

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
belsenДата: Среда, 18 Июля 2012, 15:44 | Сообщение # 3 | Тема: Вопрос - Ответ (Game Maker)
был не раз
Сейчас нет на сайте
Здравствуйте, хочу сделать генерацию припятствий при создании комнаты. За это будет отвечать объект 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 только сегодня
belsenДата: Вторник, 28 Декабря 2010, 08:31 | Сообщение # 4 | Тема: Литература про разработку игр
был не раз
Сейчас нет на сайте
2Glob1
Хоть убей, но нигде не могу найти. Везде только раздачи со сканом книги. Если тебя не затруднит, кинь мне ссылку на раздачу с диском.
belsenДата: Понедельник, 27 Декабря 2010, 17:05 | Сообщение # 5 | Тема: Литература про разработку игр
был не раз
Сейчас нет на сайте
И все же, может кто-нибудь поделится ссылочкой на диск от книги?
belsenДата: Четверг, 23 Декабря 2010, 15:39 | Сообщение # 6 | Тема: Литература про разработку игр
был не раз
Сейчас нет на сайте
Поделитесь, пожалуйста, диском к "Увлекательному созданию трёхмерных компьютерных игр без программирования" happy
Форум игроделов » Записи участника » belsen [6]
  • Страница 1 из 1
  • 1
Поиск:

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