Пятница, 08 Ноября 2024, 19:43

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Помогите с кодом Game Maker
DarkEliphantДата: Пятница, 08 Августа 2014, 15:28 | Сообщение # 1
был не раз
Сейчас нет на сайте
Всем привет!
У меня появилась такая проблема. В моей игре рандомно генерируется земля. Помогите сделать так, чтобы края и углы острова были закруглены другими спрайтами травы. Каждая клетка земли или воды представляет собой объект.


примерно такими спрайтами должны скругляться края:



Заранее спасибо.
SaiteiДата: Пятница, 08 Августа 2014, 15:48 | Сообщение # 2
старожил
Сейчас нет на сайте
DarkEliphant, закруглены? Чтоб квадратности не было или как?
Raven84Дата: Пятница, 08 Августа 2014, 16:00 | Сообщение # 3
старожил
Сейчас нет на сайте
DarkEliphant, Если я правильно понял,то просто проверяй условием,к примеру:
Если справа и сверху от объекта вода,а слева и снизу земля,тогда спрайт у объекта закругленный правый верхний угол.
И т.д. по аналогии.
Это конечно,если я тебя правильно понял. smile


Super Knight Story (в разработке)
Idolzzz - игра доступна в Steam и Play Market
Oliver's Adventures in the Fairyland
DarkEliphantДата: Пятница, 08 Августа 2014, 16:06 | Сообщение # 4
был не раз
Сейчас нет на сайте
Цитата Saitei ()
DarkEliphant, закруглены? Чтоб квадратности не было или как?


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

вот так примерно:

Добавлено (08.08.2014, 16:06)
---------------------------------------------

Цитата Raven84 ()
просто проверяй условием

Да, по началу я так и хотел, просто громоздко получается. Я думал может есть специальный алгоритм?
XDominatorДата: Пятница, 08 Августа 2014, 16:48 | Сообщение # 5
постоянный участник
Сейчас нет на сайте
Нету smile Вынеси это в отдельный скрипт чтобы не мозолило глаза и все, а по другому никак. Возможно, конструкция switch:case тебе как то поможет уменьшить объем кода, но все ситуации в любом случае только прописывать вручную.

Добавлено (08.08.2014, 16:48)
---------------------------------------------
Ну кстати как вариант можно конечно сделать извращенную конструкцию, например закинуть все спрайты-округления в массив и задать каждому из них отдельные параметры условий, когда он должен появиться, в виде строки например(как пример для закругления слева-вниз задать строку "34", если обозначить каждую сторону света через 1, 2, 3, 4 против часовой стрелки начиная справа), затем перебирать все ячейки мира и по соответствию условий в конкретной ячейке всем возможным строкам условий, назначать нужный спрайт. Это менее затратно в плане кода и позволяет легко добавлять\убирать условия (например для земель с другими текстурами), но конечно же сложнее в плане алгоритмизации.


Ghaarp

The soul lighter(Android, logic)

Zzzzombie RAGE!!!(For android)
DarkEliphantДата: Пятница, 08 Августа 2014, 17:39 | Сообщение # 6
был не раз
Сейчас нет на сайте
Всем спасибо за идеи! Буду пробовать.
FadeBakerДата: Пятница, 08 Августа 2014, 18:43 | Сообщение # 7
JavaSE Game Developer
Сейчас нет на сайте
Вот код на Java. Думаю, суть поймешь. Комментировать код лень.
Код
protected void renderBlock(Graphics g, Level level, TextureRegion[][] image, int x, int y, int layer) {
    boolean u, d, l, r;
    
    if (layer == 0) {
       u = level.getBlock(x, y - 1, layer) == air;
       d = level.getBlock(x, y + 1, layer) == air;
       l = level.getBlock(x - 1, y, layer) == air;
       r = level.getBlock(x + 1, y, layer) == air;
    } else {
       u = !level.getBlock(x, y - 1, layer).connects(this);
       d = !level.getBlock(x, y + 1, layer).connects(this);
       l = !level.getBlock(x - 1, y, layer).connects(this);
       r = !level.getBlock(x + 1, y, layer).connects(this);
    }
    
    int i = size / 2;
    int xx = x * size;
    int yy = y * size;
    
    g.draw(image[l ? 0 : 1][u ? 0 : 1], xx + 0, yy + 0, !l && !u ? srand.get(3) * 90 : 0);
    g.draw(image[r ? 2 : 1][u ? 0 : 1], xx + i, yy + 0, !r && !u ? srand.get(3) * 90 : 0);
    g.draw(image[l ? 0 : 1][d ? 2 : 1], xx + 0, yy + i, !l && !d ? srand.get(3) * 90 : 0);
    g.draw(image[r ? 2 : 1][d ? 2 : 1], xx + i, yy + i, !r && !d ? srand.get(3) * 90 : 0);
}


Уроки по GM
Minecraft 2D на GM
— Мои проекты —
Blood Harvest [2D] — Original
Blood Harvest [2D]: Remastered Edition
Adventure Craft [2D] — Sandbox
Space Shock [2D] — Scroll Shooter
Intel® Core™ i5-3570K 3.40 GHz, 8 GB RAM, GeForce GTX 750 Ti, Monitor: LG 23EA63V-P.
WhoAmIДата: Воскресенье, 10 Августа 2014, 22:26 | Сообщение # 8
Сумасшедший программист
Сейчас нет на сайте
Код

if(place_free(x,y-32)){
image_index = закругленее_земли_вверх
}
if(place_meeting(x,y+32,вода){
image_index = закругление_земли_вниз
}
if(place_meeting(x-32,y,вода){
image_index = закругление_земли_вправо
}
if(place_meeting(x+32,y,вода)){
image_index = закругление_земли_влево
}


Думаю дальше самому понятно.

Главное усвоить принцип функции place_meeting(координатаX,координатаY,объект).
Проверяет определённый объект, в определённых координатах.

Надеюсь правильно понял вопрос.


Struggle #Gamiron12
DarkEliphantДата: Понедельник, 11 Августа 2014, 10:04 | Сообщение # 9
был не раз
Сейчас нет на сайте
Спасибо ребят, я уже все сделал biggrin
В общем во время генерации карты, каждый квадрат сохраняется в массив со своим значением, вода=0, трава=1. А следующем шагом цикл просматривает массив и просматривает как расположена вода относительно земли.
Еще раз всем спасибо за помощь, особенно тем кто не поленился и написал код smile
  • Страница 1 из 1
  • 1
Поиск:

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