Phaser3 随机星星功能开发:收集后逐次增加生成数量的问题咨询
实现方案
要实现收集完当前批次所有星星后,下次生成数量逐次+1的效果,你需要新增两个状态变量记录当前批次星星数量、已收集数量,再新增一个动态生成星星的方法,修改原有收集逻辑的判断即可,修改后完整代码如下:
初始化部分代码
// 新增两个状态变量,放在场景初始化的位置 let currentStarBatch = 1; // 初始第一批次生成1颗星星 let collectedThisBatch = 0; // 记录当前批次已收集的星星数量 let score = 0; let scoreText; // 初始化物理星星组,暂不默认生成内容,后续调用方法动态生成 stars = this.physics.add.group(); // 原有玩家和星星的碰撞检测逻辑保留 this.physics.add.overlap(player, stars, collectStar, null, this); // 新增:批量生成指定数量星星的公共方法 function spawnStars(count) { // 先清空当前组里残留的星星,避免和新批次重叠 stars.clear(true, true); collectedThisBatch = 0; // 循环生成对应数量的星星,位置随机 for(let i = 0; i < count; i++) { const x = Phaser.Math.RND.between(0, 900); const y = Phaser.Math.RND.between(0, 600); stars.create(x, y, 'star'); } } // 场景初始化完成后,先生成第一批次的1颗星星 spawnStars(currentStarBatch);
收集星星逻辑修改
function collectStar (player,star){ star.disableBody(true, true); score += 2; // COUNT BY 2 scoreText.setText('Score: ' + score); // 新增收集计数和批次判断逻辑 collectedThisBatch++; // 判断当前批次所有星星是否都已收集完成 if(collectedThisBatch === currentStarBatch) { // 下一批次星星数量+1 currentStarBatch++; // 生成新批次的星星 spawnStars(currentStarBatch); } }
注:原有星星组配置里的
repeat和setXY是初始化时批量生成固定数量的配置,改成上述动态生成的方式更灵活,完全匹配你要的收集完N颗就生成N+1颗的需求。
内容的提问来源于stack exchange,提问作者ocko
相关产品推荐
相关产品推荐

