Як я можу масштабувати піксельне мистецтво без розмивання в GM Studio?


9

Я створюю гру в студії Game Maker, яка використовує зображення пікселів. Коли я запускаю гру, всі масштабовані текстури дійсно розмиваються. (З маленькими це не буває.)

Наприклад, це зображення

приємно :)

показує в грі так:

розмита :(

Чи є можливість змінити розмір маленьких пікселів у великі пікселі замість розмитих пікселів ?


не використовуйте стиснення втрат для текстур, а використовуйте bmp, gif або png, всі вони підтримують сховище без втрат
грохот freak

Якщо у вас є піксельне мистецтво, ви зазвичай хочете уникати зміни розміру, тому що піксельне зображення завжди страждає від цього. Коли зміни розміру неможливо уникнути, слід використовувати інтерполяцію найближчого сусіда, щоб зберегти хрусткий вигляд. Коли ви хочете змінити розмір, використовуйте векторну графіку замість растрової. Я, на жаль, не можу вам у цьому допомогти, оскільки я не знайомий з GMStudio.
Філіпп

приклади додані.
mpower

Я не знаю можливостей для виробників ігор, але ви хочете відключити всю фільтрацію масштабів і включити масштабування найближчого сусіда.
Яблуко

1
Якщо я добре пам’ятаю, оригінальний Spelunky (зроблений в Game Maker) мав DLL, який дозволяв лінійне масштабування. Джерело доступне за цим посиланням; гляньте.
Анко

Відповіді:


13

Знайшов рішення з якогось ресурсу. Перейдіть до глобальних налаштувань гри, потім перейдіть до будь-якого спойлера платформи (наприклад, "Windows" чи "Android"), виберіть спойлер під назвою "Графіка" та вимкніть "Інтерполяція кольорів між пікселями". Приємно :)


Це технічно працює, хоча піксельне зображення може призвести до зміни внаслідок збільшення масштабу за допомогою
нецілого

Ви маєте на увазі, що вони не намагалися зробити це налаштуванням за замовчуванням?!? Я щойно перевірив, і чи за замовчуванням це інший спосіб у гейммейкер 8.0. Це просто горіхи .... Чудова відповідь btw.
user64742

5

Ніхто не хоче мати справу з необхідністю вручну масштабувати кожен спрайт; Мало того, що це неохайний робочий простір, але він є дуже непрофесійним. Я знайшов рішення, коли відключення інтерполяції в глобальних налаштуваннях гри не працювало.

texture_set_interpolation(false);

:) Я сподіваюся, що це допоможе вам у ваших майбутніх починаннях.


Це найкраще рішення, якщо орієнтуватися на кілька платформ, вам не потрібно натискати "Інтерполювати кольори між пікселями" для кожної платформи! Саме те, що я шукав.
Логан Пікап

1

Зазвичай я для цього використовую або Photoshop, або GIMP (масштаб / Найближчий сусід)

Але щоб зробити це в редакторі спрайт GM: S itlef, я використовую команду Stretch замість масштабу і встановлюю її на ПОЗОРНУ якість. Це дозволить зберегти Блоцький вид почуттяСкріні з гри, що працює над атм, спрайт збільшений в GM: S

Нагорі - гра, яка працює на банкоматах, я робив саме це!


Хоча це працює для збільшення масштабів певних резолюцій, але це не для всіх, GM також має звичку стискати текстури за замовчуванням. Це також може по-різному змінювати різні роздільні здатності при використанні функцій розтягування, це призведе до розмиття, якого ми намагаємось уникнути. Однак +1 для згадки (Шкала / Найближчий сусід).
Том «Блакитний» Піддок

1

Вимкніть функцію масштабу на вкладці "Фони" на карті. Якщо це здається поза шкалою, переконайтеся, що ваша текстура заднього ґрунту має такий же розмір, як і кімната / карта, в якій ви знаходитесь.

Крім того, використовуйте цю публікацію тут, щоб створити фоновий скрипт, який підніме масштаб заднього шару з (сподіваємось) чіткими результатами.

При цьому використовуються поверхні, тому якщо вам потрібна додаткова допомога з цього приводу - цей пост надає багато інформації.


Редагувати:

Повертаючись до своїх відповідей, я зрозумів, що це не до нуля, і потрібен зміст підручника. Ось:

КРОК 1 : Виберіть потрібну шкалу. Використовуйте подання для кожної кімнати і зробіть відповідним чином масштабований порт W і порт H. Так, наприклад, якби ви використовували шкалу 2 ... це виглядатиме так у редакторі кімнати GM.

Важливо, щоб це відповідало всім приміщенням. Якщо у вас багато кімнат, це може бути простіше зробити за допомогою коду *. Я вважаю за краще робити це саме так, оскільки тоді значення не є постійними, і я можу підтримувати декілька різних масштабів.

КРОК 2 : Створіть 3 сценарії, screen_init, screen_begin та screen_end. Ось що йде у кожному зі сценаріїв ...

Цитата від: screen_init

// screen base(view_wview and view_hview)
screen_x = 0;
screen_y = 0;
screen_w = 320;
screen_h = 240;
screen_scale = 2;

// create a surface for the whole screen to be drawn on
screen = surface_create(screen_w,screen_h);

// this will destroy the screen object if surfaces are not supported on the graphics card, reverting to the viewport method
if screen = -1{instance_destroy();}

Цитата від: screen_begin

// this draws the surface on the screen
surface_reset_target();
draw_clear(0);
draw_set_blend_mode_ext(bm_one, bm_zero);
draw_surface_stretched(screen,screen_x,screen_y,screen_w*screen_scale,screen_h*screen_scale);
draw_set_blend_mode(bm_normal);
screen_refresh();

Цитата від: screen_end

// this sets surface 'screen' as the drawing target for everything in the game, so all drawing will be done on this surface and not on the game screen
surface_set_target(screen);

КРОК 3 : Зараз у нас є сценарії, але куди вони дістаються? Створіть об’єкт. Як, наприклад, obj_screen, objScreen, o_screen чи будь-що інше, і виконайте наступне:

  • A) розмістіть screen_initscript у події Create.
  • В) розмістіть скрипт screen_begin у події Початок кроку.
  • C) розмістіть скрипт screen_end у події End Step.

І розмістіть цей об’єкт у першій і головній кімнаті вашої гри, позначте його стійким та переконайтесь, що в ньому немає його дублікатів.

Ви закінчили, а тепер приємного, чіткого масштабування = D


Я хочу масштабувати його без розмивання, оскільки я люблю піксельні мистецтва. Тому це не відповідає на моє запитання. Чи можливо це?
mpower

Мабуть, студія Game Maker робить масштабування за допомогою алгоритму масштабування, що часто робить небажане розмивання. Спробуйте підручник, який я щойно відредагував у своїй відповіді, щоб спробувати чіткий фон із масштабуванням.
Том «Блакитний» Піддок

Чи розглядали ви попередньо масштабувати фонову текстуру в графічній програмі?
Філіпп

Два способи добре. Перше поєднання деяких сценаріїв тут. Друге попереднє масштабування зображень перед їх використанням.
mpower

Відмінно, радий, що це допомогло.
Том «Блакитний» Піддок

-2

Використовуйте texture_set_interpolation(false)для того, щоб намалювати їх так, як є.


Це може бути правильним, але ви можете детальніше ознайомитись? Ми зазвичай шукаємо трохи детальніше у своїх відповідях.
Gnemlock
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.