Tutorial:Fine Tile-based Scrolling (日本語)
これはタイル・ベースのスクロールで掲載したコードを展開したものです。タイルの大きさを 16x16 および ウィンドウの大きさを 320x240 と仮定しています。
function love.load() -- our tiles tile = {} for i=0,3 do -- タイル画像の個数を 3 から 1 つ引きます。 tile[i] = love.graphics.newImage( "tile"..i..".png" ) end -- マップ (無作為のガラクタ + コピーと貼り付け) map={ { 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0}, { 3, 1, 0, 0, 2, 2, 2, 0, 3, 0, 3, 0, 1, 1, 1, 0, 0, 3, 0, 0, 0}, { 3, 1, 0, 0, 2, 0, 2, 0, 3, 0, 3, 0, 1, 0, 0, 0, 0, 0, 3, 0, 0}, { 3, 1, 1, 0, 2, 2, 2, 0, 0, 3, 0, 0, 1, 1, 0, 0, 0, 0, 0, 3, 0}, { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 3}, { 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 2}, { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 0, 2, 2, 2, 0, 3, 3, 3, 0, 1, 1, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0}, { 0, 2, 0, 0, 0, 3, 0, 3, 0, 1, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 1}, { 0, 2, 0, 0, 0, 3, 0, 3, 0, 1, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0}, { 0, 2, 2, 2, 0, 3, 3, 3, 0, 1, 1, 1, 0, 2, 2, 2, 0, 0, 0, 0, 0}, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 0, 1, 0, 0, 2, 2, 2, 0, 3, 0, 3, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0}, { 0, 1, 0, 0, 2, 0, 2, 0, 3, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, { 0, 1, 1, 0, 2, 2, 2, 0, 0, 3, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0}, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 3}, { 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0}, { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, { 0, 1, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} } -- マップ変数 map_w = #map[1] -- マップにおける第一列目の幅を取得します。 map_h = #map -- マップの高さを取得します。 map_x = 0 map_y = 0 map_display_buffer = 2 -- ビューポイントの後部および前部へタイルを一つバッファする必要があります。 -- そうしなければ、タイルは視点へ置かれてしまうしまうため、それは望ましくありません。 map_display_w = 20 map_display_h = 15 tile_w = 16 tile_h = 16 end function draw_map() offset_x = map_x % tile_w offset_y = map_y % tile_h firstTile_x = math.floor(map_x / tile_w) firstTile_y = math.floor(map_y / tile_h) for y=1, (map_display_h + map_display_buffer) do for x=1, (map_display_w + map_display_buffer) do -- この条件ブロックはマップの端を超える許可してしまうことに注意してください。 if y+firstTile_y >= 1 and y+firstTile_y <= map_h and x+firstTile_x >= 1 and x+firstTile_x <= map_w then love.graphics.draw( tile[map[y+firstTile_y][x+firstTile_x]], ((x-1)*tile_w) - offset_x - tile_w/2, ((y-1)*tile_h) - offset_y - tile_h/2) end end end end function love.update( dt ) local speed = 300 * dt -- get input if love.keyboard.isDown( "up" ) then map_y = map_y - speed end if love.keyboard.isDown( "down" ) then map_y = map_y + speed end if love.keyboard.isDown( "left" ) then map_x = map_x - speed end if love.keyboard.isDown( "right" ) then map_x = map_x + speed end if love.keyboard.isDown( "escape" ) then love.event.quit() end -- 境界の確認、マップの束縛をされたくない場合はこのセクションを削除します。 if map_x < 0 then map_x = 0 end if map_y < 0 then map_y = 0 end if map_x > map_w * tile_w - map_display_w * tile_w - 1 then map_x = map_w * tile_w - map_display_w * tile_w - 1 end if map_y > map_h * tile_h - map_display_h * tile_h - 1 then map_y = map_h * tile_h - map_display_h * tile_h - 1 end end function love.draw() draw_map() end
そのほかの言語
Dansk –
Deutsch –
English –
Español –
Français –
Indonesia –
Italiano –
Lietuviškai –
Magyar –
Nederlands –
Polski –
Português –
Română –
Slovenský –
Suomi –
Svenska –
Türkçe –
Česky –
Ελληνικά –
Български –
Русский –
Српски –
Українська –
עברית –
ไทย –
日本語 –
正體中文 –
简体中文 –
Tiếng Việt –
한국어
More info