Keep your place in this quest

Log in or sign up for free to subscribe, follow lesson progress, and access more learning content.

ゲームのエクスポート

  1. 上部バーのエクスポートアイコンをクリックします
  2. ゲームの保存先とファイル名を選択します
  3. エンジンがプロジェクトを埋め込んだスタンドアロンの.exeを作成します
  4. この単一ファイルを配布します - 他のファイルは必要ありません!

エクスポートされたゲーム:

  • エディタインターフェースなしで動作します
  • すべての画像、シーン、コードを含んでいます
  • アセットを保護するために暗号化されています

ヒントとベストプラクティス

パフォーマンス

  • 画像サイズは適切に保ちます(ピクセル、ハイレゾではなく)
  • もう必要のないオブジェクトは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 - ゲームを作成し、エンジンを作成しないでください。