# godot_1bit_platformer **Repository Path**: tomthethuan/godot_1bit_platformer ## Basic Information - **Project Name**: godot_1bit_platformer - **Description**: 用godot游戏引擎做的一个平台跳跃游戏,目前算是把一些最基础的东西都写好了。目前只有四个用于展示功能的房间,但是可以很方便地添加新的内容和关卡。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2025-05-25 - **Last Updated**: 2025-10-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 1bit Platformer Assets: https://kenney.nl/assets/1-bit-platformer-pack KeyboardIcons: https://greatdocbrown.itch.io/gamepad-ui License: [Creative Commons CC0](https://creativecommons.org/publicdomain/zero/1.0/) ![image-20250610201931452](./README.assets/image-20250610201931452.png) ![image-20250610201947790](./README.assets/image-20250610201947790.png) ![image-20250610202009903](./README.assets/image-20250610202009903.png) ## TODO - [x] add parallax backgrounds - [x] add movable platforms - [x] add force reset area - [x] add dialog box - [x] add mobs - [x] add hp bar - [x] add interactables - [x] add teleprot animation/effects - [x] add ability control menu to debug panel - [x] add multiple levels - [x] add teleporter - [ ] add pop-up dialog - [x] add pause menu - [X] adapt to touch screen devices - [x] add coins - [ ] add sound effects ## 下载与使用 本项目目前存在两个分支:master和template。master分支里放的是完整的项目,而template分支中只有必要的内容,是一个精简过的、易于他人使用的版本。但是template版本不经常同步,所以大部分情况下直接使用master分支即可。 ### 使用Git下载(推荐) ```shell git clone https://gitee.com/tomthethuan/godot_1bit_platformer.git cd godot_1bit_platformer git switch template # 如果要使用template分支 ``` 之后用Godot打开即可 ### 直接下载zip文件 1. 下载master分支的源码并解压 2. 如果要下载template分支的源码:https://gitee.com/tomthethuan/godot_1bit_platformer/repository/archive/template 然后使用Godot打开此文件夹 ## 特性和机制 - 玩家长按跳跃可以跳得更高 - 我觉得这个项目过于简单了,就干脆没做主页面,玩家可以通过按下Esc键打开暂停页面 - 玩家在地图中可以按下R键回到上一个检查点 - 玩家受到伤害会扣血,但是玩家血量清零时会不会有任何反应,这是因为我还没想好当玩家血量清零时会有什么效果 - 重新进入场景时用于回血的Hearts会重新刷新 ## 使用指南 **所有节点的取名应该直白并且有意义,能通过名称了解该节点的用途** 添加大部分内容都不要求使用代码 这个项目的代码并不复杂,如果有能力的话可以自己通过阅读源代码来做更改。要是本文档中有写的不清楚或错误的地方,欢迎在[Issues](https://gitee.com/tomthethuan/godot_1bit_platformer/issues)中提出。 ### 添加新的地图 1. 复制`base_level.tscn`文件,把这个文件当作新地图的模板 2. 双击新创建的`.tscn`文件,在场景编辑器中打开 3. 绘制地图: 选中Map节点,在编辑器下方选中TileMap标签绘制 4. 设置玩家默认生成位置: 选中PlayerSpanPos节点,在编辑器上方2D标签页中移动该节点的位置 ### 增加可移动平台 1. 选择Platforms节点,实例化`movable_platform.tscn`场景 2. 在新节点下添加两个Maker2D节点,作为移动平台的起始点和终点 3. 新增CollisionShape2D节点,绘制移动平台的碰撞箱 4. 新增Sprite2D节点,作为移动平台的外观 5. 再次选择新创建的MovablePlatform节点,在检查器中设置起始点和终点 6. 如果要选择移动速度,可以在Speed中设置 ### 增加场景伤害判定 **场景伤害** 1. 选择Damages节点,实例化`damage_area.tscn`场景 2. 在新节点下增加Sprite2D和CollisionShape2D节点,添加碰撞箱和外观 | 参数 | 默认值 | 描述 | | --------------------- | ------ | ------------------------------------------------------------ | | reset_to_checkpoint | true | 设定为true时玩家碰到会直接重置到最后一个存档点,一般用于场景伤害 | | damage | 1.0 | 玩家受到伤害时会扣除的血量 | | camera_shake_strength | 4.0 | 玩家受到伤害时相机抖动的幅度 | **怪物伤害** 1. 选择Mobs节点,实例化`mob.tscn`场景 2. 与可移动平台一样,添加两个Maker2D节点,作为怪物的起点和终点,并在检查器中设置 | 参数 | 默认值 | 描述 | | --------------------- | ------ | ---------------------------- | | speed | 50.0 | 怪物移动的速度 | | start | null | 怪物的初始位置 | | end | null | 怪物的终点位置 | | damage | 1.0 | 玩家碰到怪物时扣除的血量 | | camera_shake_strength | 2.0 | 玩家受到伤害时相机抖动的幅度 | ### 添加可收集对象 1. 选择Collectives节点,实例化`heart.tcsn`或`coin.tscn`场景 2. 在amount属性中获得的数量 ### 添加检查点 1. 选择CheckPoints节点,实例化`check_point.tcsn`场景 2. 如果要增加检查点的触发范围的话可以额外添加CollisionShape2D或CollisionPolygon2D节点 ### 添加提示信息 1. 选择Dialogs节点,实例化`dialog.tcsn`场景 2. 为新创建的节点添加CollisionShape2D节点,作为触发范围 | 参数 | 默认值 | 描述 | | --------- | ---------------- | ---------------------------------------- | | text | Placeholder text | 要显示的内容,只能显示一行 | | duration | 5.0 | 切换显示和隐藏时的速度 | | wait_time | 2.0 | 当玩家离开检测范围时,等待消失所需的秒数 | ### 添加可互动对象 **注:**增加此类对象时可能会要求些代码 1. 选择Interactables节点,实例化`interactable.tcsn`场景 2. 新增CollisionShape2D节点,作为可互动对象的出发范围 3. 新增Sprite2D节点,作为可互动对象的外观 | 参数 | 默认值 | 描述 | | ------------- | ------ | ------------------------------------------ | | disabled | false | 当设定为true时禁用该对象 | | auto_activate | false | 当设为为true时玩家不需要按下互动键即可触发 | 为可互动对象添加代码逻辑: 1. 选择该场景的根节点,并为其扩展代码 2. 可以使用`BaseLevel: Init Interactables`作为模板 3. 移除模板中的`@onready var node: Interactable`,并替换成实际的可互动对象(可以在按下ctrl键或cmd键时将可互动对象拖入代码编辑器) 4. 在`init_interactables()`中设置自定义可互动对象在触发是的行为 例如你的自定义可互动对象的名字是GetPlayerHP,那么当你正确拖入代码编辑器时应该是这样的`@onready var get_player_hp: Interactable = $Interactables/GetPlayerHP`,然后自定义行为可以是`print(GlobalGameData.player_HP)`。以下是此例子的示例代码: ```gdscript extends BaseLevel @onready var get_player_hp: Interactable = $Interactables/GetPlayerHP func init_interactables() -> void: get_player_hp.action = func (): print(GlobalGameData.player_HP) ``` ### 增加新的地图 1. 实例化`teleport.tscn`场景,并为其添加CollisionShape2D 2. 在`destination_scene`中填入玩家要进入的目标场景路径,这个路径是该场景在项目资源中的路径,例如`res://levels/target_level.tscn` 3. 在`mode`中填入切换场景的模式: - 如果横向切换场景则选择Normal - 如果要向下进入场景则选择Down - 如果要向上进入场景则选择Up 4. 在目标场景中添加EntryPoint节点,并为该节点起一个场景中唯一的名字(用于识别此进入点)。即使多个EntryPoint的路径不一样它们的名字也不应该一样 5. 设置玩家进入场景时的朝向: - 如果玩家从右往左进入场景时选择Left - 如果玩家从左往右进入场景时选择Right - 如果玩家是纵向切换场景,并且不需要特别设置玩家的朝向时,可以将direction选择成Keep 6. 在原场景中Teleport节点下的`destination_point`中填入在第四步中设置的唯一名字