JS增量游戏开发问题:从对象数组获取返回值并更新HTML
嘿,刚学JS几周就动手做增量游戏,这进度超棒的!针对你提到的「从UPGRADES对象创建数组」「用对象属性写比较逻辑」「更新HTML内容」这几个核心问题,我给你一步步拆解解决方案:
一、从UPGRADES对象生成数组
你的UPGRADES是键值对结构的对象,要把里面的所有升级项转成数组很简单,用Object.values()方法就能直接提取所有值组成数组,后续遍历、操作会更方便:
// 补全后的UPGRADES示例(假设required开头属性为requiredScience) var UPGRADES = { newClothes: { name: "New Clothes", desc: "Give your bums a new look and some more motivation! Bum production bonus: 100%", moneyCost: 1000, scienceCost: 10, requiredScience: 5 } // 可添加更多升级项... }; // 转成数组 const upgradesList = Object.values(UPGRADES);
现在upgradesList就是包含所有升级项对象的数组啦~
二、用对象属性写比较语句
要判断玩家是否有足够资源购买升级,直接通过对象的点语法获取属性值即可。先定义玩家资源对象:
// 玩家当前资源示例 const player = { money: 1200, science: 15, productionRate: 10 // 基础bum产量 };
然后遍历升级数组,编写条件判断逻辑:
upgradesList.forEach(upgrade => { // 检查是否满足购买条件:钱够、科技点够、满足前置要求 const canPurchase = player.money >= upgrade.moneyCost && player.science >= upgrade.scienceCost && player.science >= upgrade.requiredScience; if (canPurchase) { console.log(`可以购买「${upgrade.name}」啦!`); } else { console.log(`还买不起「${upgrade.name}」,继续攒资源吧~`); } });
核心就是用upgrade.moneyCost、player.science这类方式获取属性值,代入比较逻辑即可。
三、动态更新HTML内容
要把升级项信息渲染到页面并根据状态更新UI,用DOM操作实现即可。先在HTML里准备容器:
<div id="upgrades-container"></div>
然后编写JS逻辑生成并更新内容:
function renderUpgrades() { const container = document.getElementById('upgrades-container'); // 先清空容器避免重复渲染 container.innerHTML = ''; upgradesList.forEach(upgrade => { const canPurchase = player.money >= upgrade.moneyCost && player.science >= upgrade.scienceCost && player.science >= upgrade.requiredScience; // 创建单个升级项卡片 const upgradeCard = document.createElement('div'); // 根据购买状态添加类名,方便CSS区分样式 upgradeCard.className = `upgrade-card ${canPurchase ? 'available' : 'unavailable'}`; // 填充卡片内容 upgradeCard.innerHTML = ` <h3>${upgrade.name}</h3> <p>${upgrade.desc}</p> <div class="cost"> <span>金钱:${upgrade.moneyCost}</span> <span>科技点:${upgrade.scienceCost}</span> </div> <button ${!canPurchase ? 'disabled' : ''} onclick="buyUpgrade('${upgrade.name}')" > ${canPurchase ? '购买' : '资源不足'} </button> `; // 将卡片加入容器 container.appendChild(upgradeCard); }); } // 购买升级的函数 function buyUpgrade(upgradeName) { // 找到对应的升级项 const targetUpgrade = upgradesList.find(item => item.name === upgradeName); if (!targetUpgrade) return; // 扣减玩家资源 player.money -= targetUpgrade.moneyCost; player.science -= targetUpgrade.scienceCost; // 应用升级效果(比如产量提升100%) player.productionRate *= 2; // 更新UI:重新渲染升级列表和玩家状态 renderUpgrades(); renderPlayerStats(); // 需自行实现,用于显示当前资源、产量等信息 } // 页面加载时首次渲染 renderUpgrades();
之后每次玩家资源变化或购买升级后,调用renderUpgrades()就能更新页面内容啦~
内容的提问来源于stack exchange,提问作者bejewelled
相关产品推荐
相关产品推荐

