Tiniest2Dで2Dゲームを作る
エクスポートとベストプラクティス
Lesson 11 of 11 • 10 XP
Keep your place in this quest
Log in or sign up for free to subscribe, follow lesson progress, and access more learning content.
ゲームのエクスポート
- 上部バーのエクスポートアイコンをクリックします
- ゲームの保存先とファイル名を選択します
- エンジンがプロジェクトを埋め込んだスタンドアロンの
.exeを作成します - この単一ファイルを配布します - 他のファイルは必要ありません!
エクスポートされたゲーム:
- エディタインターフェースなしで動作します
- すべての画像、シーン、コードを含んでいます
- アセットを保護するために暗号化されています
ヒントとベストプラクティス
パフォーマンス
- 画像サイズは適切に保ちます(ピクセル、ハイレゾではなく)
- もう必要のないオブジェクトは
removeObject()で削除します - レンダリング順序を整理するためにレイヤーを使用します
組織
- オブジェクトと画像に意味のある名前を付けます
- コードを文書化するためにコメントを使用します
- 関連する変数を一緒にグループ化します
デバッグ
- 変数の値を出力するために
print()を使用します - 印刷メッセージはゲームウィンドウに表示されます
- オブジェクトが壁を通過する場合は衝突タイプを確認します
よくある問題
オブジェクトが衝突しない:
- 衝突タイプを確認します(両方のオブジェクトに適切なタイプが必要です)
- オブジェクトがシーンに追加されていることを確認します
- スプライトにコライダーが有効になっていることを確認します
オブジェクトが壁を通過する:
- 壁は
COLLISION_STATIC()であるべきです - 移動するオブジェクトは
COLLISION_DYNAMIC()であるべきです - 非常に速いオブジェクトはトンネル効果があるかもしれません - 速度を減少させるか、衝突境界を増加させます
カメラがプレイヤーを追従しない:
onUpdate()でカメラ位置を更新します、start()だけではダメです- カメラ位置は視界の中心であることを覚えておいてください
クイックリファレンスカード
// アセットの作成
var img = Sprite(16, 16)
var scene = Scene()
var sfx = Audio()
var obj = Object("Name")
// オブジェクト操作
setX(obj, 100)
setY(obj, 100)
setSprite(obj, img)
setCollisionType(obj, COLLISION_DYNAMIC())
addObject(scene, obj)
// スプライト操作
fillSprite(img, 255, 0, 0, 255) // 赤で塗りつぶす
setPixel(img, 0, 5, 5, 0, 255, 0, 255) // フレーム0のピクセル(5,5)を設定
var color = getPixel(img, 0, 5, 5) // (5,5)の[r,g,b,a]を取得
setAnimationFPS(img, 24) // アニメーション速度を設定
var fps = getAnimationFPS(img) // アニメーション速度を取得
// 物理(速度 + 重力)
setGravityY(scene, 300) // シーンの重力を設定
setVelocityX(obj, 100) // 右に移動
setVelocityY(obj, -200) // 上にジャンプ
// アニメーション制御
setFrame(obj, 0) // 特定のフレームに設定
var frame = getFrame(obj) // 現在のフレームを取得
var count = getFrameCount(obj) // 総フレーム数
// シーン制御
setScene(scene)
resetScene(scene)
setBackgroundColor(scene, 135, 206, 235) // 空の青
// シーンクエリ
var obj = getObjectAt(scene, mx, my) // ポイントでのオブジェクト
var hits = getObjectsInBox(scene, x, y, 32, 32) // エリア内のオブジェクト
var enemy = getObjectByName(scene, "enemy") // 名前で検索
var all = getAllObjects(scene) // すべてのオブジェクトを取得
var count = getObjectCount(scene) // オブジェクトのカウント
var coins = getObjectsBySprite(scene, coinSprite) // スプライトで
var enemies = getObjectsByCollisionType(scene, COLLISION_DYNAMIC())
// オーディオ
var handle = playAudio(sfx)
if (isAudioPlaying(handle)) { }
stopAudio(handle)
// カメラ(位置 = 視界の中心)
setCameraX(scene, x)
setCameraY(scene, y)
setCameraZoom(scene, 3.0) // 縦240ワールドユニットを表示
// 画面と座標変換
var w = getScreenWidth()
var h = getScreenHeight()
var worldPos = screenToWorld(mouseX, mouseY) // [worldX, worldY]
var screenPos = worldToScreen(objX, objY) // [screenX, screenY]
// ウィンドウモード(エクスポートされたゲームにのみ影響)
setWindowMode(WINDOW_MAXIMIZED()) // デフォルト
setWindowMode(WINDOW_FULLSCREEN()) // ボーダレスフルスクリーン
setWindowMode(WINDOW_WINDOWED()) // 通常のウィンドウ
// キーボード入力
if (isKeyPressed(KEY_SPACE())) { }
if (isKeyHeld(KEY_LEFT())) { }
// マウス入力
if (isMouseButtonPressed(MOUSE_LEFT())) { }
var mx = getMouseX()
var my = getMouseY()
// ランダム数と数学
var r = random() // 0.0から1.0
var n = randomInt(1, 10) // 1から10
var x = clamp(14, 0, 10) // 10
var y = lerp(0, 100, 0.5) // 50
var snapped = round(15.7) // 16
var dir = sign(-8) // -1
var power = pow(2, 3) // 8
var angle = PI() / 2 // 1.5708... ラジアン
var bob = sin(angle) // 三角関数はラジアンを使用します
var deg = rad2deg(angle) // 90度
// UIスタイルスタック
uiPushElementColor(28, 40, 70, 220)
uiPushFontColor(255, 220, 120)
uiLabel("READY", 4, 4)
uiPopFontColor()
uiPopElementColor()
// ストレージ(ゲームデータの保存/読み込み)
var data = [100, "Player", true]
save(getAppDataPath() + "/MyGame/save.dat", data)
var loaded = load(getAppDataPath() + "/MyGame/save.dat")
if (fileExists(getAppDataPath() + "/MyGame/save.dat")) { }
deleteFile(getAppDataPath() + "/MyGame/old.dat")
// ゲーム制御
quitGame() // ゲームを終了
// ゲームループ
func start() { }
func onUpdate(dt) { }
func onCollision(a, b) { }
func end() { }
Tiniest 2D Pixel Engine - ゲームを作成し、エンジンを作成しないでください。