Laya商用グレードの3D戦闘_013データの永続性とビットマップフォント

ラヤコマーシャル3Dゲーム開発

このセクションの目標:スコアリングシステムを実現する

知識のポイント:
値の永続性、ビットマップフォント

新しいgame.sceneを作成し、UIを配置します

ここに写真の説明を挿入

スコアはビットマップフォント
リソースパスを使用します
Fishpicture UISpritesheet \ FishboneIcone.png
ビットマップフォント画像Textrue \ numwhileOutLine.png

fontClipvarはfishfontに設定されています

ここに写真の説明を挿入

ビットマップフォントの作成:
Btmfontの作成
https://ldc2.layabox.com/doc/?nav=zh-ts-1-2-5

実際には、私たちのチームは、アートが良い位置にあるように、しばしば絵を変えます。

ピット位置の説明-なぜビットマップフォントを使用するのですか?
ビットマップフォントの利点により、バグを回避できます。
Laya
連携しない少数のモデルとチャネル、テキストまたはラベルを使用するときに次の状況が発生します
ここに写真の説明を挿入
。プラットフォームフィードバックの
ここに写真の説明を挿入
バグの出現は、レビューと起動に非常に不利なので、回避するようにしてください。

ビュー新しいGameView.tsを作成し、ランタイム
エクスポートのデフォルトクラスにハングアップしますGameView extends BaseView { constructor(){ super(); }


public static instance: GameView;
fishfont: Laya.FontClip;
onAwake() {
    super.onAwake()
    GameView.instance = this;
}

}

プロセス制御を容易にするために、管理を容易にする新しいui制御クラスが作成されます

宇井マネージャー
新しいマネージャー/ ViewMgr.tsの
輸出デフォルトのクラスViewMgr { プライベート静的のminstance:ViewMgr

    public static get instance() {

        if (ViewMgr.minstance == null) ViewMgr.minstance = new ViewMgr();
        return ViewMgr.minstance;
    }

    public OpenGame(callder, callbackFunc: Function) {
        Laya.Scene.open(SceneType.Game, false, Laya.Handler.create(callder, view => {
            let viewtype = view as GameView;
            //加载完成回调
            if (callbackFunc != null)
                callbackFunc.apply(callder);
        }));
    }

}

スクリプトディレクトリの下に新しいディレクトリを作成します
新しいSceneType.tsを作成します

/ **シーンタイプ* /
const enum SceneType {

/**首页 */
Home = "views/home.scene",
/**游戏页 */
Game = "views/game.scene",
/**复活页 */
Over = "views/over.scene",
//读取页
loading = "views/loadind.scene",
tipsFloat = "views/tipsFloat.scene",
//模拟广告
devad = "views/devad.scene"

}

Gamesample.ts

public static StartGame() {

    ViewMgr.instance.OpenGame(this, (view) => {

        SceneManager.LoadSceneByName('Game', this, this.OnGameSceneLoadOk);
    })
    
}

Game.ts
onAwake(){

//分数システムこの
.fishCount = PlayerPrefs.GetInt( 'fish'、0);
GameView.instance.fishfont.value = this.fishCount.toString();
}

//猫が魚を食べてUIを更新すると+
1playerEatFish(){ this.fishCount + = 1; GameView.instance.fishfont.value = this.fishCount.toString(); }


onDestroy() {
    //游戏结束后才保存数据,频繁写入数据很消耗性能
    PlayerPrefs.SetInt('fish', this.fishCount);
}

PlayerPrefsデータアクセスモジュールは何をカプセル化しますか?

U3D開発者の習慣に対応し、主要なプラットフォームのAPIの実行結果の違いを滑らかにするために
private static GetValueNum(value_name:string、defaul:number):number { //プロトタイプメソッドvarjsonData = Laya.LocalStorage.getItem(value_name); // oppo null key == null // vivo null key == '' if(jsonData == null || jsonData == '')return defaul; var d = Number(jsonData); return d; }








Player.ts
OnCollisionEnter(ソース:AABBShape、ターゲット:AABBShape){

console.log('OnCollisionEnter', target.mask);

if (target.mask == CollisionMask.Fish) {
  target.gameObject.active = false;
 //猫吃到鱼时+1且更新UI
  Game.instance.playerEatFish();

Game.scene追加ユニット
ここに写真の説明を挿入

F8-> ctrl + 12-> f5

ここに写真の説明を挿入

概要:
データの読み取りと書き込みにはPlayerPrefsを使用し
、スコアの表示にはビットマップフォントを使用して、プラットフォームの互換性を強化します
ここに写真の説明を挿入

おすすめ

転載: blog.csdn.net/koljy111/article/details/108020300