游戏 已归档

kaboom

replit/kaboom

💥 JavaScript 游戏库

2732
Stars 标星
234
Forks 分支
15
Watchers 关注
54
Open Issues
TypeScript
主要语言
MIT
开源协议
81.1 MB
仓库大小
2 年前
最后推送
一键安装扩展 / 插件指令
dsh plugin --profile web add github:replit/kaboom
git clone https://github.com/replit/kaboom.git
git clone git@github.com:replit/kaboom.git
README.md master

英文原文正文为项目原始 README(英文),本站后续会翻译为中文,当前仅剔除图片与无关章节并统一排版。

通知

Replit 不再维护 Kaboom。你可能对社区分支 KaPlay 感兴趣。

轰

Kaboom 是一个 JavaScript 库,帮助你快速且有趣地制作游戏!

开始在 Kaboom Playground 中进行尝试

示例

// initialize context
kaboom()

// define gravity
setGravity(2400)

// load a sprite called "bean"
loadSprite("bean", "sprites/bean.png")

// compose the player game object from multiple components and add it to the game
const bean = add([
    sprite("bean"),
    pos(80, 40),
    area(),
    body(),
])

// press space to jump
onKeyPress("space", () => {
    // this method is provided by the "body" component above
    bean.jump()
})

Kaboom 使用强大的组件系统来组合游戏对象和行为。

// add a game obj to the scene from a list of component
const player = add([
    // it renders as a sprite
    sprite("bean"),
    // it has a position
    pos(100, 200),
    // it has a collider
    area(),
    // it is a physical body which will respond to physics
    body(),
    // it has 8 of health
    health(8),
    // or give it tags for easier group behaviors
    "player",
    "friendly",
    // plain objects fields are directly assigned to the game obj
    {
        dir: vec2(-1, 0),
        dead: false,
        speed: 240,
    },
])

用于描述行为的块状命令语法

// .onCollide() comes from "area" component
player.onCollide("enemy", () => {
    // .hurt() comes from "health" component
    player.hurt(1)
})

// check fall death
player.onUpdate(() => {
    if (player.pos.y >= height()) {
        destroy(player)
        gameOver()
    }
})

// if 'player' onCollide with any object with tag "enemy", run the callback
player.onCollide("enemy", () => {
    player.hp -= 1
})

// all objects with tag "enemy" will move towards 'player' every frame
onUpdate("enemy", (e) => {
    e.move(player.pos.sub(e.pos).unit().scale(e.speed))
})

// move up 100 pixels per second every frame when "w" key is held down
onKeyDown("w", () => {
    player.move(0, 100)
})

用法

使用 create-kaboom 开始一个项目

启动 Kaboom 游戏最快的方法是使用 create-kaboom

$ npm init kaboom mygame

这将为你创建一个名为 mygame 的目录,里面包含我们需要的所有文件

$ cd mygame
$ npm run dev

然后打开 http://localhost:5173 并编辑 src/game.js

作为 NPM 包安装

$ npm install kaboom
import kaboom from "kaboom"

kaboom()

add([
    text("oh hi"),
    pos(80, 40),
])

也适用于 CommonJS

const kaboom = require("kaboom")

请注意,您需要使用像 esbuild 或 webpack 这样的打包工具才能在 NPM 上使用 Kaboom

浏览器 CDN

这会导出一个全局的 kaboom 函数

<script src="https://unpkg.com/kaboom@3000/dist/kaboom.js"></script>
<script>
kaboom()
</script>

或用于 ES 模块

<script type="module">
import kaboom from "https://unpkg.com/kaboom@3000/dist/kaboom.mjs"
kaboom()
</script>

适用于所有支持 NPM 包的 CDN,例如 jsdelivr、skypack

文档

开发

  1. npm install 安装开发包
  2. npm run dev 启动开发服务器
  3. 访问 http://localhost:8000/ 并选择一个例子
  4. 编辑 examples/ 里的例子进行测试

查看 CONTRIBUTION.md 获取完整信息。

社区

游戏

由 Kaboom 制作的游戏集合,由 Kaboom 精选,点击这里。

杂项

本站来源与版权声明
  • 本文标题:kaboom - 💥 JavaScript 游戏库
  • 本文链接:https://cn121.com/game/replit-kaboom.html
  • 原项目:replit/kaboom 版权归原作者 replit 及贡献者所有
  • 收录信息:本站于 2026-10-17 收录本项目,本页所列协议与仓库指标均为收录当时的状态;该日期之后原项目的版本更新与协议变更,本页不作同步。
  • 开源协议:收录时本项目采用 MIT(查看 LICENSE 原文),本站转载其原始文档(未改动文字,仅剔除图片与无关章节);使用、修改、分发请以该仓库 LICENSE 原文为准。
  • 站点出处:本文首发于 OneTwoOne,收录自 GitHub 开源项目 replit/kaboom。
  • 内容说明:本页正文为原项目 README 原文(英文),本站后续会翻译为中文(当前尚未译出,仅将二级标题译为中文,便于按栏目定位;标题原文可在下方原仓库中查看),仅剔除了图片与赞助等无关章节、并把相对链接改为绝对地址;页首简介为机器翻译自仓库描述。
  • 引用声明:商业转载、第三方聚合或 AI 检索训练引用时,请务必保留以上来源出处、本文永久链接,以及原项目的版权声明与许可信息。
  • 下架通道:若原项目此后变更或收紧了许可协议、或作者/权利人认为本站的收录方式(译文、排版适配、简介翻译等)超出其授权范围,请通过 xyd3302001@163.com 发送下架通知,并附上项目地址与本页链接。本站核实后将第一时间删除本页内容,或改为不复制原文的目录性收录;署名更正等其他要求可一并提出。