昨天我们成功将我们的瓦片图渲染到窗口里
坏蛋Dan:rust基础学习--基于Bevy实现扫雷小游戏day3
今天我们继续实现这个小游戏
我们距离扫雷demo
还剩下一部分:交互。
不过今天我们先不做这一块,我们来完善下之前做的东西。
现在我们的瓦片长得太难看了,并且后面还会被变成炸弹,也要支持插旗,所以我们还需要一些静态资源。
资源下载地址:assets · master · Qonfucius / Minesweeper Tutorial · GitLab
这些资源得放到mine_sweeper
里,和src
同级,这个是相对路径的默认规则。
加完静态资源之后,我们回到board_plugin/src/lib.rs
中,找到create_board
方法,我们新增一个参数asset_server
assets
翻译过来是断言,但是前端中这个文件夹里的东西一般我自己叫做静态资源,所以我这里就沿用了,静态资源(assets
)和资源(resources
)是俩不同的东西,虽然assets
也是Resources
的一种。
AssetServer
:在后台通过filesystem
也就是文件系统加载静态资源。用法可以看这个https://github.com/bevyengine/bevy/tree/latest/examples/asset/asset_loading.rs接着我们创建三个component
,用来表示炸弹、炸弹邻居以及空瓦片。
回到board_plugin/src/component
文件夹里,创建bomb.rs、bomb_neighbor.rs
和uncover.rs
三个文件
然后在component/mod.rs
中将它们导出
这一块内容相当的繁琐,尤其是用于侦测的,你可以自己搞个宏简化写法(我自己试了一天多,跪了,后面有必要把macro那篇文档的学习提前了)。
最后我们在main.rs
中引入并注册到app
里,这样才能被侦测到
不过想了下,其实我们并不需要放在main.rs
中,因为这块类型注册实际上也算是业务逻辑相关的,所以应该放到board_plugin/src/lib.rs
中的build
方法中,这样就不会污染main.rs
了。
这样就舒服很多了。
接着我们来尝试把这些assets
渲染到窗口上。
现在我们窗口上的瓦片都是灰色的,我们来给它们上色。
之前我们也有上色的逻辑,但是那是输出在终端的。
回到lib.rs
中,新增一个method
这个方法很简单,就是给炸弹邻居们上色
Text2dBundle
:看名字就知道了,一堆和Text
相关的component
组合体。我们把上色的字放在这个瓦片的中间。
这里有一点需要注意,那就是Transform
的z
轴这里给了1.
,这样文案才不会被覆盖。
然后我们回到create_board
的方法中,在之前给瓦片上色的地方。
为了让代码结构更清晰,先不接入上色代码,我们先来把这块逻辑迁移到另一个方法中。
注意,不是BoardPlugin
的method
,是关联函数,或者你直接拿出来当做function
也不是不行,不过后面有些写法需要调整。
抽出来之后我们再回到create_board
方法中替换原来的代码
资源加载一般放到方法的顶部,确保资源的正常加载。
ok
,现在我们可以来接入上色逻辑了。
回到我们的spawn_tiles
方法中。
之前我们是无差别上色,现在我们可以match
匹配分别上色。
如果是炸弹就给它上张图,而炸弹邻居则是不同颜色的数字。
注意,这里的炸弹图和文字都是实体,层级在瓦片下。
那么这里就上色完毕了,我们来运行下cargo run
你也可以--features debug
看下component
检测是否正常。
这里只放lib.rs
的,其它没多大改变。
莫得。
编辑于 2023-02-12 12:40・IP 属地广东