No.1 杀戮尖塔Godot复刻|项目概述|场景设置

项目概述

含有47个脚本文件,包括1185行代码,最长的脚本有111行

Battle Node——战斗节点
  1. start_battle()——开始战斗
  2. turn management——管理回合
  3. win/lose conditions——识别输赢条件
EnemyHandler——敌人处理程序
  1. enemy turn management——管理敌人回合
  2. doing enemy actions——敌人行动执行
  3. etc.
Enemy entities——敌人实体
Enemy scenes——敌人场景
PlayerHandler——玩家处理程序
  1. player turn management——管理玩家回合
  2. drawing/discarding cards——绘制丢弃卡
  3. etc.
PlayerNode——玩家节点
  1. displaying stats——统计数据
  2. taking damage visually——显示伤害
  3. etc.——玩家角色的视觉表示
UI——连接到战斗最顶部的用户界面
  1. cards——卡牌
  2. mana——法力
  3. tooltips——工具提示
Data management: Resources——资源系统
Card——卡牌
  1. name
  2. mana cost
  3. effect
CardPile——牌堆
  1. array of cards
  2. used decks,the draw pile and the discard pile——抽牌堆、弃牌堆
Effects——效果
  1. do something to a target
  2. add block
  3. damage etc.
Stats——数据
  1. enemy turn management
  2. doing enemy actions
  3. etc.
CharacterStats
EnemyStats
Intent——意图
  1. icon
  2. text

项目开始

导入资产

GitHub - guladam/deck_builder_tutorial at season-1-starter-project
将资产解压,移动到godot的文件系统
![[Pasted image 20241126132756.png]]

删除默认的图标
![[Pasted image 20241126132847.png]]

项目设置

在配置界面导入图标文件
![[Pasted image 20241126133040.png]]

![[Pasted image 20241126133057.png]]

窗口设置
视口宽度和高度256和144
![[Pasted image 20241126133309.png]]

拉伸模式选择viewport
![[Pasted image 20241126133334.png]]

高级设置大小里填入1280和720
![[Pasted image 20241126133353.png]]

创建场景

点击创建2D场景
![[Pasted image 20241126133437.png]]

将坐标原点锁定,防止移动
![[Pasted image 20241126133611.png]]

保存场景,在scenes文件夹的Battle文件夹里
![[Pasted image 20241126133751.png]]

添加背景

创建一个精灵节点
![[Pasted image 20241126133929.png]]

将art文件夹里的background文件拖到右边的纹理属性里
![[Pasted image 20241126134103.png]]

关闭掉居中属性
![[Pasted image 20241126134213.png]]

![[Pasted image 20241126134232.png]]

点击锁定,将背景锁定住

调节亮暗
![[Pasted image 20241126134411.png]]

调整可见性的Modulate属性
![[Pasted image 20241126134521.png]]

使用ctrl+s保存场景

运行场景

![[Pasted image 20241126134619.png]]

选择当前
![[Pasted image 20241126134638.png]]

![[Pasted image 20241126134747.png]]

渲染

如果放大背景,图片会变模糊
打开项目设置,找到渲染,纹理
![[Pasted image 20241126134911.png]]

将画布纹理改为Nearest
![[Pasted image 20241126134953.png]]

![[Pasted image 20241126135041.png]]

这样即使放大和在游戏时图片会更清晰

Godot引擎中生成类似《杀戮尖塔》(Slay the Spire)风格的Roguelike地图,通常需要结合程序化生成算法和预定义的房间模板。这种地图由多个房间组成,每个房间通过路径连接,形成一个类似“塔”的结构,玩家可以在其中逐步探索并挑战关卡[^1]。 以下是实现这种地图生成的核心思路和技术步骤: ### 1. 定义房间类型 首先,需要定义不同类型的房间,例如普通战斗房间、精英战斗房间、商店、休息点、Boss房间等。这些房间可以预先设计为场景(Scene)或TileMap资源,便于后续加载和管理。 ### 2. 地图结构设计 《杀戮尖塔》的地图结构通常呈现为一个树状或链状结构,每一层由若干节点组成,每个节点代表一个房间。可以使用图结构(Graph)来表示房间之间的连接关系。 ```gdscript # 示例:定义房间节点 class_name RoomNode extends Node2D var room_type: String var connections: Array = [] ``` ### 3. 程序化生成算法 可以使用以下几种算法来生成地图: - **随机树生成**:从起始房间出发,逐步添加新的房间节点,确保每个新房间与已有结构连接。 - **房间布局排列**:使用A*或BFS算法确保所有房间之间可通行。 - **网格布局**:将地图划分为一个二维网格,每个房间占据一个格子,避免重叠。 ### 4. 房间布局与碰撞检测 在生成房间布局时,需要确保房间之间不重叠,并且路径合理。可以使用简单的矩形碰撞检测来判断新房间是否与已有房间冲突。 ```gdscript func can_place_room(room: Room, grid: Dictionary, grid_size: Vector2) -> bool: for x in range(room.rect.size.x / grid_size.x): for y in range(room.rect.size.y / grid_size.y): var pos = room.rect.position + Vector2(x * grid_size.x, y * grid_size.y) if grid.has(pos): return false return true ``` ### 5. 房间连接路径生成 一旦房间布局确定,下一步是生成连接路径。可以使用A*算法或简单的直线路径来连接相邻房间,确保玩家可以在房间之间移动。 ```gdscript func generate_paths(room_graph: Dictionary): for room in room_graph.keys(): for neighbor in room_graph[room]: var path = get_path_between_rooms(room, neighbor) draw_path(path) ``` ### 6. 整合进Godot场景 将生成的房间和路径整合为一个场景,可以使用`TileMap`来绘制房间结构,或者使用`Node2D`和`Polygon2D`来可视化路径。 --- ### 示例结构 一个简单的《杀戮尖塔》风格地图结构如下: ``` [Start] → [Battle] → [Elite] → [Boss] ↘ [Shop] ↗ ↘ [Rest] ``` 每个节点代表一个房间,箭头表示连接关系。 --- ### 7. 可扩展性与多样性 为了增加游戏的可重玩性,可以在每次生成地图时随机选择房间类型、位置和连接方式。也可以加入“回廊”(Shortcut)或“隐藏房间”等机制,提升探索乐趣。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值