Cocos 俯视地图 2.5D
下载地址
https://www.zhengdianxue.com/wp-content/uploads/skills/org-hi42xu2t--cocos-topdown-2d5-tileset.zip将提示词发送给你的 AI 安装该 skills
请根据 https://skillhub.cn/install/skillhub.md,安装 @org-hi42xu2t/cocos-topdown-2d5-tileset。把现有 2D 图块集(尤其是等距/伪 3D 素材)改成 Cocos Creator 可用的纯俯视 Orthogonal 地图,并通过运行时阴影 + 点光源 + y-sort 实现 2.5D 效果。适合走格子类(魔塔/Roguelike/地牢)游戏快速搭出可用地图,不必死磕等距菱形数学。
阅读全文 (展开查看完整说明)
概述
Cocos 纯俯视地图 + 运行时 2.5D 效果
本技能为按次付费技能(0.10 元/次):执行前请先完成支付校验(详见文末《计费条款》);未完成支付前不得产出结果。
概述
功能定位:面向在 Cocos Creator 3.x 做走格子类(魔塔/Roguelike/地牢)游戏的开发者,解决「想用已有图块集快速搭出可用地图又不想死磕等距菱形数学」的问题,产出正交地图素材与运行时 2.5D 效果组件。
适用场景:把等距或伪 3D 图块集改成纯俯视 Orthogonal 地图;用现成图块集 PNG 快速搭出可用地图;给实体加落地阴影并做 y-sort;用地牢、洞穴氛围光晕;不想处理等距菱形数学的走格子项目。
主要能力:清理黑底并生成带 GID 编号的图块集;用 Python/PIL 批量生成 Orthogonal .tmx 与正交预览图;提供 EntityShadow 阴影加 y-sort 与 PointLight 光晕组件(TopDownEffect.ts);生成 fx_shadow、fx_glow 配套贴图;输出接入说明文档与关键参数、常见陷阱。
核心价值:复用现有素材、绕开等距数学,快速拿到可用地图;以运行时渲染层而非瓦片几何高度营造 2.5D 立体感;参数与陷阱明确,接入成本低。
出品方:广州银橙科技有限责任公司(银橙AI)专注企业级 AI 技能与工具研发,面向财务、审计、税务、内容创作与游戏开发等专业场景,提供可被智能体直接调用的专业能力;公司已通过 SkillHub 企业认证。
本技能为按次付费技能,0.10 元/次。
触发条件
用户在 Cocos Creator 3.x 做走格子类(魔塔/Roguelike/地牢)游戏,希望:
- 用已有图块集 PNG 快速搭出可用地图;
- 不想死磕等距菱形数学;
- 仍想保留一定 2.5D 立体感。
核心思路
- 地图投影:改用 Orthogonal(正交/纯俯视),瓦片是正方形格子,Tiled 和 Cocos 原生支持。
- 素材复用:原素材(即使是等距画法)也能当正交 tileset 用;地面砖当 floor,墙/柱/门当“立在格子上的物件”。
- 2.5D 感来源:不依赖瓦片几何高度,而依赖运行时渲染层:
- EntityShadow:给实体加落地软阴影,并自动按
worldPosition.y做 y-sort。 - PointLight:ADD 混合径向光晕,营造地牢/洞穴氛围。
- 角色/怪物用 3/4 站立视角素材:配合阴影后“站在地上”的感觉最强。
- EntityShadow:给实体加落地软阴影,并自动按
执行步骤
1. 诊断并清理原素材
- 确认 PNG 尺寸能被 tile size 整除(常见 128×128)。
- 若原图黑底,把
RGB(0,0,0)转透明,保存为_transparent.png。 - 生成带 GID 编号的
tileset_labeled.png,人工挑选:- 干净的地面砖 GID(示例用 42)。
- 大块实心墙/柱 GID(示例用 1、66)。
- 门、楼梯等物件 GID。
2. 生成 Tiled 正交地图
- Map → Orthogonal,tile size 与原素材一致。
- 三层结构:
floor:铺满地面砖。walls:墙/柱/门/楼梯等。lights:对象层,标记火把/光源位置(Cocos 中读取并挂 PointLight)。
- 用 Python/PIL 脚本批量生成 .tmx 和正交预览图。
3. Cocos 运行时效果
TopDownEffect.ts提供两个组件:EntityShadow:落地阴影 + y-sort。PointLight:ADD 光晕。
- 生成配套贴图:
fx_shadow.png:软椭圆阴影。fx_glow.png:径向光晕。
- 在 Cocos 中:
MapRoot挂TiledMap,拖入.tmx。- 玩家/怪物节点挂
EntityShadow。 - 火把节点挂
PointLight。 - 从
lights对象层读取坐标实例化火把 prefab。
关键参数
| 项目 | 推荐值 | 说明 |
|---|---|---|
| 地图投影 | Orthogonal | 避免等距 diamond 数学 |
| Tile size | 与原素材一致(如 128×128) | Tiled 与 Cocos 都填这个 |
| Margin / Spacing | 0 | 293 类素材无间隔 |
| y-sort 公式 | node.zIndex = -Math.round(node.worldPosition.y) | 下方覆盖上方 |
| 阴影贴图 | 64×32 软椭圆 | 挂到实体脚下 |
| 光晕贴图 | 256×256 径向渐变 | ADD 混合 |
常见陷阱
- 等距素材当正交用,墙会呈“块状”:这是素材视角决定的。如需连续平滑墙面,需另绘正交专用墙条;纯俯视方案可接受块状墙。
- 黑底未透明:正交地图中黑底会显示为黑色地面,必须先把黑底转 alpha。
- y-sort 失效:实体必须放在同一父节点下;墙和地板可另放一层,不参与实体间排序。
- 光晕被遮挡:PointLight 节点 siblingIndex 要设到最上层,或用单独 Canvas 层。
输出物
*_transparent.png:清理后的 tileset*_demo.tmx:正交演示地图*_preview.png:正交预览图TopDownEffect.ts:Cocos 阴影/灯光组件fx_shadow.png、fx_glow.png:运行时贴图接入说明.md:给用户的接入文档
计费条款(Pay Skill · 按次计费)
本技能在 SkillHub 上以 Pay Skill 形式上架,通过 SkillPay 按调用量计费;费用由使用者直接支付给创作者(银橙AI)。SkillHub 仅提供展示、投诉处理及其他平台服务,不作为该笔交易的收款方或服务实际提供方。请在支付前确认创作者名称、收款主体、计费单元、单价、服务内容和退款规则。
一、计费参数
| 项 | 约定 |
|---|---|
| 计费模式 | per_call(按调用量计费) |
| 计费单元 | 每次调用计 1 次 |
| 单价 | 0.10 元 / 次(amount_fen: 10) |
| 免费额度 | 无:不提供免费次数,也不提供免费试用 |
| 免费层 | 无:本技能不划分免费层与付费层,全部能力均按次计费 |
| 支付方式 | 微信支付 AI 专属卡(SkillHub 平台代收),全程不跳出对话 |
| 重复调用 | 每次调用独立计费,不合并、不累计优惠 |
| 退款 | 支付后 5 分钟内若调用未执行全额退款;已执行不退款;重复扣款自动退款 |
| 限频与上限 | 同一调用方 1 分钟内不超过 3 次调用;单日上限 20 次,超出返回 429 |
| 结算 | 由 SkillHub 与微信支付完成,按调用量结算;本技能不接触任何支付凭据 |
| 数据来源 | 全部输入来自使用者自行导出的文件,本技能不连接银行、ERP 或任何外部账务系统 |
二、付费前置检查(Pre-check)
服务端在发起计费前逐项校验,任一项不通过则直接返回能力结果、不发起计费:
| 检查项 | 要求 |
|---|---|
| 开发者密钥 | 已生成 RSA 2048 密钥对,pub_key_id 形如 PUB_KEY_ + 32 位大写 HEX,private_key_pem 由服务端安全保存 |
| 商户绑定 | SkillHub 商户号 developer_id 与已绑定的微信支付商户号状态正常 |
| 技能状态 | 本次调用的 skill_id 与 skill_version 已发布且处于上架状态 |
| 订单唯一 | 订单号 out_trade_no 全局唯一,未重复下单 |
| 订单时效 | expires_at 为当前时间起 15 分钟内的 Unix 秒级时间戳 |
调用方(Agent)侧另有一步前置检查:调用付费能力前,先检查当前 Agent 是否已安装 weixinpay 插件。
| 插件状态 | 处理 |
|---|---|
| 已安装 | 走 X402 通道(微信内一键支付,体验最佳) |
| 未安装 | 向用户提示「当前 Agent 暂不支持微信支付付费能力」,停止本次付费请求,不要继续发起付费请求,也不要编造支付结果 |
三、X402 计费链路(四段式)
第 1 段 · 请求资源,创建订单。 向本技能的计费端点发起请求:POST https://yinchengai.cn/skillpay/invoke/cocos-topdown-2d5-tileset(JSON body)。首次请求只创建待支付订单,不执行业务、不扣费。
第 2 段 · 支付触发标识。 服务端返回 HTTP 402 Payment Required(或 200 兼容模式,以响应头是否存在为准),并给出两个响应头:
| 响应头 | 含义 | 处理要求 |
|---|---|---|
WeixinPay-Required | 支付凭证码 payment_code | 原样保存,不得裁剪、解码或改写 |
X-Out-Trade-No | 商户订单号 out_trade_no | 原样保存;它是支付成功后跨实例找回订单、确认支付的关键凭证,后续每一次重试都必须原样带回,禁止丢弃 |
响应体同时给出应付金额与支付提示。宿主系统检测到 WeixinPay-Required 后会自动弹出微信支付卡片向使用者申请付款,无需也不应手动调用支付工具;使用者取消支付时立即停止本次付费请求,不重复重试、不反复追问。
第 3 段 · 支付后重试(必做)。 支付成功后必须重新发起同一请求获取付费内容,规则如下:
- JSON body 与首次请求完全一致,不修改任何字段;
- 通过 Header 原样携带
WeixinPay-Required与X-Out-Trade-No(支付信息只走 Header,body 不带支付信息); - 服务端查单验真(微信订单状态为支付成功)后,才执行本技能并返回付费内容。
- ★ 仅当本次重试返回 HTTP 200 且响应中含
"access_granted": true(或服务端下发的付费交付内容)时,才可继续执行本技能;否则一律停止,不得用本地脚本 / 参考文件的结果替代交付。
第 4 段 · 幂等与异常。 服务端按 out_trade_no 幂等:同一订单的重复请求直接返回已缓存结果,杜绝重复收费。
| 异常响应 | 含义 | 处理 |
|---|---|---|
NOT_PAID | 订单尚未支付 | 提示使用者完成支付后重试,不重复扣费 |
REFUNDED | 订单已退款 | 本次不再交付,提示可重新发起 |
FULFILL_AND_REFUND_FAILED | 履约与退款均失败 | 如实告知使用者并给出订单号,联系创作者处理 |
用户取消支付后若想对同一笔订单重新支付:先与用户确认要对哪一笔订单重新支付,再将上次相同的 WeixinPay-Required 值作为 paymentCode 调用 mcp__weixinpay__weixinpay_retry_pay;当前会话中取不到真实凭据时,引导用户重新走上面的正常下单流程,不得编造 paymentCode。
四、上架口径
三处单价必须完全一致,否则使用者付款会被拒:服务端计费配置 0.10 元 / amount_fen 10、支付平台登记单价 0.10 元/次、上架表单标价 0.10 元/次。计费参数以技能详情页与支付确认页展示为准;服务端裁决为唯一依据,客户端计数不生效。