desarrollo de juegos 3d comerciales laya
Objetivo de esta sección: realizar el sistema de puntuación
Puntos de conocimiento:
persistencia de valor, fuente de mapa de bits
Crea una nueva escena de juego y coloca la interfaz de usuario
La partitura usa una fuente de mapa de bits
ruta de recursos
imagen de pez UISpritesheet \ FishboneIcone.png
imagen de fuente de mapa de bits Textrue \ num whileOutLine.png
fontClip var está configurado en fishfont
Producción de fuentes de mapa de bits:
producción de Btmfont
https://ldc2.layabox.com/doc/?nav=zh-ts-1-2-5
En la práctica, nuestro equipo a menudo cambia la imagen para que el arte pueda estar en una buena posición.
Explicación de pit bit: ¿por qué usar fuentes de mapa de bits?
¡Los beneficios de las fuentes de mapa de bits pueden evitar ERRORES!
Un pequeño número de modelos y canales
que no cooperan con Laya tendrán las siguientes situaciones al usar texto o etiqueta
.
La aparición de errores de retroalimentación de la plataforma es muy desfavorable para la revisión y el lanzamiento, así que trate de evitar
vistas Crea un nuevo GameView.ts y cuelga para
exportar en tiempo de ejecución la clase predeterminada GameView extiende BaseView { constructor () { super (); }
public static instance: GameView;
fishfont: Laya.FontClip;
onAwake() {
super.onAwake()
GameView.instance = this;
}
}
Para facilitar el control del proceso, se crea una nueva clase de control de interfaz de usuario para facilitar la gestión
Ui Manager
Nuevo administrador / ViewMgr.ts
exporta la clase predeterminada ViewMgr {posición estática privada: 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);
}));
}
}
Cree un nuevo directorio en el directorio Script. Cree un
nuevo SceneType.ts
/ ** Tipo de escena * /
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 () {
//
分数系统this.fishCount = PlayerPrefs.GetInt ('pez', 0);
GameView.instance.fishfont.value = this.fishCount.toString ();
}
// + 1 cuando el gato come pescado y actualiza la interfaz de usuario
playerEatFish () { this.fishCount + = 1; GameView.instance.fishfont.value = this.fishCount.toString (); }
onDestroy() {
//游戏结束后才保存数据,频繁写入数据很消耗性能
PlayerPrefs.SetInt('fish', this.fishCount);
}
¿Qué encapsula el módulo de acceso a datos de PlayerPrefs?
Atendiendo a los hábitos de los desarrolladores de U3D, suavizando la diferenciación de los resultados de ejecución de API en las principales plataformas
private static GetValueNum (value_name: string, defaul: number): number { // método prototipo var jsonData = 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 (fuente: AABBShape, destino: AABBShape) {
console.log('OnCollisionEnter', target.mask);
if (target.mask == CollisionMask.Fish) {
target.gameObject.active = false;
//猫吃到鱼时+1且更新UI
Game.instance.playerEatFish();
Game.scene 添加 runitme
F8 -> ctrl + 12 -> f5
Resumen:
use PlayerPrefs para leer y escribir datos, y
use fuentes de mapa de bits para mostrar la puntuación para mejorar la compatibilidad de la plataforma