Comment agrandir le pixel art sans flou dans GM Studio?

9

Je crée un jeu dans Game Maker Studio qui utilise le pixel art. Lorsque je lance le jeu, toutes les textures à grande échelle sont vraiment floues. (Cela n'arrive pas aux petits.)

Par exemple, cette image

agréable :)

rend dans le jeu comme ceci:

floue :(

Est-il possible de redimensionner les petits pixels en gros pixels au lieu de pixels flous ?

mpower
la source
n'utilisez pas de compression avec perte pour les textures, utilisez plutôt bmp, gif ou png, ils prennent tous en charge le stockage sans perte
ratchet freak
Lorsque vous avez du pixel art, vous voulez généralement éviter tout redimensionnement, car le pixel art en souffre toujours. Lorsque le redimensionnement ne peut pas être évité, il doit utiliser l'interpolation du plus proche voisin pour conserver l'apparence croustillante. Lorsque vous souhaitez redimensionner, utilisez des graphiques vectoriels au lieu de graphiques raster. Je ne peux malheureusement pas vous aider car je ne connais pas GMStudio.
Philipp
exemples ajoutés.
mpower
Je ne connais pas les possibilités des créateurs de jeux mais vous voudriez désactiver tout le filtrage d'échelle et activer la mise à l'échelle du plus proche voisin.
Appleshell
1
Si je me souviens bien, le Spelunky d'origine (fabriqué dans Game Maker) avait une DLL qui permettait une mise à l'échelle linéaire. La source est disponible sur ce lien; regarde.
Anko

Réponses:

13

Trouvé une solution à partir d'une ressource. Allez dans Paramètres de jeu globaux, puis accédez à n'importe quel spoiler de plate-forme (par exemple "Windows" ou "Android"), choisissez le spoiler intitulé "Graphics" et désactivez "Interpoler les couleurs entre les pixels". S'amuser :)

meriler98
la source
Cela fonctionne techniquement, bien que le pixel art puisse être modifié en raison de la mise à l'échelle avec un facteur non entier (par exemple 2,5x)
liggiorgio
Vous voulez dire qu'ils n'ont pas pris la peine d'en faire le réglage par défaut?!? Je viens de vérifier et c'est par défaut dans l'autre sens dans Game Maker 8.0. Ce n'est que des fous .... Excellente réponse btw.
user64742
5

Personne ne veut avoir à faire évoluer manuellement chaque sprite; non seulement c'est un espace de travail bâclé, mais il se révèle très peu professionnel. J'ai trouvé une solution lorsque la désactivation de l'interpolation dans les paramètres de jeu globaux ne fonctionnait pas.

texture_set_interpolation(false);

:) J'espère que cela vous aidera dans vos projets futurs.

Toby Jeffry Staryth
la source
C'est la meilleure solution si vous ciblez plusieurs plates-formes, vous n'avez pas à cliquer sur "Interpoler les couleurs entre pixels" pour chaque plate-forme! Exactement ce que je cherchais.
Logan Pickup du
1

Ce que je fais généralement pour cela est d'utiliser Photoshop ou GIMP (échelle / voisin le plus proche)

Mais pour le faire dans l'éditeur de sprites GM: S lui-même, j'utilise la commande Stretch au lieu de l'échelle et la règle sur la qualité PAUVRE. Cela gardera la sensation de BlockyScreenie d'un jeu im travaillant sur atm, le sprite est agrandi dans GM: S lui-même

Ci-dessus est un jeu im workin sur ATM, je l'ai fait!

David Chircop
la source
Bien que cela fonctionne pour la mise à l'échelle de certaines résolutions, ce ne sera pas le cas pour toutes, GM a également l'habitude de compresser les textures par défaut. Cela pourrait également évoluer différemment sur différentes résolutions lors de l'utilisation de la fonctionnalité d'étirement, ce qui entraînera le flou que nous essayons d'éviter. Cependant, +1 pour la mention (Échelle / Voisin le plus proche).
Tom 'Blue' Piddock
1

Désactivez la fonction d'échelle dans l'onglet Arrière-plans de la carte. Si cela semble hors échelle, assurez-vous que votre texture pour le fond est de la même taille que la pièce / carte dans laquelle vous vous trouvez.

Vous pouvez également utiliser ce post ici pour créer un script d'arrière-plan qui mettra à l'échelle le fond avec des résultats nets (espérons-le).

Cela utilise des surfaces, donc si vous avez besoin d'aide supplémentaire à ce sujet - ce message fournit beaucoup d'informations.


ÉDITER:

Pour en revenir à mes réponses, j'ai réalisé que ce n'était pas à la hauteur et avait besoin du contenu du tutoriel. C'est ici:

ÉTAPE 1 : Choisissez l'échelle que vous souhaitez. Utilisez une vue pour chaque pièce et faites évoluer le port W et le port H de manière appropriée. Ainsi, par exemple, si vous utilisiez une échelle de 2 ... cela ressemblerait à ceci, dans l'éditeur de salle de GM.

Il est important que cela soit cohérent pour toutes les pièces. Si vous avez beaucoup de pièces, il pourrait être plus facile de le faire via le code *. Je préfère le faire de cette façon, car les valeurs ne sont pas constantes et je peux prendre en charge plusieurs échelles différentes.

ÉTAPE 2 : Créez 3 scripts, screen_init, screen_begin et screen_end. Voici ce qui se passe dans chacun des scripts ...

Citation de: 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();}

Citation de: 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();

Citation de: 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);

ÉTAPE 3 : Nous avons maintenant des scripts, mais où vont-ils? Créez un objet. Comme obj_screen, objScreen, o_screen ou autre, et procédez comme suit:

  • A) placez screen_initscript dans l'événement Create.
  • B) placez le script screen_begin dans l'événement Begin Step.
  • C) placez le script screen_end dans l'événement End Step.

Et placez cet objet dans la première salle de votre jeu, marquez-le comme persistant et assurez-vous qu'il n'y a pas de doublons.

Vous avez terminé et avez maintenant une mise à l'échelle nette et précise = D

Tom 'Blue' Piddock
la source
Je veux le mettre à l'échelle sans flou car j'adore les pixel arts, donc cela ne répond pas à ma question, est-ce possible?
mpower
Il est peu probable que Game Maker studio effectue la mise à l'échelle avec un mauvais algorithme de mise à l'échelle qui rend souvent la mise à l'échelle indésirable floue. Utilisez le tutoriel que je viens de modifier dans ma réponse pour essayer un arrière-plan net avec mise à l'échelle.
Tom 'Blue' Piddock
Avez-vous envisagé de mettre à l'échelle votre texture d'arrière-plan dans un programme graphique?
Philipp
Deux façons sont bonnes: premièrement, la combinaison de certains scripts ici. La seconde consiste à pré-mettre à l'échelle les images avant de les utiliser.
mpower
Excellent, content que cela ait aidé.
Tom 'Blue' Piddock
-2

Utilisez texture_set_interpolation(false)pour le faire dessiner tel quel.

Gree
la source
C'est peut-être correct, mais pourriez-vous entrer dans les détails? Nous recherchons normalement un peu plus de détails dans nos réponses.
Gnemlock