GM Studioでピクセルアートをぼかさずに拡大するにはどうすればよいですか?


9

ピクセルアートを使用するゲームをGame Maker Studioで作成しています。ゲームを起動すると、すべての拡大されたテクスチャが本当にぼやけています。(小さなものには起こりません。)

たとえば、この画像

いいね:)

このようにゲームでレンダリングします:

ぼやけている:(

とにかく、ぼやけたピクセルの代わりに小さなピクセル大きなピクセルにサイズ変更することはありますか?


テクスチャに不可逆圧縮を使用せず、代わりにbmp、gif、またはpngを使用してください。それらはすべて無損失ストレージをサポートしています
ラチェットフリーク

ピクセルアートを使用している場合、ピクセルアートは常にサイズ変更の影響を受けるため、通常はサイズ変更を避けます。サイズ変更を回避できない場合は、最近隣内挿を使用してサクサクした外観を維持する必要があります。サイズを変更する場合は、ラスターグラフィックではなく、ベクターグラフィックを使用してください。申し訳ありませんが、GMStudioに慣れていないため、それをお手伝いすることはできません。
Philipp

例が追加されました。
mpower 2013年

ゲームメーカーの可能性はわかりませんが、すべてのスケールフィルタリングを無効にして、最近傍スケーリングを有効にする必要があります。
Appleshell 2013年

1
私の記憶が正しければ、元のSpelunky(ゲームメーカーで作成)には線形スケーリングを有効にするDLLがありました。ソースはそのリンクから入手できます。見てください。
あんこ

回答:


13

いくつかのリソースから解決策を見つけました。グローバルゲーム設定に移動し、任意のプラットフォームスポイラー(「Windows」や「Android」など)に移動します。「グラフィック」というタイトルのスポイラーを選択し、「ピクセル間の色の補間」をオフにします。楽しんで :)


これは技術的には機能しますが、ピクセルアートが整数以外の係数(2.5xなど)でスケールアップされたために変化する可能性があります
liggiorgio

彼らはそれをデフォルト設定にする気にならなかったということですか?!?私はちょうどそれをチェックし、それがゲームメーカー8.0で逆にデフォルトであることを確認しました。これはただのナッツです。
user64742 2017年

5

誰もがすべてのスプライトを手動でスケールアップする必要があることに対処したくありません。それはずさんなワークスペースであるだけでなく、非常に専門的ではないものになってしまいます。グローバルゲーム設定で補間をオフにしても解決しない場合の解決策を見つけました。

texture_set_interpolation(false);

:)これがあなたの将来の努力に役立つことを願っています。


これは、複数のプラットフォームをターゲットとする場合の最良のソリューションです。単一のプラットフォームごとに「ピクセル間の色の補間」をクリックする必要はありません。まさに私が探していたもの。
ローガンピックアップ、2016

1

私がこれに対して一般的に行うことは、フォトショップまたはGIMP(スケール/ニアレストネイバー)を使用することです

しかし、GM:Sスプライトエディター自体でそれを行うには、スケールの代わりにストレッチコマンドを使用して、品質を低に設定します。それはブロッキーのような感じを保ちますatmで作業しているゲームのスクリーンショット、スプライトはGM:S自体で拡大されます

上記は、ATMで動作するゲームです。


これは特定の解像度のアップスケーリングでは機能しますが、すべての解像度では機能しませんが、GMにはデフォルトでテクスチャを圧縮する癖もあります。また、ストレッチ機能を使用すると、解像度によって異なるスケーリングが行われ、回避しようとしているぼやけが発生します。ただし、(Scale / Nearest Neighbour)の言及については+1。
トム「ブルー」ピドック14年

1

マップの背景タブでスケール機能をオフにします。縮尺が合っていない場合は、背景のテクスチャが、現在の部屋/マップと同じサイズであることを確認してください。

または、この投稿を使用して、(できれば)鮮明な結果でバックグラウンドをアップスケールするバックグラウンドスクリプトを作成します。

これはサーフェスを利用しているので、さらにヘルプが必要な場合は、この投稿で多くの情報を提供します。


編集:

私の答えに戻ると、これはまったく問題がなく、チュートリアルの内容が必要であることに気付きました。ここにあります:

ステップ1:希望のスケールを選択します。部屋ごとにビューを使用し、ポートWとポートHを適切にスケーリングします。したがって、たとえば、2のスケールを使用している場合は、GMのルームエディターでは次のようになります。

これがすべての部屋で一貫していることが重要です。部屋がたくさんある場合は、コード*を使用すると簡単です。値が一定ではなく、複数の異なるスケールをサポートできるので、私はその方法を使用することを好みます。

ステップ2:screen_init、screen_begin、screen_endの3つのスクリプトを作成します。各スクリプトの内容は次のとおりです...

引用元: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)End Stepイベントにscreen_endスクリプトを配置します。

そして、そのオブジェクトをゲームの最初と最初の部屋に配置し、永続的であるとマークし、重複がないことを確認します。

これで完了です。これで、すっきりとした素晴らしいスケーリング= Dが得られました。


ピクセルアートが大好きなので、ぼかさずにスケーリングしたいので、これは私の質問の答えにはなりませんが、可能ですか?
mpower 2013年

可能性は低いですが、Game Makerスタジオは、望ましくないスケーリングをぼやけさせる、悪いアップスケーリングアルゴリズムでスケーリングを行っています。私の回答で編集したばかりのチュートリアルを使用して、スケーリングのある鮮明な背景を試してください。
トム「ブルー」ピドック

グラフィックプログラムで背景テクスチャの事前スケーリングを検討しましたか?
フィリップ

2つの方法が適しています。1つはここでいくつかのスクリプトを組み合わせる方法です。2つ目は、使用する前に画像を事前にスケーリングする方法です。
mpower 2013年

すばらしいです。
トム「ブルー」ピドック

-2

texture_set_interpolation(false)そのまま描画させるために使用します。


これは正しいかもしれませんが、もう少し詳しく説明してもらえますか?私たちは通常、回答でもう少し詳細を探します。
Gnemlock 2017年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.