2009-08-13 8 views
3

J'utilise Löve2D pour écrire un petit jeu. Löve2D est un moteur de jeu open source pour Lua. Le problème que je rencontre est qu'un filtre antialias est automatiquement appliqué à vos sprites lorsque vous le dessinez à des positions non entières.Désactiver l'antialiasing dans Löve2D

love.graphics.draw(sprite, x, y) 

Ainsi, lorsque x ou y n'est pas rond (par exemple, x = 100,24), l'image-objet apparaît floue. La même chose se produit lorsque la taille de l'image-objet n'est pas paire, car (x, y) pointe vers le centre de l'image-objet. Par exemple, un sprite de 31x30 grand apparaîtra à nouveau flou, car ses pixels sont peints en positions non entières.

Depuis que j'utilise pixel art, je veux éviter cela jusqu'au bout, sinon l'art est détruit par cet effet. La solution de contournement que j'utilise jusqu'à présent consiste à forcer les coordonnées à être arrondies en jetant le code avec des appels à math.floor() et en forçant tous les sprites à avoir des tailles paires en ajoutant une ligne ou une colonne de pixels transparents au programme de peinture , si besoin.

Existe-t-il une commande pour désactiver l'anticrénelage que je peux appeler au démarrage du programme?

Répondre

2

Dans le cas où quelqu'un est intéressé, j'ai demandé dans d'autres lieux et a trouvé que ce que je demande est déjà demandé que les longs métrages: http://love2d.org/forum/tracker.php?p=2&t=7

Ainsi, la version actuelle de Löve que je suis en utilisant (0.5.0) ne permet toujours pas de désactiver le filtre antialias, mais la fonctionnalité est déjà dans la version SVN du moteur.

+0

Je considérerais que cette réponse (ou l'une des autres) est la bonne, de sorte qu'elle soit plus visible pour les personnes qui visitent la question :) – Codahk

4

Si vous désactivez l'anti-aliasing, vous obtiendrez un alias, d'où le nom! Pourquoi dessinez-vous à des positions non-intégrales, et que voulez-vous qu'il fasse à propos de ces parties fractionnaires? Les arrondir à la valeur la plus proche? Les tronquer? Et s'ils sont négatifs?)

Personnellement, je laisserais les graphiques de bas niveau seuls et modifierais votre code pour utiliser des accesseurs pour x et y qui effectuent l'arrondi ou la troncature ce dont vous avez besoin. Cela garantit que votre pixel art finit par être dessiné sur des limites entières tout en conservant l'anti-aliasing dont vous pourriez avoir besoin plus tard.

3

Une autre solution possible consiste à utiliser math.floor() pour arrondir vos entiers comme une solution de contournement bon marché.