Commit 53d83a1e authored by Tt's avatar Tt

1

parent a6e36294
......@@ -162,6 +162,14 @@ export default class SceneComponent extends MyCocosSceneComponent {
private inactiveTimer: number = 0;
/** 提示动画显示的时间阈值(秒) */
private hintThreshold: number = 3;
/** 糖果区域滚动速度 */
private scrollSpeed: number = 100;
/** 是否需要滚动糖果区域 */
private needScroll: boolean = false;
/** 糖果节点宽度 */
private candyNodeWidth: number = 0;
/** 待添加的糖果数据队列 */
private pendingCandyData: Option[] = [];
// 移除了提示动画相关的变量
/**
......@@ -304,6 +312,7 @@ export default class SceneComponent extends MyCocosSceneComponent {
* 显示当前页面
* 移除了与页面a和页面b相关的逻辑
* 添加了将糖果节点克隆到糖果区域的逻辑
* 添加了糖果区域滚动逻辑
*/
showPage() {
// 获取当前页码
......@@ -313,6 +322,11 @@ export default class SceneComponent extends MyCocosSceneComponent {
// 获取当前页的数据
const pageData = Game.getIns().getPageData();
// 重置滚动状态
this.layout.x = 0;
this.needScroll = false;
this.pendingCandyData = [];
// 清空活跃火苗节点数组
this.activeFireNodes = [];
......@@ -321,22 +335,74 @@ export default class SceneComponent extends MyCocosSceneComponent {
// 根据当前数据,将糖果节点克隆到糖果区域
if (pageData && pageData.length > 0) {
// 遍历页面数据
pageData.forEach((data, index) => {
// 克隆糖果节点
const candyNode = cc.instantiate(this.item) as CandyNode;
// 确定是否需要滚动
if (pageData.length > 5) {
this.needScroll = true;
// 将前5个数据显示在屏幕上,其余放入待添加队列
const visibleData = pageData.slice(0, 5);
this.pendingCandyData = pageData.slice(5);
// 使用updateItem方法更新节点内容,传入索引以显示对应的糖果图标
this.updateItem(candyNode, data, index);
// 遍历可见数据
visibleData.forEach((data, index) => {
// 克隆糖果节点
const candyNode = cc.instantiate(this.item) as CandyNode;
// 使用updateItem方法更新节点内容,传入索引以显示对应的糖果图标
this.updateItem(candyNode, data, index);
// 记录糖果节点宽度(用于滚动计算)
if (index === 0) {
this.candyNodeWidth = candyNode.width;
}
// 将糖果节点添加到活跃火苗节点数组
this.activeFireNodes.push(candyNode);
// 将糖果节点添加到活跃火苗节点数组
this.activeFireNodes.push(candyNode);
// 将糖果节点添加到糖果区域
this.layout.addChild(candyNode);
});
// 将糖果节点添加到糖果区域
this.layout.addChild(candyNode);
});
} else {
// 数量不超过5个,正常显示所有节点
pageData.forEach((data, index) => {
// 克隆糖果节点
const candyNode = cc.instantiate(this.item) as CandyNode;
// 使用updateItem方法更新节点内容,传入索引以显示对应的糖果图标
this.updateItem(candyNode, data, index);
// 将糖果节点添加到活跃火苗节点数组
this.activeFireNodes.push(candyNode);
// 将糖果节点添加到糖果区域
this.layout.addChild(candyNode);
});
}
}
}
/**
* 添加新的糖果节点到布局的最后位置
*/
private addNewCandyNode() {
if (this.pendingCandyData.length === 0 || !this.item) return;
// 获取待添加的第一个数据
const data = this.pendingCandyData.shift();
// 克隆糖果节点
const candyNode = cc.instantiate(this.item) as CandyNode;
// 使用updateItem方法更新节点内容
// 使用当前显示的节点数量作为索引
const index = this.layout.childrenCount;
this.updateItem(candyNode, data, index);
// 将新节点放在布局的最后位置
this.layout.addChild(candyNode);
// 将糖果节点添加到活跃火苗节点数组
this.activeFireNodes.push(candyNode);
}
/**
* 移除了消防车点击事件处理方法
*/
......@@ -364,14 +430,6 @@ export default class SceneComponent extends MyCocosSceneComponent {
onFireSuccess() {
const fireNode = this.currentFireNode;
// 从活跃火苗列表中移除当前火苗 --- 答题后操作
const index = this.activeFireNodes.indexOf(fireNode);
if (index !== -1) {
this.activeFireNodes.splice(index, 1);
}
// 隐藏对应的fire节点
fireNode.active = false;
// 更新糖果背景状态:隐藏bg_full,显示bg_broken
const bgFullNode = fireNode.getChildByName('bg_full');
......@@ -383,6 +441,22 @@ export default class SceneComponent extends MyCocosSceneComponent {
if (bgBrokenNode) {
bgBrokenNode.active = true;
}
// 如果不需要滚动,则直接从活跃列表中移除并隐藏节点
if (!this.needScroll) {
// 从活跃火苗列表中移除当前火苗
const index = this.activeFireNodes.indexOf(fireNode);
if (index !== -1) {
this.activeFireNodes.splice(index, 1);
}
// 隐藏对应的fire节点
fireNode.active = false;
} else {
// 如果需要滚动,标记节点为已点击但保持显示状态
// 将节点设置为不可交互,防止重复点击
fireNode.off(cc.Node.EventType.TOUCH_END, this.onTouchFireNode, this);
}
// 移除了与页面a和页面b相关的逻辑
// 移除了与消防车冲水动画相关的代码
......@@ -749,6 +823,33 @@ export default class SceneComponent extends MyCocosSceneComponent {
}
}
// 处理糖果区域滚动
if (this.needScroll && this.layout && this.layout.childrenCount > 0) {
// 移动糖果区域
this.layout.x -= this.scrollSpeed * dt;
// 检查第一个糖果节点是否已经移出视图
const firstCandy = this.layout.children[0];
if (firstCandy && firstCandy.x + this.layout.x + firstCandy.width / 2 < -this.layout.parent.width / 2) {
// 从活跃节点数组中移除第一个节点
if (this.activeFireNodes.includes(firstCandy)) {
const index = this.activeFireNodes.indexOf(firstCandy);
if (index !== -1) {
this.activeFireNodes.splice(index, 1);
}
}
// 从布局中移除第一个节点
firstCandy.removeFromParent();
firstCandy.destroy();
// 如果有待添加的糖果数据,添加新的糖果节点
if (this.pendingCandyData.length > 0) {
this.addNewCandyNode();
}
}
}
// 移除了提示动画逻辑
}
......
......@@ -10,29 +10,38 @@
*/
export const defaultData = {
"score": 0, "title": "", "questionText": "", "questionType": "read",
"questionTextAudio": "", "bgAudio": "", "questions": [{
"type": "img",
"audio": "http://staging-teach.cdn.ireadabc.com/ae2538a7ef5de1b4836a882d625271af_l.mp3",
"text": "left",
"image": "http://staging-teach.cdn.ireadabc.com/41b95f47d23e0712f825eec9e718caed.png",
"time": null,
"duration": 30, "audioName": "heal_money.mp3"
}, {
"type": "img",
"audio": "http://staging-teach.cdn.ireadabc.com/4f3bb8f8fa048f40c1bb5d6d2f6d9a33_l.mp3",
"text": "down",
"image": "http://staging-teach.cdn.ireadabc.com/fbe3d792ce2a72310e5298e1d75d0d71.png", "time": null,
"duration": 30,
"audioName": "shoot.MP3"
}, {
"type": "img",
"audio": "http://staging-teach.cdn.ireadabc.com/a6fb6452f0e383808cd056939ed81917_l.mp3", "text": "circle", "image": "http://staging-teach.cdn.ireadabc.com/d0652838333e892b5e495fbdd8746fa0.png",
"time": null, "duration": 30,
"audioName": "levelup.MP3"
}, {
"type": "txt",
"audio": "http://staging-teach.cdn.ireadabc.com/e8d058205a1bc894c55a9dc46d60717f_l.mp3", "text": "shoot", "image": "",
"time": null, "duration": 30,
"audioName": "yasuo.mp3"
}, { "type": "txt", "audio": "", "text": "apple", "image": "", "time": null, "duration": 30, "audioName": "" }, { "type": "txt", "audio": "", "text": "international", "image": "", "time": null, "duration": 30, "audioName": "" }, { "type": "txt", "audio": "", "text": "deep", "image": "", "time": null, "duration": 30, "audioName": "" }, { "type": "txt", "audio": "", "text": "fun", "image": "", "time": null, "duration": 10, "audioName": "" }]
"questionTextAudio": "", "bgAudio": "", "questions": [
{
"type": "img",
"audio": "http://staging-teach.cdn.ireadabc.com/ae2538a7ef5de1b4836a882d625271af_l.mp3",
"text": "left",
"image": "http://staging-teach.cdn.ireadabc.com/41b95f47d23e0712f825eec9e718caed.png",
"time": null,
"duration": 30, "audioName": "heal_money.mp3"
}, {
"type": "img",
"audio": "http://staging-teach.cdn.ireadabc.com/4f3bb8f8fa048f40c1bb5d6d2f6d9a33_l.mp3",
"text": "down",
"image": "http://staging-teach.cdn.ireadabc.com/fbe3d792ce2a72310e5298e1d75d0d71.png", "time": null,
"duration": 30,
"audioName": "shoot.MP3"
}, {
"type": "img",
"audio": "http://staging-teach.cdn.ireadabc.com/a6fb6452f0e383808cd056939ed81917_l.mp3", "text": "circle", "image": "http://staging-teach.cdn.ireadabc.com/d0652838333e892b5e495fbdd8746fa0.png",
"time": null, "duration": 30,
"audioName": "levelup.MP3"
}, {
"type": "txt",
"audio": "http://staging-teach.cdn.ireadabc.com/e8d058205a1bc894c55a9dc46d60717f_l.mp3", "text": "shoot", "image": "",
"time": null, "duration": 30,
"audioName": "yasuo.mp3"
}, {
"type": "txt", "audio": "", "text": "apple", "image": "", "time": null, "duration": 30, "audioName": ""
}, {
"type": "txt", "audio": "", "text": "international", "image": "", "time": null, "duration": 30, "audioName": ""
}, {
"type": "txt", "audio": "", "text": "deep", "image": "", "time": null, "duration": 30, "audioName": ""
}, {
"type": "txt", "audio": "", "text": "fun", "image": "", "time": null, "duration": 10, "audioName": ""
}]
}
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