画像について弱い部分

たとえば、SGEである画像を読み込もうとする。

gui.create(800,600)
texture.load(1, "fake.png")

この時、ファイル fake.png が invalid (不正)なファイルだとしたら。事故が人為かは問わず、とにかくファイルが正しいpngのフォーマットになっていなかったらどうなるか。
当然、エラーになって、落ちる。
ちなみにこれをpcall()で囲んでもこける。

pcall(texture.load, 1, "fake.png") -- こける!

つまるところ、textureには画像以外を食わせるな、と言う話である。

実際のゲーム製作にどう影響するか。

たとえば、スクリーンショットを撮って、セーブデータに紐づけるとする。この場合、スクリーンショットpngファイルを生で放り出したとすると、そのpngファイルをユーザーにいじられる可能性がある。
ではどうするか。

  1. 自前でこれから読み込むファイルがpngかどうか確認する。
  2. ユーザーからいじられないようにする。

1は正直敷居が高いような気がする。
2の方がマシだろうか。

  1. ランダムにファイル名を決めて、一旦スクリーンショットを外部のファイルに書き出す。
  2. スクリーンショットの画像を開いて、中身をデータベースに登録する。
  3. 作った外部ファイルを削除する。

逆にその画像を必要とする時は、逆の手順。

  1. ランダムにファイル名を決めて、データベースの中身を書き出す。
  2. textureに読み込む。
  3. 作った外部ファイルを削除する。

なんか迂遠なことをしているような気がする。