Difference between revisions of "FAQ (日本語)"

m (画像の色化け)
m (画像の色化け)
Line 73: Line 73:
 
== 画像の色化け ==
 
== 画像の色化け ==
 
Q. 画像の描画前に前景色を設定すると画像の色がおかしくなります。
 
Q. 画像の描画前に前景色を設定すると画像の色がおかしくなります。
 +
 
A. [[love.graphics.setColor (日本語)|love.graphics.setColor]] の設定値は画像の描画にも影響を与えます。これを応用することで画像の色調を変更できます。しかし、正常に描画する前は、初期値に戻す必要があります:
 
A. [[love.graphics.setColor (日本語)|love.graphics.setColor]] の設定値は画像の描画にも影響を与えます。これを応用することで画像の色調を変更できます。しかし、正常に描画する前は、初期値に戻す必要があります:
  

Revision as of 23:52, 31 August 2017

恐らく初心者が LÖVE に関して疑問に思うであろうよく尋ねられる質問

いつから LÖVE はありますか?

rude によれば:

実際に、私はそれがどのように始まったか覚えていません。実のところ、いつ始めたのかはよく覚えていません。もしかすると己への挑戦に過ぎないだけなのかもしれません。しかしながら、それがどういう物語であっただろうかということを私に書くことを誰かが強いたならば:

えーと、その頃の私は簡単に使えて、あまり悩むところがない全ての環境で動作する 2D 中心のゲームフレームワークを探しておりましたが、そのどれもが私の要求を満たすものではありませんでした。多くのエンジンと利用可能なフレームワークが存在しましたが、それらは 2D ゲームで使用するのに API に魅力がなく、あまりにも 3D に傾倒していました。そうして私は自分用の API の開発に取り組み始めました。この上なく幸福な麦芽酒のように、ついに子供たちが笑い、共に自由に遊ぶことができる Z 軸を知らぬ輝かしく自由な世界。 *一粒の涙*

……など。

どうして LÖVE にはベクトル用のライブラリが実装されていないの?

slime によれば:

ベクトルオブジェクトを LÖVE の API で使用すると発生する主な問題は Lua にあり、頻繁に使用すると大量の不要情報を生成してしまう傾向があります。したがって LÖVE の関数で使用することに対して、それらを要求してしまうと最適な実行効率を妨げてしまうことになります。一部のエンジンではベクトルを実装するために過酷な努力をしてしまいます: https://www.youtube.com/watch?v=wTjyM7d7_YA#t=23m6s

そのせいで更に API が面倒かつ美しくないものになりかねないため、ベクトルに依存した関数の異形を製作することは望んでいません。

もっと議論する

アンチエイリアシングを無効にするには (Disable a blurry)

(TODO: 復帰後に追記。)

よくある質問の一つです。これはエミュレーター、レトロPCからの移植、アップスケーリング処理、 8bit ビデオコンソール風の低解像度のドット絵を使用したゲームで問題 (座標ずれ、余計なフィルタがかかってしまう) になることがあります。 解決方法は下記のとおりです。

図形、線描

function love.draw()
	love.graphics.setLineStyle('smooth')		-- 誤: 線描時のアンチエイリアシング有効化 (デフォルト値)
	love.graphics.line(100, 100, 100, 200)

--	love.graphics.setLineWidth(1)			-- 誤: 線の幅を変えてもフィルタは有効なので効果はありません。
	love.graphics.setLineStyle('rough')		-- 正: 線描時のアンチエイリアシング無効化
	love.graphics.line(200, 100, 200, 200)
end


文字コード関連の異常終了 (Using a require/dofile when crashing on windows)

Q. require または dofile でソースファイルをインクルードして起動すると、すぐに終了してしまい正常に動作しない。 lovec.exe で確認すると次のようなエラーが出力されています。

X:\hogehige_adventure>lovec .
Error: Syntax error: hogehige_axis.lua:66: '}' expected near '・

stack traceback:
        [C]: at 0x7fffd5f43af0
        [C]: in function 'require'
        main.lua:4: in main chunk
        [C]: in function 'require'
        [string "boot.lua"]:429: in function <[string "boot.lua"]:275>
        [C]: in function 'xpcall'

A. インクルード先のファイルに問題があります。

  • インクルード先のファイルに文法エラーがあるか確認してください。必要であればインクルード先のファイル単体でのテストを行ってください。
  • インクルード先のファイルの文字コードが UTF-8 であるかどうか確認してください。そのままでは LOVE は ShiftJIS を正常に処理できませんので、ダメ字 (エスケープ文字(バックスラッシュ、円マーク)である 0x5C) がファイルにあると上述のエラーになります。
  • まれにマルウェアの感染が疑われます。アンチウィルスソフトウェアでシステム全体を検査・修復してください。

love.exe 使用時は、コンソール (Powershell, DOSプロンプト) にはエラーメッセージを出力しないため、すべてのエラーメッセージを参照できるわけではありません。開発中は love.exe ではなく lovec.exe を使用することをお勧めします。 (keywords: Windows, require, dofile, ShiftJIS, exected near, syntax error, escape char)

画像の色化け

Q. 画像の描画前に前景色を設定すると画像の色がおかしくなります。

A. love.graphics.setColor の設定値は画像の描画にも影響を与えます。これを応用することで画像の色調を変更できます。しかし、正常に描画する前は、初期値に戻す必要があります:

restc = {}

function love.load()
	restc = love.graphics.getColor()

	love.graphics.setColor(55, 110, 237, 255)
	love.graphics.setBackgroundColor(228, 232, 244, 255)

	bgimage = love.graphics.newImage("IMG_20161127_081708.jpg")
end


function resetColor()
	love.graphics.setColor(255, 255, 255 ,255)	-- setColor は画像にも影響します。
end


function love.draw()
		resetColor()
		love.graphics.draw(bgimage)
end

フォント

--
-- 倍角文字とルビの試験実装。あと、フォントのアンチエイリアシング無効化サンプル。
-- 現在では、倍角文字はあまり使用されませんが、ゲーム内で1980年代の日本語ワードプロセッサーやマイコンを
-- 実装したい場合などにいいかもしれません。
--
-- 判明している問題: TrueType フォントではアンチエイリアシングを完全に無効化できないようです (LOVE 0.10.2で確認)
-- これを解決するには、ビットマップフォントを用意して Quad と love.graphics.draw, Canvas を応用した
-- ビットマップフォントレンダリングエンジンを自作する必要があるかもしれません。 
--
-- TODO: 後で コードスニペットへ移動。

function love.load()
	mainFont = love.graphics.newFont("ipaexg.ttf", 32);
	rubiFont = love.graphics.newFont("ipaexg.ttf", 16);
	mainFont:setFilter('nearest', 'nearest', 0)
	love.graphics.setLineStyle('rough')

--	IPAexゴシック体 = love.graphics.newFont("ipaexg.ttf", 32);
--	love.graphics.setFont(IPAexゴシック体);

--	love.graphics.setDefaultFilter('nearest', 'nearest', 0)
end

function love.draw()
--	love.graphics.push()
--	love.graphics.scale(2, 1)
--	love.graphics.print("横倍角", 0, 0)
--	love.graphics.pop()

	love.graphics.setFont(rubiFont);
	love.graphics.print(" よこ  ばい  かく",32, 16)
	love.graphics.setFont(mainFont)
	love.graphics.printf("横倍角", 32, 32, 800, "left", 0, 2.00, 1.00, 0, 0, 0, 0, 0)
	love.graphics.printf("斜体", 256, 32, 800, "left", 0, 2.00, 1.00, 0, 0, -0.25, 0, 0) -- -0.2.5 を -0.50 にしても良い。

	love.graphics.printf("1:2縦倍角", 32, 72, 800, "left", 0, 1.00, 2.00, 0, 0, 0, 0, 0)

--	love.graphics.printf("1:4縦倍角", 32, 148, 800, "left", 0, 1.00, 4.00, 0, 0, 0, 0, 0)

	love.graphics.printf("0.51:02縦倍角", 32, 148, 800, "left", 0, 0.51, 2.00, 0, 0, 0, 0, 0)

end


-- 参考文献
-- FUJITSU OASYS 30 AFⅢ 添付説明書
--

関連