巨大な画像のスプライトの表示

投稿者:Material 305033 1 mini cfm_ 投稿日:2016/01/26 12:22

RPGで、拡張画像を使って画面より大きなサイズの画像を表示しようとすると、自動的に縮小されてしまいます。
こちらを参照:拡張画像操作で分からないことが
試した結果、サイズは同じにできますが、どう表示しても解像度が落ちました。

1320*1284pxの画像を表示させると、このように画質が落ちます



テストのゲーム(ID,passともに0と入れると入れます)
http://rmake.jp/games/29317/limited_play

setSpriteRect()の代わりにこの関数を使えば、元の画像と同じサイズで描画ができます。

#imgwは元画像の幅、imghは高さ。(w0,h0は切り抜く範囲)
#あとの引数はsetSpriteRect()と同じです。
def setSpriteRect2(img,imgw,imgh,x0,y0,w0,h0,x1,y1,w1,h1)
  w2=imgw/512
  h2=imgh/384
  if w2<=1&&h2<=1
    setSpriteRect(img,x0,y0,w0,h0,x1,y1,w1,h1)
  elsif w2>h2
    setSpriteRect(img,x0/w2,y0/w2,w0/w2,h0/w2,x1,y1,w1*w2,h1*w2)
  else
    setSpriteRect(img,x0/h2,y0/h2,w0/h2,h0/h2,x1,y1,w1*h2,h1*h2)
  end
end




コメントする

コメントするには、ログインする必要があります。

コメント一覧

            mini mosmoss(投稿日:2016/10/04 08:08, 履歴)
切り取り範囲がうまくいかなくて
  if w2>h2
    setSpriteRect(img,x0/w2,y0/w2,w0/w2,h0/w2,x1,y1,w1*w2,h1*w2)
  else
    setSpriteRect(img,x0/h2,y0/h2,w0/h2,h0/h2,x1,y1,w1*h2,h1*h2)
  end

上のようにw0、h0もw2やh2で割るとうまくいったのですがどうでしょうか?
お手すきで確認お願いします(_ _)
Material 305033 1 mini cfm_(投稿日:2016/10/04 21:44, 履歴)
訂正ありがとうございます。
書いてから時間がたちすぎてちょっと自信がないですが、修正しておきました。
なお今みたら、w2とh2が1未満のとき逆に拡大されちゃうじゃんって思ったので、条件分岐を足しておきました。
def setSpriteRect2(img,imgw,imgh,x0,y0,w0,h0,x1,y1,w1,h1)
  w2=imgw/512
  h2=imgh/384
  if w2<=1&&h2<=1
    setSpriteRect(img,x0,y0,w0,h0,x1,y1,w1,h1)
  elsif w2>h2
    setSpriteRect(img,x0/w2,y0/w2,w0/w2,h0/w2,x1,y1,w1*w2,h1*w2)
  else
    setSpriteRect(img,x0/h2,y0/h2,w0/h2,h0/h2,x1,y1,w1*h2,h1*h2)
  end
end

            mini mosmoss(投稿日:2016/10/05 01:52, 履歴)
本当だ(@ω@)
更新版のおかげで問題なく動きました(^ω^っ)3
            mini mosmoss(投稿日:2016/10/02 01:35, 履歴)
テストゲームがちょっと面白かったです
Cdv30200 aoi icon mini aoihikawa(投稿日:2016/01/26 16:53, 履歴)
2DRPG系で一枚絵を使用する場合、
最大サイズが512*384に収まるサイズになるよう、
一度自動で画像の圧縮が行われます

その後、関数で拡大表示を行っているため、
小さい画像を拡大して表示することとなり、
画質が劣化する、という訳です


そのため、綺麗な画像をそのまま表示したい場合、
予め512*384以下のサイズで
1枚絵を用意しておけば
劣化なく、表示が出来るようになります