Помогите с кодом Game Maker
| |
DarkEliphant | Дата: Пятница, 08 Августа 2014, 15:28 | Сообщение # 1 |
был не раз
Сейчас нет на сайте
| Всем привет! У меня появилась такая проблема. В моей игре рандомно генерируется земля. Помогите сделать так, чтобы края и углы острова были закруглены другими спрайтами травы. Каждая клетка земли или воды представляет собой объект.
примерно такими спрайтами должны скругляться края:
Заранее спасибо.
|
|
| |
Saitei | Дата: Пятница, 08 Августа 2014, 15:48 | Сообщение # 2 |
старожил
Сейчас нет на сайте
| DarkEliphant, закруглены? Чтоб квадратности не было или как?
|
|
| |
Raven84 | Дата: Пятница, 08 Августа 2014, 16:00 | Сообщение # 3 |
старожил
Сейчас нет на сайте
| DarkEliphant, Если я правильно понял,то просто проверяй условием,к примеру: Если справа и сверху от объекта вода,а слева и снизу земля,тогда спрайт у объекта закругленный правый верхний угол. И т.д. по аналогии. Это конечно,если я тебя правильно понял.
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 |
постоянный участник
Сейчас нет на сайте
| Нету Вынеси это в отдельный скрипт чтобы не мозолило глаза и все, а по другому никак. Возможно, конструкция 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 |
был не раз
Сейчас нет на сайте
| Спасибо ребят, я уже все сделал В общем во время генерации карты, каждый квадрат сохраняется в массив со своим значением, вода=0, трава=1. А следующем шагом цикл просматривает массив и просматривает как расположена вода относительно земли. Еще раз всем спасибо за помощь, особенно тем кто не поленился и написал код
|
|
| |
|