如何在GM Studio中放大像素画而不会模糊?


9

我正在Game Maker Studio中创建一个使用像素画的游戏。当我启动游戏时,所有放大的纹理都非常模糊。(小巧的人不会发生。)

例如,这张图片

不错:)

在游戏中的渲染如下:

模糊:(

是否有将小像素调整为大像素而不是模糊像素的方法


不要对纹理使用有损压缩,而要使用bmp,gif或png,它们都支持无损存储
棘手怪胎

当您使用像素画时,通常希望避免任何调整大小,因为像素画总是受此困扰。当无法避免调整大小时,应使用最近邻插值法来保留清晰的外观。当您想要调整大小时,请使用矢量图形而不是栅格图形。不幸的是,由于我不熟悉GMStudio,因此我无法为您提供帮助。
菲利普

添加示例。
mpower

我不知道游戏开发商的可能性,但是您可能想禁用所有比例过滤并启用最近邻比例缩放。
Appleshell

1
如果我没记错的话,原始的Spelunky(由Game Maker制造)具有一个启用线性缩放的DLL。该链接上提供了源。看一看。
Anko

Answers:


13

从某些资源中找到了解决方案。转到“全局游戏设置”,然后转到任何平台扰流板(例如“ Windows”或“ Android”),然后选择标题为“ Graphics”的扰流板并关闭“在像素之间插入颜色”。玩得开心 :)


这在技术上是
可行的

您的意思是说,他们不必理会默认设置吗?!我刚刚检查了一下,发现它在游戏制造商8.0中默认为其他方式。这只是胡说...。顺便说一句。
user64742

5

没有人愿意手动放大每个精灵。它不仅是一个草率的工作空间,而且非常专业。在全局游戏设置中关闭插值无效时,我找到了一种解决方案。

texture_set_interpolation(false);

:)希望这对您将来的工作有所帮助。


如果针对多个平台,这是最好的解决方案,您不必为每个平台都单击“在像素之间插入颜色”!正是我想要的。
Logan Pickup's

1

我通常为此使用photoshop或GIMP(比例尺/最近邻)

但是要在GM:S精灵编辑器itslef中执行此操作,我使用Stretch命令而不是scale并将其设置为POOR质量。这将保持Blocky的感觉来自在atm上运行的游戏的筛选器,该精灵在GM:S本身中得到了放大

上面是我在ATM上玩的游戏,我就是这么做的!


尽管这确实可以在某些分辨率上进行放大,但并非适用于所有分辨率,但GM还具有默认情况下压缩纹理的习惯。使用拉伸功能时,在不同分辨率下缩放比例也会不同,这将导致我们试图避免的模糊。但是,对于(比例尺/最近邻),请+1。
Tom'Blue'Piddock 2014年

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事件中。
  • B)将screen_begin脚本放置在Begin Step事件中。
  • C)将screen_end脚本放置在End Step事件中。

并将该对象放置在游戏的第一个也是最重要的房间中,将其标记为持久,并确保没有重复的对象。

您完成了,现在有了不错的清晰缩放比例= D


由于我喜欢像素艺术,因此我想在不模糊的情况下进行缩放。所以这无法回答我的问题,这可能吗?
mpower

Game Maker Studio不太可能使用不良的缩放算法进行缩放,该算法通常会使不希望的缩放模糊。使用我刚刚在答案中编辑的教程来尝试缩放的清晰背景。
汤姆(Tom'Blue)Piddock,

您是否考虑过在图形程序中预先缩放背景纹理?
菲利普

有两种方法是好的。第一种是在此处合并一些脚本;第二种是在使用图像之前预先缩放图像。
mpower

太好了,很高兴它有所帮助。
汤姆·布鲁”皮多克,

-2

使用texture_set_interpolation(false)使它吸引他们的是。


这可能是正确的,但您能否进一步介绍?通常,我们会在答案中寻找更多细节。
Gnemlock
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.