"use strict";
var TILEWIDTH = 4;
var Map = [
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ],
[ 0, 0, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ],
[ 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 3, 0, 3, 0, 0, ],
[ 0, 3, 3, 7, 7, 7, 7, 7, 7, 7, 7, 7, 6, 6, 3, 6, 3, 6, 3, 0, ],
[ 0, 3, 3, 6, 6, 7, 7, 7, 2, 2, 2, 7, 7, 7, 7, 7, 7, 7, 6, 3, ],
[ 0, 0, 3, 3, 6, 6, 6, 7, 7, 2, 2, 2, 7, 7, 2, 2, 2, 7, 7, 6, ],
[ 0, 3, 3,10,11, 3, 3, 6, 7, 7, 2, 2, 2, 2, 2, 2, 1, 1, 7, 6, ],
[ 0, 0, 3, 3, 3, 0, 3, 3, 3, 7, 7, 2, 2, 2, 2, 7, 7, 1, 1, 6, ],
[ 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 7, 7, 7, 7, 2, 7, 6, 3, 1, 3, ],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 6, 6, 7, 2, 7, 6, 3, 1, 3, ],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 6, 7, 7, 7, 6, 3, 1, 1, ],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 6, 7, 7, 7, 6, 3, 1, ],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 6, 6, 6, 7, 7, 6, 3, ],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 6, 6, 6, 6, ],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 6, 6, ],
];
function start( imf, imp )
{
TUGames.GX.Init( "main", 640, 480 ); // キャンバスIDと描画領域を指定してライブラリ初期化
let player = TUGames.GX.LoadTextureDiv( imp, 8, 8 ); // 指定されたファイルをテクスチャ画像として分割して読み込む
let field = TUGames.Primitive.CreateTile( TUGames.GU.Program.T2F_V3F, 20 * 15 );
field.mTexture = TUGames.Texture.Create2p( imf );
let px = 300, py = 220, an = 0;
TUGames.PF.StartLoop( 60, // fpsを指定してループを開始し、更新処理と描画処理を登録
()=>{ // 更新処理
if( TUGames.PF.IsKeyDown( 37 ) ){ px--; an = 2; } // 引数で指定されたキーが押されている場合
if( TUGames.PF.IsKeyDown( 38 ) ){ py--; an = 6; } // 引数で指定されたキーが押されている場合
if( TUGames.PF.IsKeyDown( 39 ) ){ px++; an = 4; } // 引数で指定されたキーが押されている場合
if( TUGames.PF.IsKeyDown( 40 ) ){ py++; an = 0; } // 引数で指定されたキーが押されている場合
},
()=>{ // 描画処理
TUGames.GX.Clear(); // 設定された背景色で画面初期化
// マップ描画
let ta = 1 / TILEWIDTH;
for( let i = 0, my = 0; my < 15; my++ ){
for( let mx = 0; mx < 20; mx++, i++ ){
let m = Map[ my ][ mx ];
field.setRect2( TUGames.GU.BufType.TEXCOORD, i, ( m & 3 ) * ta, ( m >> 2 ) * ta, ta, ta );
field.setRect3( TUGames.GU.BufType.POSITION, i, mx << 5, my << 5, 0, 32, 32 );
}
}
field.draw();
// プレイヤー
TUGames.GX.DrawTexture( player[ an | ( ( px + py ) >> 4 & 1 ) ], px, py, 1, 32, 32 ); // 指定されたテクスチャを、座標XYZへ幅高さWHにして描画
GL.flush(); // 描画内容を画面に反映
} );
}
window.onload = function()
{
document.addEventListener( 'keydown', ( ev ) =>{ ev.preventDefault(); } );
document.addEventListener( 'keyup' , ( ev ) =>{ ev.preventDefault(); } );
let imf = new Image();
imf.onload = function()
{
let imp = new Image();
imp.onload = function()
{
start( imf, imp );
}
imp.src = "../assets/player.png";
}
imf.src = "../assets/field.png";
}
戻る back