溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

引擎ECS框架中system的語法糖是怎么實(shí)現(xiàn)的

發(fā)布時(shí)間:2021-11-23 22:14:37 來源:億速云 閱讀:111 作者:柒染 欄目:大數(shù)據(jù)

引擎ECS框架中system的語法糖是怎么實(shí)現(xiàn)的,針對(duì)這個(gè)問題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡單易行的方法。

集(Bevy)引擎ECS框架中system的語法糖是怎么實(shí)現(xiàn)的

群集(Bevy)引擎中的system就是普通的Rust函數(shù),這樣的設(shè)計(jì)及其符合人體工程學(xué),就像作者本人在群集(Bevy)引擎的介紹中說的那樣,目前找不到比群集引擎更符合人體工程學(xué)的ECS框架設(shè)計(jì)了。
推特上有人簡單分析了一下群集引擎中這部分代碼的語法糖是怎么實(shí)現(xiàn)的,考慮到不少小伙伴并不能夠隨時(shí)訪問推特,在這里我把大概意思搬運(yùn)過來。
system作為普通的Rust函數(shù),它的參數(shù)也就代表了需要訪問的那些組件的查詢。群集提供的主要示例非常引人注目,系統(tǒng)就是函數(shù),組件就是結(jié)構(gòu)體,你不需要實(shí)現(xiàn)額外的trait,就能夠讓ECS框架正常運(yùn)作。
use bevy::prelude::*;
就像上面的示例一樣,只要按照一定的規(guī)則寫出函數(shù),在App的構(gòu)建模式中調(diào)用  .system()  方法就可以把函數(shù)變成系統(tǒng)。
一個(gè)普通的Rust函數(shù)在調(diào)用  .system()  這個(gè)方法之后,將被轉(zhuǎn)換為一個(gè)  Box<dyn System>  ,對(duì)于群集支持的兩種系統(tǒng),采用  IntoForEachSystem  和  IntoQuerySystem  這兩個(gè)trait進(jìn)行轉(zhuǎn)換。
   
// 具體代碼可以去群集的文檔里看,這里只舉例了IntoQuerySystem這個(gè)trait

pub trait IntoQuerySystem<Commands,R,Q> {    fn system(self) -> Box<dyn System>;}
有了trait之后只需要把trait實(shí)現(xiàn)給我們可能會(huì)調(diào)用的函數(shù),一個(gè)一個(gè)函數(shù)的去實(shí)現(xiàn)肯定是不可能的,翻看群集的這部分源碼能夠看到大量的使用了宏:
具體的代碼可以去看群集的源碼,總結(jié)來說,群集實(shí)現(xiàn)的這種及其符合人體工程學(xué)的ECS架構(gòu),就是基于宏加上trait來實(shí)現(xiàn)的。

Rust寫數(shù)據(jù)可視化的一個(gè)小教程

該文用到了  plotly  庫,是一個(gè)可以動(dòng)手實(shí)驗(yàn)的小教程。
教程原文  :https://shahinrostami.com/posts/programming/rust-notebooks/box-plots-at-the-olympics/

OrbTk 0.3.1-alpha3發(fā)布了

之前關(guān)注過Redox的應(yīng)該知道OrbTk是他們團(tuán)隊(duì)給該操作系統(tǒng)設(shè)計(jì)的Gui庫,現(xiàn)在這個(gè)庫在crates.io發(fā)布了最新的版本,相較于之前性能更好了,也有了新的主題切換引擎可以選擇。還更新了三種UI組件(ProgressBar,NumericBox,TabWidget)。
Read More  :https://github.com/redox-os/orbtk/releases/tag/0.3.1-alpha3

“Rust沒有穩(wěn)定的ABI”

作者見過GNOME的用戶(通常是在C庫上工作了很長時(shí)間的人)表達(dá)以下問題:
  1. 編譯的Rust代碼沒有穩(wěn)定的ABI(應(yīng)用程序二進(jìn)制接口)。
  2. 因此,我們不能使用傳統(tǒng)的Linux發(fā)行版共享庫。
  3. 同時(shí),Rust還將其整個(gè)標(biāo)準(zhǔn)庫與它所編譯的每個(gè)二進(jìn)制文件捆綁在一起,這使得Rust構(gòu)建的庫非常龐大。
作者是那種認(rèn)為大部分基礎(chǔ)設(shè)施都應(yīng)該用Rust重寫的人,所以這些問題,也是作者本人非常關(guān)注的事。
因此作者寫了一篇關(guān)于這個(gè)問題文章。
Read More  :https://people.gnome.org/~federico/blog/rust-stable-abi.html

docs.rs 已經(jīng)更新了文檔覆蓋功能

docs.rs更新了文檔覆蓋功能  

關(guān)于構(gòu)建者模式的一個(gè)簡短介紹

一個(gè)關(guān)于構(gòu)建者模式的簡短介紹。
以及提供了三個(gè)實(shí)際項(xiàng)目中的用例。
Read More  :https://matklad.github.io/2020/08/12/who-builds-the-builder.html

This Week in Rust

每周官方都會(huì)更新的This Week in Rust又更新了。
這已經(jīng)是第351期了。
基本上最近有關(guān)Rust的動(dòng)向里面都收集了,個(gè)人一直比較關(guān)注的是Tooling類的動(dòng)向吧,rust-analyzer越來越好用了。
其他動(dòng)向日?qǐng)?bào)基本都涉及過了,這里不再提及,主要說兩個(gè),一個(gè)是每月都會(huì)更新一次的Rust GameDev,以及最近才更新的區(qū)塊鏈相關(guān)動(dòng)向。

關(guān)于引擎ECS框架中system的語法糖是怎么實(shí)現(xiàn)的問題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識(shí)。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI