mirror of
https://gitee.com/jisol/jisol-game/
synced 2025-09-26 18:26:23 +00:00
重构战斗资源加载 , 新添加宠物
This commit is contained in:
@@ -150,12 +150,6 @@ export class JLoaderBattle extends JLoaderSystem{
|
||||
resources:{[id:number]:Asset} = {};
|
||||
foreverResources:number[] = []; //永久资源Id
|
||||
|
||||
roleSpine:{[id:number]:sp.SkeletonData} = {}; //角色Spine
|
||||
roleResImage:{[id:number]:SpriteFrame} = {}; //角色战斗素材图片
|
||||
roleResSpine:{[id:number]:sp.SkeletonData} = {}; //角色战斗素材Spine
|
||||
effects:{[id:number]:sp.SkeletonData} = {}; //Spine特效
|
||||
maps:{[id:number]:SpriteFrame[]} = {}; //地图
|
||||
|
||||
async onInit(): Promise<any> {
|
||||
|
||||
app.loading.setCurrent(JLoaderBattle.loading);
|
||||
@@ -166,46 +160,8 @@ export class JLoaderBattle extends JLoaderSystem{
|
||||
|
||||
app.loading.setCurrent(JLoaderBattle.loadingInit);
|
||||
|
||||
//将配置表的角色都读取出来
|
||||
for (const info of TD.TbGRole.getDataMap().values()) {
|
||||
this.roleSpine[info.id] = await (new Promise(r => {
|
||||
this.bundle.load(info.spine,sp.SkeletonData,(err,data) => {
|
||||
r(data);
|
||||
})
|
||||
}))
|
||||
}
|
||||
|
||||
//读取角色战斗素材
|
||||
for(const info of TD.TbGRoleBattleRes.getDataMap().values()){
|
||||
if(info.resType == "Spine"){
|
||||
this.roleResSpine[info.id] = await (new Promise(r => {
|
||||
this.bundle.load(info.resSrc,sp.SkeletonData,(err,data) => {
|
||||
r(data);
|
||||
})
|
||||
}))
|
||||
}else{
|
||||
this.roleResImage[info.id] = await (new Promise(r => {
|
||||
this.bundle.load(info.resSrc,SpriteFrame,(err,data) => {
|
||||
r(data);
|
||||
})
|
||||
}))
|
||||
}
|
||||
}
|
||||
|
||||
//读取地图
|
||||
for (const info of TD.TbGMap.getDataMap().values()) {
|
||||
|
||||
this.maps[info.id] = await (Promise.all(["1","2","3"].map(index => `map${index}`).map(key => {
|
||||
return new Promise<SpriteFrame>(r => {
|
||||
if(info[key]){
|
||||
this.bundle.load(info[key],SpriteFrame,(err,data) => {
|
||||
r(data);
|
||||
})
|
||||
}
|
||||
})
|
||||
})))
|
||||
|
||||
}
|
||||
//默认加载全部资源
|
||||
await this.loadForeverResources(...TD.TbBattleResource.getDataList());
|
||||
|
||||
app.loading.ok(JLoaderBattle.loadingInit);
|
||||
|
||||
@@ -222,7 +178,10 @@ export class JLoaderBattle extends JLoaderSystem{
|
||||
//加载永久资源
|
||||
loadForeverResource(res:TB.TbBattleResource){
|
||||
return (new Promise<void>(r => {
|
||||
this.bundle.load(res.path,(error,data) => {
|
||||
|
||||
let Type:new ()=>Asset = [sp.SkeletonData,SpriteFrame][res.type];
|
||||
|
||||
this.bundle.load(res.path,Type,(error,data) => {
|
||||
if(this.foreverResources.indexOf(res.id) < 0){
|
||||
//添加永久资源
|
||||
this.resources[res.id] = data;
|
||||
@@ -276,7 +235,7 @@ export class JLoaderBattle extends JLoaderSystem{
|
||||
}
|
||||
|
||||
//获取资源
|
||||
getData<T extends Asset>(resId:number):T{
|
||||
getData<T extends Asset>(resId:number | string):T{
|
||||
|
||||
let res = this.resources[resId]
|
||||
if(!res) console.info(`[JLoaderBattle] 未加载资源${resId}`);
|
||||
@@ -285,6 +244,19 @@ export class JLoaderBattle extends JLoaderSystem{
|
||||
|
||||
}
|
||||
|
||||
//获取角色Spine
|
||||
getRoleSpine(roleId:number){
|
||||
return this.getData<sp.SkeletonData>(TD.TbGRole.get(roleId).spine)
|
||||
}
|
||||
|
||||
//获取地图
|
||||
getMap(mapId:number):SpriteFrame[]{
|
||||
let info = TD.TbGMap.get(mapId)
|
||||
return ["1","2","3"].map(key => {
|
||||
return this.getData<SpriteFrame>(info[`map${key}`]);
|
||||
})
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export const app = {
|
||||
|
@@ -13,6 +13,7 @@ import { rect } from "cc";
|
||||
import GRoleDefault from "../role/GRoleDefault";
|
||||
import { TB } from "../../../../resources/config/data/schema";
|
||||
import GRoleAttack from "../common/GRoleAttack";
|
||||
import { sp } from "cc";
|
||||
|
||||
/**
|
||||
* 抛物线 爆炸普攻
|
||||
@@ -25,10 +26,9 @@ export default class GAttackParabolicRemote implements GAttackBase{
|
||||
let enemy = role.fsm.enemy;
|
||||
if(!enemy) return;
|
||||
|
||||
let image:SpriteFrame = app.battleRes.roleResImage[info.attackArgs[0]];
|
||||
let image:SpriteFrame = app.battleRes.getData<SpriteFrame>(info.attackArgs[0]);
|
||||
let bang = {
|
||||
ske: app.battleRes.roleResSpine[info.attackArgs[1]],
|
||||
info: TD.TbGRoleBattleRes.get(parseInt(info.attackArgs[1]))
|
||||
ske: app.battleRes.getData<sp.SkeletonData>(info.attackArgs[1]),
|
||||
};
|
||||
let bone = role.spine.findBone(info.attackArgs[2]);
|
||||
let scale:number = parseFloat(info.attackArgs[3]);
|
||||
@@ -40,7 +40,6 @@ export default class GAttackParabolicRemote implements GAttackBase{
|
||||
return;
|
||||
}
|
||||
|
||||
// console.log(`播放动画[GAttackParabolicRemote]`,role.nId,enemy.nId)
|
||||
|
||||
console.log(role.spine,bone);
|
||||
let bullet = GAttackBullet.create(GButtleDefault,{
|
||||
|
@@ -99,8 +99,8 @@ export default abstract class GRoleBase<T> extends GObject<T>{
|
||||
|
||||
//初始化
|
||||
protected init(role:TB.TbGRole){
|
||||
console.log("初始化宠物",!!this.spine,!!(app.battleRes.roleSpine[role.id]));
|
||||
this.spine.skeletonData = app.battleRes.roleSpine[role.id];
|
||||
console.log("初始化宠物",!!this.spine,!!(app.battleRes.getRoleSpine(role.id)));
|
||||
this.spine.skeletonData = app.battleRes.getRoleSpine(role.id);
|
||||
}
|
||||
|
||||
//创建一个状态机
|
||||
|
@@ -25,9 +25,9 @@ export default class GDefaultMode<T,DT> extends GBaseMode<T,DT>{
|
||||
this.mapInfo = TD.TbGMap.get(mapId);
|
||||
|
||||
let scale = this.mapInfo.scale;
|
||||
this.map1.init(app.battleRes.maps[mapId][0],1,app.battleRes.maps[mapId][0].width * scale,app.battleRes.maps[mapId][0].height * scale);
|
||||
this.map2.init(app.battleRes.maps[mapId][1],1,app.battleRes.maps[mapId][1].width * scale,app.battleRes.maps[mapId][1].height * scale);
|
||||
this.map3.init(app.battleRes.maps[mapId][2],1,app.battleRes.maps[mapId][1].width * scale,1048 * scale);
|
||||
this.map1.init(app.battleRes.getMap(mapId)[0],1,app.battleRes.getMap(mapId)[0].width * scale,app.battleRes.getMap(mapId)[0].height * scale);
|
||||
this.map2.init(app.battleRes.getMap(mapId)[1],1,app.battleRes.getMap(mapId)[1].width * scale,app.battleRes.getMap(mapId)[1].height * scale);
|
||||
this.map3.init(app.battleRes.getMap(mapId)[2],1,app.battleRes.getMap(mapId)[1].width * scale,1048 * scale);
|
||||
|
||||
//更新地图
|
||||
this.onUpdateMap(0);
|
||||
|
@@ -10,6 +10,7 @@ import { rect } from "cc";
|
||||
import GRoleDefault from "../../../base/role/GRoleDefault";
|
||||
import { TB } from "../../../../../resources/config/data/schema";
|
||||
import GRoleAttack from "../../../base/common/GRoleAttack";
|
||||
import { sp } from "cc";
|
||||
|
||||
/**
|
||||
* 疯狂松鼠技能
|
||||
@@ -40,14 +41,14 @@ export default class GSkillCrazySquirrel extends GSkillCDBase{
|
||||
let ah = parseInt(this.info.skillArgs[2]);
|
||||
|
||||
//出现松鼠丢炸弹
|
||||
GSpine.onPlayAnotherSpine(this.role,app.battleRes.roleResSpine[30003],"skill",{
|
||||
GSpine.onPlayAnotherSpine(this.role,app.battleRes.getData(140003),"skill",{
|
||||
end:() => {
|
||||
//从天而降
|
||||
let pos = enemy.v2World.add(v2(0,1000));
|
||||
let end = enemy.v2World.clone();
|
||||
|
||||
//生成火球
|
||||
let spine = GSpine.onCreateSpine(app.battleRes.roleResSpine[30004]);
|
||||
let spine = GSpine.onCreateSpine(app.battleRes.getData(140004));
|
||||
this.role.mode.addGNode(spine.node,pos);
|
||||
spine.setAnimation(0,"animation",true);
|
||||
spine.node.angle = 90;
|
||||
@@ -59,7 +60,7 @@ export default class GSkillCrazySquirrel extends GSkillCDBase{
|
||||
.onComplete(() => {
|
||||
let world = spine.node.worldPosition;
|
||||
spine.node.destroy();
|
||||
GSpine.onPlaySceneSpine(scene,v2(world.x,world.y),app.battleRes.roleResSpine[30005],"animation");
|
||||
GSpine.onPlaySceneSpine(scene,v2(world.x,world.y),app.battleRes.getData<sp.SkeletonData>(140005),"animation");
|
||||
GDetection.testAABBCenterRole(rect(world.x,world.y,aw,ah)).forEach(enemy =>{
|
||||
GRoleAttack.onNormalAttack(this.role,enemy);
|
||||
});
|
||||
|
@@ -46,7 +46,7 @@ export class PetIcon extends Component {
|
||||
|
||||
//刷新页面
|
||||
onUpdateView(){
|
||||
this.spine.skeletonData = app.battleRes.roleSpine[this.info.petTbId];
|
||||
this.spine.skeletonData = app.battleRes.getRoleSpine(this.info.petTbId);
|
||||
this.spine.setAnimation(0,UIPetAnim.std,true);
|
||||
|
||||
if(this.info.petStar){
|
||||
|
@@ -53,7 +53,7 @@ export class PetPreviewWindow extends Component {
|
||||
this.onUpdateInit();
|
||||
|
||||
//显示宠物
|
||||
this.spine.skeletonData = app.battleRes.roleSpine[this.info.petTbId];
|
||||
this.spine.skeletonData = app.battleRes.getRoleSpine(this.info.petTbId);
|
||||
this.spine.setAnimation(0,UIPetAnim.std,true);
|
||||
|
||||
//等级
|
||||
|
@@ -36,7 +36,7 @@ export class NoviceSelectPetView extends JNGLayerBase {
|
||||
//获取Spine组件
|
||||
let spine = item.getComponentInChildren(sp.Skeleton);
|
||||
//设置显示的角色
|
||||
spine.skeletonData = app.battleRes.roleSpine[this.petIds[index]];
|
||||
spine.skeletonData = app.battleRes.getRoleSpine(this.petIds[index]);
|
||||
//全部角色播放等待动画
|
||||
spine.setAnimation(0,UIPetAnim.std,true);
|
||||
})
|
||||
|
Reference in New Issue
Block a user