Commit 5fd800fc authored by 范雪寒's avatar 范雪寒

fix: 结束音频与热区读音冲突问题

parent b0d27c7b
import { onHomeworkFinish, playAudioByUrl, playDragonBoneAnimation } from "../script/util";
import { asyncDelay, onHomeworkFinish, playDragonBoneAnimation } from "../script/util";
import { defaultData } from "../script/defaultData";
cc.Class({
......@@ -140,49 +140,56 @@ cc.Class({
},
initView() {
this.coolCatSpeakStart(() => {
async initView() {
this.coolCatSpeakStart();
});
const canvas = cc.find('Canvas');
const bg = cc.find('Canvas/bg/ImgBg');
this.loadSpriteByUrl(bg, this.data.bgItem.url, () => {
bg.scale = Math.min((canvas.width / bg.width), (canvas.height / bg.height));
this.itemList = [];
this.data.hotZoneItemArr.forEach(async itemData =>{
const item = await this.createItem(itemData, bg);
this.itemList.push(item);
item.on('click', () => {
item.clicked = true;
if (this.itemList.every(tmpItem => tmpItem.clicked)) {
this.coolCatSpeakEnd();
}
playAudioByUrl(itemData.audio_url);
const time = 0.05;
cc.tween(item)
.to(time, { angle: 10 })
.to(time * 2, { angle: -10 })
.to(time, { angle: 0 })
.start();
});
});
await this.asyncLoadSpriteByUrl(bg, this.data.bgItem.url);
const canvas = cc.find('Canvas');
bg.scale = Math.min((canvas.width / bg.width), (canvas.height / bg.height));
this.itemList = [];
this.data.hotZoneItemArr.forEach(async itemData => {
const item = await this.createItem(itemData, bg);
this.itemList.push(item);
});
},
createItem(itemData, bg) {
return new Promise((resolve, reject) => {
const bgScale = bg.width / this.data.bgItem.rect.width;
const item = cc.instantiate(cc.find('item'));
item.parent = bg;
this.loadSpriteByUrl(item, itemData.pic_url, () => {
item.scale = itemData.imgScale * bgScale;
item.x = itemData.rect.x * bgScale - bg.width / 2 + item.width * item.scaleX / 2;
item.y = bg.height / 2 - itemData.rect.y * bgScale - item.height * item.scaleY / 2;
resolve(item);
});
shakeItem(item) {
const time = 0.05;
cc.tween(item)
.to(time, { angle: 10 })
.to(time * 2, { angle: -10 })
.to(time, { angle: 0 })
.start();
},
async createItem(itemData, bg) {
const bgScale = bg.width / this.data.bgItem.rect.width;
const item = cc.instantiate(cc.find('item'));
item.parent = bg;
item.on('click', async () => {
item.clicked = true;
this.shakeItem(item);
await this.asyncPlayAudioByUrl(itemData.audio_url);
if (this.itemList.every(tmpItem => tmpItem.clicked)) {
await asyncDelay(0.3);
await this.coolCatSpeakEnd();
onHomeworkFinish();
}
});
await this.asyncLoadSpriteByUrl(item, itemData.pic_url);
item.scale = itemData.imgScale * bgScale;
item.x = itemData.rect.x * bgScale - bg.width / 2 + item.width * item.scaleX / 2;
item.y = bg.height / 2 - itemData.rect.y * bgScale - item.height * item.scaleY / 2;
return item;
},
initListener() {
......@@ -190,26 +197,18 @@ cc.Class({
},
coolCatSpeakStart(cb) {
async coolCatSpeakStart(cb) {
const cat = cc.find('Canvas/catFrame/cat');
playDragonBoneAnimation(cat, 'begin', -1);
this.playAudioByUrl(this.data.startAudio, () => {
playDragonBoneAnimation(cat, 'normal', -1);
if (cb) {
cb();
}
});
await this.asyncPlayAudioByUrl(this.data.startAudio);
playDragonBoneAnimation(cat, 'normal', -1);
},
coolCatSpeakEnd(cb) {
async coolCatSpeakEnd() {
const cat = cc.find('Canvas/catFrame/cat');
playDragonBoneAnimation(cat, 'finish', -1);
this.playAudioByUrl(this.data.endAudio, () => {
playDragonBoneAnimation(cat, 'normal', -1);
if (cb) {
cb();
}
});
await this.asyncPlayAudioByUrl(this.data.endAudio);
playDragonBoneAnimation(cat, 'normal', -1);
},
......@@ -233,27 +232,37 @@ cc.Class({
loadSpriteByUrl(node, url, cb) {
cc.loader.load({ url }, (err, img) => {
const spriteFrame = new cc.SpriteFrame(img)
const spr = node.getComponent(cc.Sprite);
spr.spriteFrame = spriteFrame;
if (cb) {
cb();
}
asyncLoadSpriteByUrl(node, url) {
return new Promise((resolve, reject) => {
cc.loader.load({ url }, (err, img) => {
const spriteFrame = new cc.SpriteFrame(img)
const spr = node.getComponent(cc.Sprite);
spr.spriteFrame = spriteFrame;
resolve();
});
});
},
playAudioByUrl(audio_url, cb = null) {
if (audio_url) {
currentAudioId: null,
stopCurrentAudio() {
if (this.currentAudioId !== null) {
cc.audioEngine.stop(this.currentAudioId);
this.currentAudioId = null;
}
},
asyncPlayAudioByUrl(audio_url) {
if (!audio_url) {
return;
}
return new Promise((resolve, reject) => {
cc.assetManager.loadRemote(audio_url, (err, audioClip) => {
this.stopCurrentAudio();
const audioId = cc.audioEngine.play(audioClip, false, 0.8);
if (cb) {
cc.audioEngine.setFinishCallback(audioId, () => {
cb();
});
}
cc.audioEngine.setFinishCallback(audioId, () => {
resolve();
});
});
}
});
},
});
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment