首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

基於 OGEngine 開發 Android 2048 遊戲:核心場景構建與渲染邏輯

     編輯:Java 相關知識

專案簡介

OGEngine 是一款開源 Android 2D 遊戲引擎,基於 OpenGL ES 封裝,提供精靈、場景、物理、音頻等模組。本文展示如何用 OGEngine 快速構建 2048 遊戲主場景(GameScene)。

場景初始化核心代碼 (initView)

private void initView() {
    // 1. 遊戲背景
    AnimatedSprite game_bg = new AnimatedSprite(0, 0, Res.GAME_BG, getVertexBufferObjectManager());
    this.attachChild(game_bg);

    // 2. 中央遊戲主體組 (4x4 格子容器)
    mGameGroup = new GameGroup(this);
    mGameGroup.setCentrePosition(this.getCameraCenterX(), this.getCameraCenterY());
    this.attachChild(mGameGroup);

    // 3. 2048 LOGO
    AnimatedSprite game_logo = new AnimatedSprite(20, 20, Res.GAME_LOGO, getVertexBufferObjectManager());
    this.attachChild(game_logo);

    // 4. 最高分背景板 (右上角)
    bestScoreBg = new AnimatedSprite(0, 20, Res.GAME_SCORE_BG_BEST, getVertexBufferObjectManager());
    bestScoreBg.setRightPositionX(this.getCameraRightX() - 20);
    this.attachChild(bestScoreBg);

    tBestScore = new Text(0, bestScoreBg.getY() + 50,
            FontRes.getFont(ConstantUtil.FONT_SCORE_NUM),
            SharedUtil.getBestScore(getActivity()) + "", 4,
            getVertexBufferObjectManager());
    tBestScore.setCentrePositionX(bestScoreBg.getCentreX());
    this.attachChild(tBestScore);

    // 5. 當前分背景板 (最高分左側)
    currScoreBg = new AnimatedSprite(0, bestScoreBg.getY(), Res.GAME_SCORE_BG_NOW, getVertexBufferObjectManager());
    currScoreBg.setRightPositionX(bestScoreBg.getLeftX() - 20);
    this.attachChild(currScoreBg);

    tCurrScore = new Text(0, currScoreBg.getY() + 50,
            FontRes.getFont(ConstantUtil.FONT_SCORE_NUM),
            "0", 4, getVertexBufferObjectManager());
    tCurrScore.setCentrePositionX(currScoreBg.getCentreX());
    this.attachChild(tCurrScore);

    // 6. 新遊戲/撤銷按鈕等其他 UI 元素...
    // initButtons();
}

關鍵類說明

  • AnimatedSprite:帶動畫支持的精靈,構造參數 (x, y, TextureRegion, VertexBufferObjectManager)。
  • GameGroup:自定義組件,封裝 4×4 格子邏輯、滑動合並動畫、分數更新回調。
  • Text:字體渲染組件,需預載字體紋理 (FontRes)。
  • Res / FontRes / ConstantUtil / SharedUtil:資源常量、字體管理、配置常量、SharedPreferences 封裝。
  • getCameraCenterX/Y(), getCameraRightX():場景相機座標輔助方法,實現自適應佈局。

OGEngine 專案接入步驟

  1. 下載源碼/JAR:官網下載頁
  2. Android Studio:File → New → Import Module 選擇引擎目錄,或將 JAR 放入 libs/ 並 implementation files('libs/ogengine.jar')。
  3. 在 AndroidManifest.xml 添加 OpenGL ES 2.0 特性聲明:
    <uses-feature android:glEsVersion="0x00020000" android:required="true" />
  4. 主 Activity 繼承 BaseGameActivity (引擎提供),實現 onCreateEngineOptions(), onCreateResources(), onCreateScene()。

2048 核心邏輯補充 (GameGroup)

  • 內部維護 int[][] grid = new int[4][4]。
  • 觸摸事件分發:計算滑動方向(上/下/左/右)→ 壓縮非零數字 → 相鄰相等合並 → 再次壓縮 → 生成新數字 (2/4) → 判斷遊戲結束/勝利。
  • 合並動畫:使用 MoveModifier 或 ScaleModifier 實現格子平滑移動/縮放。
  • 分數更新回調:scene.updateScore(newScore) 更新 tCurrScore 文本,破紀錄同步 tBestScore 並持久化。

資源準備清單

資源類型示例文件名用途
背景圖game_bg.png場景底圖
LOGOgame_logo.png標題
分數板score_bg_best.png, score_bg_now.pngUI 面板
數字塊tile_2.png ~ tile_2048.png格子紋理
字體font_score.png + .fntBMFont 位圖字體
音效move.wav, merge.wav, win.wav操作反饋

總結

OGEngine 以聲明式 API 簡化 OpenGL ES 開發,initView() 中的鏈式調用(attachChild, setCentrePosition)直觀表達場景樹結構。配合 GameGroup 封裝遊戲核心邏輯,可快速完成 2048 原型並擴展更多功能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved