首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有一种方法可以将多个瓷砖合并到一个级别- Kaboom JS中?

有没有一种方法可以将多个瓷砖合并到一个级别- Kaboom JS中?
EN

Stack Overflow用户
提问于 2021-11-14 01:45:19
回答 1查看 199关注 0票数 1

当在kaboomJS中使用一个大的平铺地图碰撞时,事情开始变慢.所以,我想知道是否有一种简单的方法可以合并多个块,比如一整行块是否可以作为一个大块来处理?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-18 23:09:55

1.瓷砖不一定要装在格子里

如果您想一次减少场景中的游戏对象的数量,您可以在您的级别定义中有一个符号来表示一个跨越多个网格块的游戏对象。因此,如果您想要有3个网格方格宽的许多平台,则每个平台不需要3个对象,只需使用一个字符来表示3x1rect:

代码语言:javascript
复制
import kaboom from "kaboom"

// initialize context
kaboom()

// load assets
loadSprite("bean", "sprites/bean.png")

addLevel(
  // Note: the hyphens here hare just place holders to remind us that the
  // game objects created by ➁ and ➂ are actually taking up 2 and 3 grid
  // squares respectively.
  [
    "    ⚥                           ",
    "                                ",
    "            ➂--                 ",
    "                                ",
    "       ➁-                       ",
    "                                ",
    "                                ",
    "################################",
  ],
  {
    width: 32,
    height: 32,
    "⚥": () => [
        sprite("bean"),
        area(),
      body(),
      "player"
    ],
    "#": () => [
      rect(32, 32),
      outline(2),
      area(),
      solid(),
    ],
    "➁": () => [
      rect(32 * 2, 32),
      outline(2),
      area(),
      solid(),
    ],
    "➂": () => [
      rect(32 * 3, 32),
      outline(2),
      area(),
      solid(),
    ],
  }
);

const player = get("player")[0];

player.onUpdate(() => {
  const left = isKeyDown('left') || isKeyDown('a');
  const right = isKeyDown('right') || isKeyDown('d');
  if (left && !right) {
    player.move(-500, 0);
  } else if (right && !left) {
    player.move(500, 0);
  }
  camPos(player.pos);
});

onKeyPress("space", () => {
  if (player.isGrounded()) {
    player.jump();
  }
});

显然,如果您有许多不同的形状和大小,这将是相当繁重的。

2.高级:四叉树和装卸区

实际上,在最近的一个Kaboom项目中,我自己也遇到了这个问题,我决定用我自己的实现来彻底修改addLevel()中的构建,这个实现是从位图中加载的,而不是一串字符串,然后将级别数据组织到一个四叉树中,这样我就可以快速找到与可见区域重叠的块,并根据它们的可见性来加载和卸载游戏对象。这里的技术和代码有点复杂,所以我只链接到爬行和相关的源代码:level-loader.tslib-quad-tree.ts以及在level-one.js e.js中的用法

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69959651

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档