αž›αŸαž„ Rust αž€αŸ’αž“αž»αž„αžšαž™αŸˆαž–αŸαž› 24 αž˜αŸ‰αŸ„αž„αŸ– αž”αž‘αž–αž·αžŸαŸ„αž’αž“αŸαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“

αž›αŸαž„ Rust αž€αŸ’αž“αž»αž„αžšαž™αŸˆαž–αŸαž› 24 αž˜αŸ‰αŸ„αž„αŸ– αž”αž‘αž–αž·αžŸαŸ„αž’αž“αŸαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“

αž“αŸ…αž€αŸ’αž“αž»αž„αž’αžαŸ’αžαž”αž‘αž“αŸαŸ‡αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αž“αž·αž™αžΆαž™αž’αŸ†αž–αžΈαž”αž‘αž–αž·αžŸαŸ„αž’αž“αŸαž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“αžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ†αž€αŸ’αž“αž»αž„αž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž αŸ’αž‚αŸαž˜αžαžΌαž…αž˜αž½αž™αž“αŸ…αž€αŸ’αž“αž»αž„ Rust αŸ” αžœαžΆαžαŸ’αžšαžΌαžœαž…αŸ†αžŽαžΆαž™αž–αŸαž›αž”αŸ’αžšαž αŸ‚αž› 24 αž˜αŸ‰αŸ„αž„αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαžαž€αŸ†αžŽαŸ‚αž’αŸ’αžœαžΎαž€αžΆαžš (αž—αžΆαž‚αž…αŸ’αžšαžΎαž“αžαŸ’αž‰αž»αŸ†αž’αŸ’αžœαžΎαž€αžΆαžšαž“αŸ…αž–αŸαž›αž›αŸ’αž„αžΆαž… αž¬αžαŸ’αž„αŸƒαž…αž»αž„αžŸαž”αŸ’αžαžΆαž αŸ)αŸ” αž αŸ’αž‚αŸαž˜αž“αŸαŸ‡αž‚αžΊαž“αŸ…αž†αŸ’αž„αžΆαž™αž–αžΈαž€αžΆαžšαž”αž‰αŸ’αž…αž”αŸ‹ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžαŸ’αž‰αž»αŸ†αž‚αž·αžαžαžΆαž”αž‘αž–αž·αžŸαŸ„αž’αž“αŸαž“αžΉαž„αž•αŸ’αžαž›αŸ‹αžšαž„αŸ’αžœαžΆαž“αŸ‹αŸ” αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αž…αŸ‚αž€αžšαŸ†αž›αŸ‚αž€αž“αžΌαžœαž’αŸ’αžœαžΈαžŠαŸ‚αž›αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αžšαŸ€αž“ αž“αž·αž„αž€αžΆαžšαžŸαž„αŸ’αž€αŸαžαž˜αž½αž™αž…αŸ†αž“αž½αž“αžŠαŸ‚αž›αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž’αŸ’αžœαžΎαž“αŸ…αž–αŸαž›αž”αž„αŸ’αž€αžΎαžαž αŸ’αž‚αŸαž˜αžαžΆαŸ†αž„αž–αžΈαžŠαŸ†αž”αžΌαž„αŸ”

Skillbox αžŽαŸ‚αž“αžΆαŸ†αŸ– αžœαž‚αŸ’αž‚αžŸαž·αž€αŸ’αžŸαžΆαž‡αžΆαž€αŸ‹αžŸαŸ’αžαŸ‚αž„αžšαž™αŸˆαž–αŸαž›αž–αžΈαžšαž†αŸ’αž“αžΆαŸ† "αžαŸ’αž‰αž»αŸ†αž‡αžΆαž’αŸ’αž“αž€αž”αž„αŸ’αž€αžΎαžαž‚αŸαž αž‘αŸ†αž–αŸαžš PRO".

αž™αžΎαž„αžšαŸ†αž›αžΉαž€αŸ– αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž’αžΆαž“αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸƒ "Habr" - αž€αžΆαžšαž”αž‰αŸ’αž…αž»αŸ‡αžαž˜αŸ’αž›αŸƒ 10 rubles αž“αŸ…αž–αŸαž›αž…αž»αŸ‡αžˆαŸ’αž˜αŸ„αŸ‡αž€αŸ’αž“αž»αž„αžœαž‚αŸ’αž‚αžŸαž·αž€αŸ’αžŸαžΆ Skillbox αžŽαžΆαž˜αž½αž™αžŠαŸ„αž™αž”αŸ’αžšαžΎαž›αŸαžαž€αžΌαžŠαž•αŸ’αžŸαž–αŸ’αžœαž•αŸ’αžŸαžΆαž™ "Habr" αŸ”

αž αŸαžαž»αž’αŸ’αžœαžΈαž”αžΆαž“αž‡αžΆαž…αŸ’αžšαŸαŸ‡?

αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž—αžΆαžŸαžΆαž“αŸαŸ‡ αžŠαŸ„αž™αžŸαžΆαžšαžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž›αžΊαžšαžΏαž„αž›αŸ’αž’αŸ—αž‡αžΆαž…αŸ’αžšαžΎαž“αž’αŸ†αž–αžΈαžœαžΆ αž αžΎαž™αžαŸ’αž‰αž»αŸ†αžƒαžΎαž‰αžαžΆαžœαžΆαž€αžΆαž“αŸ‹αžαŸ‚αž˜αžΆαž“αž”αŸ’αžšαž‡αžΆαž”αŸ’αžšαž·αž™αž—αžΆαž–αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž αŸ’αž‚αŸαž˜αŸ” αž˜αž»αž“αž–αŸαž›αžŸαžšαžŸαŸαžšαž αŸ’αž‚αŸαž˜ αžαŸ’αž‰αž»αŸ†αž˜αžΆαž“αž”αž‘αž–αž·αžŸαŸ„αž’αž“αŸαžαž·αž…αžαž½αž…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŸαžΆαž˜αž‰αŸ’αž‰αž“αŸ…αž€αŸ’αž“αž»αž„ Rust αŸ” αž“αŸαŸ‡αž‚αžΊαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαžΆαž“αŸ‹αžŠαžΎαž˜αŸ’αž”αžΈαž•αŸ’αžαž›αŸ‹αž±αŸ’αž™αžαŸ’αž‰αž»αŸ†αž“αžΌαžœαž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαž“αŸƒαžŸαŸαžšαžΈαž—αžΆαž–αž“αŸ…αž–αŸαž›αžŸαžšαžŸαŸαžšαž αŸ’αž‚αŸαž˜αŸ”

αž αŸαžαž»αž’αŸ’αžœαžΈαž”αžΆαž“αž‡αžΆαž αŸ’αž‚αŸαž˜ αž“αž·αž„αž”αŸ’αžšαž—αŸαž‘αž αŸ’αž‚αŸαž˜αž’αŸ’αžœαžΈ?

αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαž αŸ’αž‚αŸαž˜αž‚αžΊαžŸαž”αŸ’αž”αžΆαž™! αžαŸ’αž‰αž»αŸ†αž”αŸ’αžšαžΆαžαŸ’αž“αžΆαžαžΆαž˜αžΆαž“αž αŸαžαž»αž•αž›αž…αŸ’αžšαžΎαž“αž‘αŸ€αž αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‚αž˜αŸ’αžšαŸ„αž„ "αž•αŸ’αž‘αŸ‡" αžαŸ’αž‰αž»αŸ†αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž”αŸ’αžšαž’αžΆαž“αž”αž‘αžŠαŸ‚αž›αž˜αž·αž“αž‘αžΆαž€αŸ‹αž‘αž„αž‡αž·αžαžŸαŸ’αž“αž·αž‘αŸ’αž’αž–αŸαž€αž‡αžΆαž˜αž½αž™αž€αžΆαžšαž„αžΆαžšαž’αž˜αŸ’αž˜αžαžΆαžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ†αŸ” αžαžΎαž“αŸαŸ‡αž‡αžΆαž αŸ’αž‚αŸαž˜αž’αŸ’αžœαžΈ? αžαŸ’αž‰αž»αŸ†β€‹αž…αž„αŸ‹β€‹αž”αž„αŸ’αž€αžΎαžβ€‹αž’αŸ’αžœαžΈβ€‹αž˜αž½αž™β€‹αžŠαžΌαž…β€‹αž‡αžΆβ€‹αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“β€‹αž€αŸ’αž›αŸ‚αž„β€‹αž’αŸ’αžœαžΎβ€‹αž€αžΈαž‘αžΆβ€‹αžœαžΆαž™β€‹αž€αžΌαž“β€‹αž”αžΆαž›αŸ‹β€‹αžŠαŸ‚αž›β€‹αžšαž½αž˜β€‹αž”αž‰αŸ’αž…αžΌαž›β€‹αž‘αžΆαŸ†αž„ Cities Skylines, Zoo Tycoon, Prison Architect αž“αž·αž„β€‹αž€αžΈαž‘αžΆβ€‹αžœαžΆαž™β€‹αž€αžΌαž“αž”αžΆαž›αŸ‹β€‹αžαŸ’αž›αž½αž“β€‹αž―αž„αŸ” αž‡αžΆαž‘αžΌαž‘αŸ… αžœαžΆβ€‹αž”αžΆαž“β€‹αž€αŸ’αž›αžΆαž™β€‹αž‡αžΆβ€‹αž αŸ’αž‚αŸαž˜β€‹αž’αŸ†αž–αžΈβ€‹αžŸαžΆαž›αžΆβ€‹αžœαžΆαž™β€‹αž€αžΌαž“β€‹αž”αžΆαž›αŸ‹β€‹αžŠαŸ‚αž›β€‹αž˜αžΆαž“β€‹αž˜αž“αž»αžŸαŸ’αžŸβ€‹αž˜αž€β€‹αž›αŸαž„αŸ”

αž€αžΆαžšαž”αžŽαŸ’αžαž»αŸ‡αž”αžŽαŸ’αžαžΆαž›αž”αž…αŸ’αž…αŸαž€αž‘αŸαžŸ

αžαŸ’αž‰αž»αŸ†β€‹αž…αž„αŸ‹β€‹αž”αŸ’αžšαžΎ Rust αž”αŸ‰αž»αž“αŸ’αžαŸ‚β€‹αžαŸ’αž‰αž»αŸ†β€‹αž˜αž·αž“β€‹αžŠαžΉαž„β€‹αž…αŸ’αž”αžΆαžŸαŸ‹β€‹αžαžΆβ€‹αžαžΎβ€‹αžœαžΆβ€‹αžαŸ’αžšαžΌαžœβ€‹αž…αŸ†αžŽαžΆαž™β€‹αž–αŸαž›β€‹αž”αŸ‰αž»αž“αŸ’αž˜αžΆαž“β€‹αžŠαžΎαž˜αŸ’αž”αžΈβ€‹αž…αžΆαž”αŸ‹β€‹αž•αŸ’αžαžΎαž˜αŸ” αžαŸ’αž‰αž»αŸ†αž˜αž·αž“αž…αž„αŸ‹αžŸαžšαžŸαŸαžš pixel shaders αž“αž·αž„αž”αŸ’αžšαžΎ drag-n-drop αž‘αŸ αžŠαžΌαž…αŸ’αž“αŸαŸ‡αžαŸ’αž‰αž»αŸ†αž€αŸ†αž–αž»αž„αžŸαŸ’αžœαŸ‚αž„αžšαž€αžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αžŠαŸ‚αž›αž’αžΆαž…αž”αžαŸ‹αž”αŸ‚αž“αž”αžΆαž“αž”αŸ†αž•αž»αžαŸ”

αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αžšαž€αžƒαžΎαž‰αž’αž“αž’αžΆαž“αž˜αžΆαž“αž”αŸ’αžšαž™αŸ„αž‡αž“αŸ αžŠαŸ‚αž›αžαŸ’αž‰αž»αŸ†αž…αŸ‚αž€αžšαŸ†αž›αŸ‚αž€αž‡αžΆαž˜αž½αž™αž’αŸ’αž“αž€αŸ–

αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αžšαž»αž€αžšαž€αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž αŸ’αž‚αŸαž˜ Rust αž‡αžΆαž…αŸ’αžšαžΎαž“ αž‘αžΈαž”αŸ†αž•αž»αžαž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸ Piston αž“αž·αž„ ggezαŸ” αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž‡αž½αž”αž–αž½αž€αž‚αŸαž–αŸαž›αž€αŸ†αž–αž»αž„αž’αŸ’αžœαžΎαž€αžΆαžšαž›αžΎαž‚αž˜αŸ’αžšαŸ„αž„αž˜αž»αž“αŸ” αž“αŸ…αž‘αžΈαž”αž‰αŸ’αž…αž”αŸ‹ αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸ ggez αž–αŸ’αžšαŸ„αŸ‡αžœαžΆαž αžΆαž€αŸ‹αžŠαžΌαž…αž‡αžΆαžŸαž˜αžšαž˜αŸ’αž™αž‡αžΆαž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž αŸ’αž‚αŸαž˜ 2D αžαžΌαž…αž˜αž½αž™αŸ” αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž˜αŸ‰αžΌαžŒαž»αž›αžšαž”αžŸαŸ‹ Piston αž‚αžΊαžŸαŸ’αž˜αž»αž‚αžŸαŸ’αž˜αžΆαž‰αž–αŸαž€αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαžαŸ’αž˜αžΈαžαŸ’αž˜αŸ„αž„ (αž¬αž’αŸ’αž“αž€αžŠαŸ‚αž›αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™ Rust αž‡αžΆαž›αžΎαž€αžŠαŸ†αž”αžΌαž„) αŸ”

αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž αŸ’αž‚αŸαž˜

αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž…αŸ†αžŽαžΆαž™αž–αŸαž›αžαŸ’αž›αŸ‡αž‚αž·αžαž’αŸ†αž–αžΈαžŸαŸ’αžαžΆαž”αžαŸ’αž™αž€αž˜αŸ’αž˜αž“αŸƒαž‚αž˜αŸ’αžšαŸ„αž„αŸ” αž‡αŸ†αž αžΆαž“αžŠαŸ†αž”αžΌαž„αž‚αžΊαž’αŸ’αžœαžΎαž±αŸ’αž™ "ដី" αž”αŸ’αžšαž‡αžΆαž‡αž“αž“αž·αž„αž‘αžΈαž›αžΆαž“αžœαžΆαž™αž€αžΌαž“αž”αžΆαž›αŸ‹αŸ” αž”αŸ’αžšαž‡αžΆαž‡αž“αžαŸ’αžšαžΌαžœαžšαžΎαž‡αž»αŸ†αžœαž·αž‰αžαž»αž›αžΆαž€αžΆαžš αž αžΎαž™αžšαž„αŸ‹αž…αžΆαŸ†αŸ” αž’αŸ’αž“αž€αž›αŸαž„αžαŸ’αžšαžΌαžœαžαŸ‚αž˜αžΆαž“αž‡αŸ†αž“αžΆαž‰αžŠαŸ‚αž›αž”αŸ’αžšαžŸαžΎαžšαž‘αžΎαž„αžαžΆαž˜αž–αŸαž›αžœαŸαž›αžΆαŸ” αž›αžΎαžŸαž–αžΈαž“αŸαŸ‡ αžœαžΆαž‚αž½αžšαžαŸ‚αž˜αžΆαž“αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž“αž·αž–αž“αŸ’αž’αžŠαŸ‚αž›αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž”αž“αŸ’αžαŸ‚αž˜αž˜αž“αž»αžŸαŸ’αžŸαžαŸ’αž˜αžΈ αž“αž·αž„αžαž»αž›αžΆαž€αžΆαžš αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžœαžΆαž˜αž·αž“αž‚αž·αžαžαŸ’αž›αŸƒαž‘αŸ€αžαž‘αŸαŸ”

αžŠαŸ„αž™αž”αžΆαž“αž‚αž·αžαž‚αŸ’αžšαž”αŸ‹αž™αŸ‰αžΆαž„ αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž‘αŸ…αž’αŸ’αžœαžΎαž€αžΆαžšαŸ”

αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαž αŸ’αž‚αŸαž˜

αž€αžΆαžšαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αŸ– αžšαž„αŸ’αžœαž„αŸ‹ αž“αž·αž„αž’αžšαžΌαž”αžΈ

αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž™αž€αž§αž‘αžΆαž αžšαžŽαŸαž–αžΈ ggez αž αžΎαž™αž‘αž‘αž½αž›αž”αžΆαž“αžšαž„αŸ’αžœαž„αŸ‹αž˜αž½αž™αž“αŸ…αž›αžΎαž’αŸαž€αŸ’αžšαž„αŸ‹αŸ” αž’αžŸαŸ’αž…αžΆαžšαŸ’αž™αž˜αŸ‚αž“! αž₯αž‘αžΌαžœαž“αŸαŸ‡αž’αžšαžΌαž”αžΈαž˜αž½αž™αž…αŸ†αž“αž½αž“αŸ” αžαŸ’αž‰αž»αŸ†β€‹αž‚αž·αžβ€‹αžαžΆβ€‹αžœαžΆβ€‹αž‡αžΆβ€‹αž€αžΆαžšβ€‹αž›αŸ’αž’β€‹αž€αŸ’αž“αž»αž„β€‹αž€αžΆαžšβ€‹αžŠαž€β€‹αžαŸ’αž›αž½αž“β€‹αž…αŸαž‰β€‹αž–αžΈβ€‹αž‚αŸ†αž“αž·αžβ€‹αž“αŸƒβ€‹αžœαžαŸ’αžαž»β€‹αž αŸ’αž‚αŸαž˜αŸ” αžœαžαŸ’αžαž»αž“αžΈαž˜αž½αž™αŸ—αžαŸ’αžšαžΌαžœαžαŸ‚αž”αž„αŸ’αž αžΆαž‰ αž“αž·αž„αž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž–αžŠαžΌαž…αžŠαŸ‚αž›αž”αžΆαž“αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž“αŸ…αž‘αžΈαž“αŸαŸ‡αŸ–

// the game object trait
trait GameObject {
    fn update(&mut self, _ctx: &mut Context) -> GameResult<()>;
    fn draw(&mut self, ctx: &mut Context) -> GameResult<()>;
}
 
// a specific game object - Circle
struct Circle {
    position: Point2,
}
 
 impl Circle {
    fn new(position: Point2) -> Circle {
        Circle { position }
    }
}
impl GameObject for Circle {
    fn update(&mut self, _ctx: &mut Context) -> GameResult<()> {
        Ok(())
    }
    fn draw(&mut self, ctx: &mut Context) -> GameResult<()> {
        let circle =
            graphics::Mesh::new_circle(ctx, graphics::DrawMode::Fill, self.position, 100.0, 2.0)?;
 
         graphics::draw(ctx, &circle, na::Point2::new(0.0, 0.0), 0.0)?;
        Ok(())
    }
}

αž”αŸ†αžŽαŸ‚αž€αž“αŸƒαž€αžΌαžŠαž“αŸαŸ‡αž”αžΆαž“αž•αŸ’αžαž›αŸ‹αž±αŸ’αž™αžαŸ’αž‰αž»αŸ†αž“αžΌαžœαž”αž‰αŸ’αž‡αžΈαžœαžαŸ’αžαž»αžŠαŸαžŸαŸ’αžšαžŸαŸ‹αžŸαŸ’αž’αžΆαžαžŠαŸ‚αž›αžαŸ’αž‰αž»αŸ†αž’αžΆαž…αž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž– αž“αž·αž„αž”αž„αŸ’αž αžΆαž‰αž“αŸ…αž€αŸ’αž“αž»αž„αžšαž„αŸ’αžœαž·αž›αž‡αž»αŸ†αžŠαŸαžŸαŸ’αžšαžŸαŸ‹αžŸαŸ’αž’αžΆαžαžŠαžΌαž…αž‚αŸ’αž“αžΆαŸ”

mpl event::EventHandler for MainState {
    fn update(&mut self, context: &mut Context) -> GameResult<()> {
        // Update all objects
        for object in self.objects.iter_mut() {
            object.update(context)?;
        }
 
        Ok(())
    }
 
    fn draw(&mut self, context: &mut Context) -> GameResult<()> {
        graphics::clear(context);
 
        // Draw all objects
        for object in self.objects.iter_mut() {
            object.draw(context)?;
        }
 
        graphics::present(context);
 
        Ok(())
    }
}

main.rs αž‚αžΊαž…αžΆαŸ†αž”αžΆαž…αŸ‹αž–αŸ’αžšαŸ„αŸ‡αžœαžΆαž˜αžΆαž“αž‚αŸ’αžšαž”αŸ‹αž”αž“αŸ’αž‘αžΆαžαŸ‹αž“αŸƒαž€αžΌαžŠαŸ” αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž…αŸ†αžŽαžΆαž™αž–αŸαž›αž”αž“αŸ’αžαž·αž…αžŠαžΎαž˜αŸ’αž”αžΈαž”αŸ†αž”αŸ‚αž€αž―αž€αžŸαžΆαžš αž“αž·αž„αž”αž„αŸ’αž€αžΎαž“αž”αŸ’αžšαžŸαž·αž‘αŸ’αž’αž—αžΆαž–αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžαžαŸ” αž“αŸαŸ‡αž‡αžΆαž’αŸ’αžœαžΈαžŠαŸ‚αž›αž˜αžΎαž›αž‘αŸ…αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž“αŸ„αŸ‡αŸ–
αž’αž“αž’αžΆαž“ -> αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž€αž“αŸ’αž›αŸ‚αž„αžŠαŸ‚αž›αž‘αŸ’αžšαž–αŸ’αž™αžŸαž˜αŸ’αž”αžαŸ’αžαž·αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžŸαŸ’αžαž·αžαž“αŸ… (αžšαžΌαž”αž—αžΆαž–)
src
- αž’αž„αŸ’αž‚αž—αžΆαž–
- game_object.rs
β€” αžšαž„αŸ’αžœαž„αŸ‹.rs
- main.rs -> αžšαž„αŸ’αžœαž·αž›αž‡αž»αŸ†αž˜αŸ

αž˜αž“αž»αžŸαŸ’αžŸ αž‡αžΆαž“αŸ‹ αž“αž·αž„αžšαžΌαž”αž—αžΆαž–

αž‡αŸ†αž αžΆαž“αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž‚αžΊαž”αž„αŸ’αž€αžΎαžαžœαžαŸ’αžαž»αž αŸ’αž‚αŸαž˜αž”αž»αž‚αŸ’αž‚αž› αž αžΎαž™αž•αŸ’αž‘αž»αž€αžšαžΌαž”αž—αžΆαž–αŸ” αž’αŸ’αžœαžΈαž‚αŸ’αžšαž”αŸ‹αž™αŸ‰αžΆαž„αž‚αž½αžšαžαŸ‚αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαžΆαž„αžŸαž„αŸ‹αž“αŸ…αž›αžΎαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž“αŸƒ 32 * 32 αž€αŸ’αž”αžΏαž„αŸ”

αž›αŸαž„ Rust αž€αŸ’αž“αž»αž„αžšαž™αŸˆαž–αŸαž› 24 αž˜αŸ‰αŸ„αž„αŸ– αž”αž‘αž–αž·αžŸαŸ„αž’αž“αŸαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“

αžαž»αž›αžΆαž€αžΆαžšαž€αžΈαž‘αžΆαžœαžΆαž™αž€αžΌαž“αž”αžΆαž›αŸ‹

αž”αž“αŸ’αž‘αžΆαž”αŸ‹β€‹αž–αžΈβ€‹αž”αžΆαž“β€‹αžŸαž·αž€αŸ’αžŸαžΆβ€‹αž–αžΈβ€‹αž’αŸ’αžœαžΈβ€‹αžŠαŸ‚αž›β€‹αž‘αžΈαž›αžΆαž“β€‹αžœαžΆαž™β€‹αž€αžΌαž“β€‹αž”αžΆαž›αŸ‹β€‹αž˜αžΎαž›β€‹αž‘αŸ…β€‹αžŠαžΌαž…β€‹αž‡αžΆ αžαŸ’αž‰αž»αŸ†β€‹αž”αžΆαž“β€‹αžŸαž˜αŸ’αžšαŸαž…β€‹αž…αž·αžαŸ’αžβ€‹αž’αŸ’αžœαžΎβ€‹αžœαžΆβ€‹αž–αžΈβ€‹αž€αŸ’αž”αžΏαž„ 4*2αŸ” αžŠαŸ†αž”αžΌαž„β€‹αž‚αŸβ€‹αž’αžΆαž…β€‹αž’αŸ’αžœαžΎβ€‹αž‡αžΆβ€‹αžšαžΌαž”β€‹αž‘αŸ†αž αŸ†β€‹αž“αŸαŸ‡β€‹αž”αžΆαž“ αž¬β€‹αž’αžΆαž…β€‹αžŠαžΆαž€αŸ‹β€‹αž€αŸ’αžšαž‘αžΆβ€‹αž…αŸ†αž“αž½αž“ 8 αžŠαžΆαž…αŸ‹β€‹αž–αžΈβ€‹αž‚αŸ’αž“αžΆαŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αžŠαžΉαž„αžαžΆαž˜αžΆαž“αžαŸ‚αž€αŸ’αž”αžΏαž„αž–αžΈαžšαž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž€αžΆαžš αž αžΎαž™αž“αŸαŸ‡αž‡αžΆαž˜αžΌαž›αž αŸαžαž»αŸ”

αžŸαžšαž»αž”αž˜αž€αž™αžΎαž„αž˜αžΆαž“αž€αŸ’αžšαž‘αžΆαž–αžΈαžšαž”αŸ‚αž”αž“αŸαŸ‡αŸ– ៑ αž“αž·αž„ αŸ’αŸ”

αž•αŸ’αž“αŸ‚αž€αž“αžΈαž˜αž½αž™αŸ—αž“αŸƒαžαž»αž›αžΆαž€αžΆαžšαž˜αžΆαž“αž€αŸ’αžšαž‘αžΆαž€αŸ’αž”αžΏαž„ 1 ឬ αž€αŸ’αž”αžΏαž„ 2 αŸ” αž–αž½αž€αžœαžΆαž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαžΆαž€αŸ‹αž…αŸαž‰αž‡αžΆαž’αž˜αŸ’αž˜αžαžΆ αž¬αžαŸ’αžšαž‘αž”αŸ‹ 180 αžŠαžΊαž€αŸ’αžšαŸαŸ”

αž›αŸαž„ Rust αž€αŸ’αž“αž»αž„αžšαž™αŸˆαž–αŸαž› 24 αž˜αŸ‰αŸ„αž„αŸ– αž”αž‘αž–αž·αžŸαŸ„αž’αž“αŸαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“

αžšαž”αŸ€αž”αžŸαžΆαž„αžŸαž„αŸ‹αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“ (αž€αžΆαžšαž‡αž½αž”αž”αŸ’αžšαž‡αž»αŸ†αž‚αŸ’αž“αžΆ)

αž”αž“αŸ’αž‘αžΆαž”αŸ‹β€‹αž–αžΈβ€‹αžαŸ’αž‰αž»αŸ†β€‹αž’αžΆαž…β€‹αžŸαž˜αŸ’αžšαŸαž…β€‹αž”αžΆαž“β€‹αž€αžΆαžšβ€‹αž”αž„αŸ’αž αžΆαž‰β€‹αž‚αŸαž αž‘αŸ†αž–αŸαžš αž˜αž“αž»αžŸαŸ’αžŸ αž“αž·αž„β€‹αž•αŸ‚αž“αž‘αžΈ αžαŸ’αž‰αž»αŸ†β€‹αž”αžΆαž“β€‹αžŠαžΉαž„β€‹αžαžΆβ€‹αžšαž”αŸ€αž”β€‹αžŠαŸ†αž‘αžΎαž„β€‹αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“β€‹αž€αŸβ€‹αžαŸ’αžšαžΌαžœβ€‹αž€αžΆαžšβ€‹αžŠαŸ‚αžšαŸ” αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž’αž“αž»αžœαžαŸ’αžαžœαžΆαžŠαžΌαž…αž“αŸαŸ‡αŸ– αž“αŸ…αž–αŸαž›αž…αž»αž…αž”αŸŠαžΌαžαž»αž„ αžœαžαŸ’αžαž»αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸ αž αžΎαž™αž€αžΆαžšαž…αž»αž…αžŠαžΆαž€αŸ‹αžœαžΆαž“αŸ…αž€αž“αŸ’αž›αŸ‚αž„αžŠαŸ‚αž›αž…αž„αŸ‹αž”αžΆαž“αŸ” αžŠαžΌαž…αŸ’αž“αŸαŸ‡ αž”αŸŠαžΌαžαž»αž„ 1 αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαžαž»αž›αžΆαž€αžΆαžš αž αžΎαž™αž”αŸŠαžΌαžαž»αž„ 2 αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž’αŸ’αž“αž€αž›αŸαž„αŸ”

αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž™αžΎαž„αž“αŸ…αžαŸ‚αžαŸ’αžšαžΌαžœαž…αžΆαŸ†αžαžΆ 1 αž“αž·αž„ 2 αž˜αžΆαž“αž“αŸαž™αž™αŸ‰αžΆαž„αžŽαžΆ αžŠαžΌαž…αŸ’αž“αŸαŸ‡αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜ wireframe αžŠαžΎαž˜αŸ’αž”αžΈαž±αŸ’αž™αžœαžΆαž…αŸ’αž”αžΆαžŸαŸ‹αžαžΆαžαžΎαžœαžαŸ’αžαž»αž˜αž½αž™αžŽαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαŸ” αž“αŸαŸ‡αž‡αžΆαž’αŸ’αžœαžΈαžŠαŸ‚αž›αžœαžΆαž˜αžΎαž›αž‘αŸ…αŸ”

αž›αŸαž„ Rust αž€αŸ’αž“αž»αž„αžšαž™αŸˆαž–αŸαž› 24 αž˜αŸ‰αŸ„αž„αŸ– αž”αž‘αž–αž·αžŸαŸ„αž’αž“αŸαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“

αžŸαŸ†αžŽαž½αžšαžŸαŸ’αžαžΆαž”αžαŸ’αž™αž€αž˜αŸ’αž˜ αž“αž·αž„αž€αžΆαžšαž€αŸ‚αž›αž˜αŸ’αž’

αž₯αž‘αžΌαžœαž“αŸαŸ‡αžαŸ’αž‰αž»αŸ†αž˜αžΆαž“αžœαžαŸ’αžαž»αž αŸ’αž‚αŸαž˜αž‡αžΆαž…αŸ’αžšαžΎαž“αŸ– αž˜αž“αž»αžŸαŸ’αžŸ αžαž»αž›αžΆαž€αžΆαžš αž“αž·αž„αž‡αžΆαž“αŸ‹αŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžŠαžΎαž˜αŸ’αž”αžΈαž±αŸ’αž™ wireframes αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš αž’αž„αŸ’αž‚αž—αžΆαž–αžœαžαŸ’αžαž»αž“αžΈαž˜αž½αž™αŸ—αž…αžΆαŸ†αž”αžΆαž…αŸ‹αžαŸ’αžšαžΌαžœαž”αŸ’αžšαžΆαž”αŸ‹αžαžΆαžαžΎαžœαžαŸ’αžαž»αžαŸ’αž›αž½αž“αž―αž„αžŸαŸ’αžαž·αžαž“αŸ…αž€αŸ’αž“αž»αž„αžšαž”αŸ€αž”αž”αž„αŸ’αž αžΆαž‰ αž¬αžαžΆαžαžΎαžŸαŸŠαž»αž˜αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αžΌαžšαž™αŸ‰αžΆαž„αžŸαžΆαž˜αž‰αŸ’αž‰αŸ” αž“αŸαŸ‡αž˜αž·αž“αž„αžΆαž™αžŸαŸ’αžšαž½αž›αž‘αŸαŸ”

αžœαžΆαž αžΆαž€αŸ‹αžŠαžΌαž…αž‡αžΆαžαŸ’αž‰αž»αŸ†αžαžΆ αžŸαŸ’αžαžΆαž”αžαŸ’αž™αž€αž˜αŸ’αž˜αž…αžΆαŸ†αž”αžΆαž…αŸ‹αžαŸ’αžšαžΌαžœαž‚αž·αžαž‘αžΎαž„αžœαž·αž‰αžαžΆαž˜αžšαž”αŸ€αž”αžŠαŸ‚αž›αž”αž„αŸ’αž αžΆαž‰αž–αžΈαžŠαŸ‚αž“αž€αŸ†αžŽαžαŸ‹αž˜αž½αž™αž…αŸ†αž“αž½αž“αŸ–

  • αž€αžΆαžšαž˜αžΆαž“αž’αž„αŸ’αž‚αž—αžΆαž–αžŠαŸ‚αž›αž”αž„αŸ’αž αžΆαž‰ αž“αž·αž„αž’αžΆαž”αŸ‹αžŠαŸαžαžαŸ’αž›αž½αž“αž―αž„αž‚αžΊαž‡αžΆαž”αž‰αŸ’αž αžΆαž˜αž½αž™ αž–αžΈαž–αŸ’αžšαŸ„αŸ‡αž’αž„αŸ’αž‚αž—αžΆαž–αž“αŸ„αŸ‡αž“αžΉαž„αž˜αž·αž“αž’αžΆαž… "αžŠαžΉαž„" αž“αžΌαžœαž’αŸ’αžœαžΈαžŠαŸ‚αž›αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαž“αŸ’αž˜αžαŸ‹αžαžΆαžαŸ’αžšαžΌαžœαž”αž„αŸ’αž αžΆαž‰ - αžšαžΌαž”αž—αžΆαž– αž“αž·αž„αžŸαŸŠαž»αž˜αžαŸ’αžŸαŸ‚αŸ”
  • αž€αž„αŸ’αžœαŸ‡αž§αž”αž€αžšαžŽαŸαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž›αž€αŸ’αžαžŽαŸˆαžŸαž˜αŸ’αž”αžαŸ’αžαž· αž“αž·αž„αž’αžΆαž€αž”αŸ’αž”αž€αž·αžšαž·αž™αžΆαžšαžœαžΆαž„αž’αž„αŸ’αž‚αž—αžΆαž–αž“αžΈαž˜αž½αž™αŸ— (αž§αž‘αžΆαž αžšαžŽαŸ αž›αž€αŸ’αžαžŽαŸˆαžŸαž˜αŸ’αž”αžαŸ’αžαž· is_build_mode αž¬αž€αžΆαžšαž”αž„αŸ’αž αžΆαž‰αž’αžΆαž€αž”αŸ’αž”αž€αž·αžšαž·αž™αžΆ)αŸ” αžœαžΆαž“αžΉαž„αž’αžΆαž…αž”αŸ’αžšαžΎαž˜αžšαžαž€αž”αžΆαž“ αž‘αŸ„αŸ‡αž”αžΈαž‡αžΆαž˜αž·αž“αž˜αžΆαž“αžœαž·αž’αžΈαžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαžŠαžΎαž˜αŸ’αž”αžΈαž’αž“αž»αžœαžαŸ’αžαžœαžΆαž“αŸ…αž€αŸ’αž“αž»αž„ Rust αž€αŸαžŠαŸ„αž™αŸ” αž’αŸ’αžœαžΈαžŠαŸ‚αž›αžαŸ’αž‰αž»αŸ†αžαŸ’αžšαžΌαžœαž€αžΆαžšαž‚αžΊαž”αŸ’αž›αž„αŸ‹αŸ”
  • αž§αž”αž€αžšαžŽαŸαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αž“αŸ’αžαžšαž€αž˜αŸ’αž˜αžšαžœαžΆαž„αž’αž„αŸ’αž‚αž—αžΆαž–αž‚αžΊαž…αžΆαŸ†αž”αžΆαž…αŸ‹αžŠαžΎαž˜αŸ’αž”αžΈαž…αžΆαžαŸ‹αžαžΆαŸ†αž„αž˜αž“αž»αžŸαŸ’αžŸαž‘αŸ…αžαž»αž›αžΆαž€αžΆαžšαŸ”
  • αž’αž„αŸ’αž‚αž—αžΆαž–αžαŸ’αž›αž½αž“αž‚αŸαž‚αžΊαž‡αžΆαž›αŸ’αž”αžΆαž™αž“αŸƒαž‘αž·αž“αŸ’αž“αž“αŸαž™ αž“αž·αž„αžαž€αŸ’αž€αžœαž·αž‡αŸ’αž‡αžΆαžŠαŸ‚αž›αž…αŸαž‰αž–αžΈαž€αžΆαžšαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž™αŸ‰αžΆαž„αž†αžΆαž”αŸ‹αžšαž αŸαžŸαŸ”

αžαŸ’αž‰αž»αŸ†β€‹αž”αžΆαž“β€‹αž’αŸ’αžœαžΎβ€‹αž€αžΆαžšβ€‹αžŸαŸ’αžšαžΆαžœβ€‹αž‡αŸ’αžšαžΆαžœβ€‹αž˜αž½αž™β€‹αž…αŸ†αž“αž½αž“β€‹αž”αž“αŸ’αžαŸ‚αž˜β€‹αž‘αŸ€αž αž αžΎαž™β€‹αž”αžΆαž“β€‹αžšαž€β€‹αžƒαžΎαž‰β€‹αžŸαŸ’αžαžΆαž”αžαŸ’αž™αž€αž˜αŸ’αž˜ ECS - αž”αŸ’αžšαž–αŸαž“αŸ’αž’αžŸαž˜αžΆαžŸαž—αžΆαž‚αž’αž„αŸ’αž‚αž—αžΆαž–αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž‡αžΆαž‘αžΌαž‘αŸ…αž“αŸ…αž€αŸ’αž“αž»αž„αž αŸ’αž‚αŸαž˜αŸ” αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž’αžαŸ’αžαž”αŸ’αžšαž™αŸ„αž‡αž“αŸαžšαž”αžŸαŸ‹ ECSαŸ–

  • αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ†αž”αŸ‚αž€αž…αŸαž‰αž–αžΈαžαž€αŸ’αž€αžœαž·αž‡αŸ’αž‡αžΆ;
  • αžŸαž˜αžΆαžŸαž—αžΆαž–αž‡αŸ†αž“αž½αžŸαž±αŸ’αž™αž˜αžšαžαž€;
  • αžŸαŸ’αžαžΆαž”αžαŸ’αž™αž€αž˜αŸ’αž˜αžŠαŸ‚αž›αž•αŸ’αžαŸ„αžαž›αžΎαž‘αž·αž“αŸ’αž“αž“αŸαž™αŸ”

ECS αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αž›αž€αŸ’αžαžŽαŸˆαžŠαŸ„αž™αž‚αŸ„αž›αž‚αŸ†αž“αž·αžαž‡αžΆαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž…αŸ†αž“αž½αž“αž”αžΈαŸ–

  • αž’αž„αŸ’αž‚αž—αžΆαž– - αž”αŸ’αžšαž—αŸαž‘αž“αŸƒαžœαžαŸ’αžαž»αžŠαŸ‚αž›αž’αŸ’αž“αž€αž€αŸ†αžŽαžαŸ‹αž’αžαŸ’αžαžŸαž‰αŸ’αž‰αžΆαžŽαžŸαŸ†αžŠαŸ…αž‘αŸ…αž›αžΎ (αžœαžΆαž’αžΆαž…αž‡αžΆαž’αŸ’αž“αž€αž›αŸαž„ αž”αžΆαž›αŸ‹ αž¬αž’αŸ’αžœαžΈαž•αŸ’αžŸαŸαž„αž‘αŸ€αž);
  • αžŸαž˜αžΆαžŸαž’αžΆαžαž» - αž’αž„αŸ’αž‚αž—αžΆαž–αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αž–αžΈαž–αž½αž€αž‚αŸαŸ” αž§αž‘αžΆαž αžšαžŽαŸ - αž”αž„αŸ’αž αžΆαž‰αžŸαž˜αžΆαžŸαž—αžΆαž‚ αž‘αžΈαžαžΆαŸ†αž„ αž“αž·αž„αž•αŸ’αžŸαŸαž„αŸ—αž‘αŸ€αžαŸ” αž‘αžΆαŸ†αž„αž“αŸαŸ‡αž‚αžΊαž‡αžΆαžƒαŸ’αž›αžΆαŸ†αž„αž‘αž·αž“αŸ’αž“αž“αŸαž™;
  • αž”αŸ’αžšαž–αŸαž“αŸ’αž’ - αž–αž½αž€αž‚αŸαž”αŸ’αžšαžΎαž‘αžΆαŸ†αž„αžœαžαŸ’αžαž» αž“αž·αž„αžŸαž˜αžΆαžŸαž’αžΆαžαž» αž”αžΌαž€αžšαž½αž˜αž‘αžΆαŸ†αž„αž₯αžšαž·αž™αžΆαž”αž‘ αž“αž·αž„αžαž€αŸ’αž€αžœαž·αž‡αŸ’αž‡αžΆαžŠαŸ‚αž›αž•αŸ’αž’αŸ‚αž€αž›αžΎαž‘αž·αž“αŸ’αž“αž“αŸαž™αž“αŸαŸ‡αŸ” αž§αž‘αžΆαž αžšαžŽαŸβ€‹αž˜αž½αž™β€‹αž‚αžΊβ€‹αž‡αžΆβ€‹αž”αŸ’αžšαž–αŸαž“αŸ’αž’β€‹αž”αž„αŸ’αž αžΆαž‰β€‹αžŠαŸ‚αž›β€‹αž’αŸ’αžœαžΎβ€‹αž‘αžΎαž„β€‹αžœαž·αž‰β€‹αžαžΆαž˜β€‹αž‚αŸ’αžšαž”αŸ‹β€‹αž’αž„αŸ’αž‚αž—αžΆαž–β€‹αž‘αžΆαŸ†αž„αž’αžŸαŸ‹β€‹αžŠαŸ‚αž›β€‹αž˜αžΆαž“β€‹αžŸαž˜αžΆαžŸαž’αžΆαžαž»β€‹αž”αž„αŸ’αž αžΆαž‰β€‹ αž αžΎαž™β€‹αž’αŸ’αžœαžΎβ€‹αž€αžΆαžšβ€‹αž”αž„αŸ’αž αžΆαž‰αŸ”

αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαžŸαž·αž€αŸ’αžŸαžΆαžœαžΆαž…αŸ’αž”αžΆαžŸαŸ‹αžαžΆ ECS αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž”αž‰αŸ’αž αžΆαžŠαžΌαž…αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αŸˆ

  • αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž”αŸ’αž›αž„αŸ‹αž‡αŸ†αž“αž½αžŸαž±αŸ’αž™αž˜αžšαžαž€αžŠαžΎαž˜αŸ’αž”αžΈαžšαŸ€αž”αž…αŸ†αž’αž„αŸ’αž‚αž—αžΆαž–αž‡αžΆαž”αŸ’αžšαž–αŸαž“αŸ’αž’αŸ”
  • αž€αž˜αŸ’αž…αžΆαžαŸ‹αž—αžΆαž–αž…αŸ’αžšαž”αžΌαž€αž…αŸ’αžšαž”αž›αŸ‹αžαžΆαž˜αžšαž™αŸˆαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„;
  • αžŠαŸ„αž™αž”αŸ’αžšαžΎαžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαžŠαžΌαž…αž‡αžΆ is_build_mode αžŠαžΎαž˜αŸ’αž”αžΈαžšαž€αŸ’αžŸαžΆαžαž€αŸ’αž€αžœαž·αž‡αŸ’αž‡αžΆ wireframe αž“αŸ…αž€αž“αŸ’αž›αŸ‚αž„αžŠαžŠαŸ‚αž› - αž“αŸ…αž€αŸ’αž“αž»αž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αž„αŸ’αž αžΆαž‰αŸ”

αž“αŸαŸ‡αž‡αžΆαž’αŸ’αžœαžΈαžŠαŸ‚αž›αž”αžΆαž“αž€αžΎαžαž‘αžΎαž„αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž’αž“αž»αžœαžαŸ’αž ECS αŸ”

αž’αž“αž’αžΆαž“ -> αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž€αž“αŸ’αž›αŸ‚αž„αžŠαŸ‚αž›αž‘αŸ’αžšαž–αŸ’αž™αžŸαž˜αŸ’αž”αžαŸ’αžαž·αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžŸαŸ’αžαž·αžαž“αŸ… (αžšαžΌαž”αž—αžΆαž–)
src
- αžŸαž˜αžΆαžŸαž’αžΆαžαž»
β€” position.rs
β€” person.rs
β€” tennis_court.rs
β€” floor.rs
- wireframe.rs
- mouse_tracked.rs
- αž’αž“αž’αžΆαž“
- mouse.rs
- αž”αŸ’αžšαž–αŸαž“αŸ’αž’
β€” rendering.rs
- constants.rs
β€” utils.rs
β€” world_factory.rs -> αž˜αž»αžαž„αžΆαžšαžšαŸ„αž„αž…αž€αŸ’αžšαž–αž·αž—αž–αž›αŸ„αž€
- main.rs -> αžšαž„αŸ’αžœαž·αž›αž‡αž»αŸ†αž˜αŸ

αž™αžΎαž„β€‹αž…αžΆαžαŸ‹β€‹αž˜αž“αž»αžŸαŸ’αžŸβ€‹αž‘αŸ…β€‹αžαž»αž›αžΆαž€αžΆαžš

ECS αž”αžΆαž“αž’αŸ’αžœαžΎαž±αŸ’αž™αž‡αžΈαžœαž·αžαž€αžΆαž“αŸ‹αžαŸ‚αž„αžΆαž™αžŸαŸ’αžšαž½αž›αŸ” αž₯αž‘αžΌαžœαž“αŸαŸ‡αžαŸ’αž‰αž»αŸ†αž˜αžΆαž“αžœαž·αž’αžΈαž‡αžΆαž”αŸ’αžšαž–αŸαž“αŸ’αž’αžŠαžΎαž˜αŸ’αž”αžΈαž”αž“αŸ’αžαŸ‚αž˜αž‘αž·αž“αŸ’αž“αž“αŸαž™αž‘αŸ…αž’αž„αŸ’αž‚αž—αžΆαž– αž“αž·αž„αž”αž“αŸ’αžαŸ‚αž˜αžαž€αŸ’αž€αžœαž·αž‡αŸ’αž‡αžΆαžŠαŸ„αž™αž•αŸ’αž’αŸ‚αž€αž›αžΎαž‘αž·αž“αŸ’αž“αž“αŸαž™αž“αŸ„αŸ‡αŸ” αž αžΎαž™αž“αŸαŸ‡, αž“αŸ…αž€αŸ’αž“αž»αž„αžœαŸαž“, αž’αŸ’αžœαžΎαž±αŸ’αž™αžœαžΆαž’αžΆαž…αž’αŸ’αžœαžΎαž‘αŸ…αž”αžΆαž“αžŠαžΎαž˜αŸ’αž”αžΈαžšαŸ€αž”αž…αŸ†αž€αžΆαžšαž…αŸ‚αž€αž…αžΆαž™αž”αŸ’αžšαž‡αžΆαž‡αž“αž€αŸ’αž“αž»αž„αž…αŸ†αžŽαŸ„αž˜αžαž»αž›αžΆαž€αžΆαžšαŸ”

αžαžΎαžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž’αŸ’αžœαžΎαž’αŸ’αžœαžΈαžαŸ’αž›αŸ‡αŸ–

  • αž”αž“αŸ’αžαŸ‚αž˜αž‘αž·αž“αŸ’αž“αž“αŸαž™αž’αŸ†αž–αžΈαžαž»αž›αžΆαž€αžΆαžšαžŠαŸ‚αž›αž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αž‘αŸ…αž”αž»αž‚αŸ’αž‚αž›;
  • αž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž‘αž·αž“αŸ’αž“αž“αŸαž™αž’αŸ†αž–αžΈαž˜αž“αž»αžŸαŸ’αžŸαžŠαŸ‚αž›αž”αžΆαž“αž…αŸ‚αž€αž…αžΆαž™αž‘αŸ… TennisCourt;
  • αž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž”αŸ’αžšαž–αŸαž“αŸ’αž’ CourtChoosingSystem αžŠαŸ‚αž›αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αžœαž·αž—αžΆαž‚αž˜αž“αž»αžŸαŸ’αžŸ αž“αž·αž„αžαž»αž›αžΆαž€αžΆαžš αžšαž€αžƒαžΎαž‰αžαž»αž›αžΆαž€αžΆαžšαžŠαŸ‚αž›αž˜αžΆαž“ αž“αž·αž„αž…αŸ‚αž€αž…αžΆαž™αž’αŸ’αž“αž€αž›αŸαž„αž±αŸ’αž™αž–αž½αž€αž‚αŸαŸ”
  • αž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž”αŸ’αžšαž–αŸαž“αŸ’αž’ PersonMovementSystem αžŠαŸ‚αž›αžŸαŸ’αžœαŸ‚αž„αžšαž€αž˜αž“αž»αžŸαŸ’αžŸαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαž‚αž›αŸ‹αž±αŸ’αž™αžαž»αž›αžΆαž€αžΆαžš αž αžΎαž™αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž–αž½αž€αž‚αŸαž˜αž·αž“αž“αŸ…αž‘αžΈαž“αŸ„αŸ‡ αž“αŸ„αŸ‡αž”αž‰αŸ’αž‡αžΌαž“αž˜αž“αž»αžŸαŸ’αžŸαž‘αŸ…αž€αž“αŸ’αž›αŸ‚αž„αžŠαŸ‚αž›αž–αž½αž€αž‚αŸαžαŸ’αžšαžΌαžœαž€αžΆαžšαŸ”

αž›αŸαž„ Rust αž€αŸ’αž“αž»αž„αžšαž™αŸˆαž–αŸαž› 24 αž˜αŸ‰αŸ„αž„αŸ– αž”αž‘αž–αž·αžŸαŸ„αž’αž“αŸαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“

αžŸαž„αŸ’αžαŸαž”

αžαŸ’αž‰αž»αŸ†αž–αž·αžαž‡αžΆαžšαžΈαž€αžšαžΆαž™αž€αŸ’αž“αž»αž„αž€αžΆαžšαž’αŸ’αžœαžΎαž€αžΆαžšαž›αžΎαž αŸ’αž‚αŸαž˜αžŠαŸαžŸαžΆαž˜αž‰αŸ’αž‰αž“αŸαŸ‡αŸ” αž›αžΎαžŸαž–αžΈαž“αŸαŸ‡αž‘αŸ…αž‘αŸ€αž αžαŸ’αž‰αž»αŸ†αžšαžΈαž€αžšαžΆαž™αžŠαŸ‚αž›αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž”αŸ’αžšαžΎ Rust αžŠαžΎαž˜αŸ’αž”αžΈαžŸαžšαžŸαŸαžšαžœαžΆ αž–αžΈαž–αŸ’αžšαŸ„αŸ‡αŸ–

  • αž…αŸ’αžšαŸ‚αŸ‡αž•αŸ’αžαž›αŸ‹αž±αŸ’αž™αž’αŸ’αž“αž€αž“αžΌαžœαž’αŸ’αžœαžΈαžŠαŸ‚αž›αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž€αžΆαžš;
  • αžœαžΆβ€‹αž˜αžΆαž“β€‹αž―αž€αžŸαžΆαžšβ€‹αž›αŸ’αž’β€‹αž₯αžβ€‹αžαŸ’αž…αŸ„αŸ‡, Rust αž‚αžΊβ€‹αž‡αžΆβ€‹αžŸαŸ’αžšαžŸαŸ‹β€‹αžŸαŸ’αž’αžΆαžβ€‹αžŽαžΆαžŸαŸ‹;
  • αž—αžΆαž–αžŸαŸ’αžαž·αžαžŸαŸ’αžαŸαžšαž‚αžΊαžαŸ’αžšαž‡αžΆαž€αŸ‹;
  • αž’αŸ’αž“αž€αž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αž„αžΆαž€αž‘αŸ…αžšαž€αž€αžΆαžšαž€αŸ’αž›αžΌαž“ αž€αžΆαžšαž…αž˜αŸ’αž›αž„ αž¬αžŸαž€αž˜αŸ’αž˜αž—αžΆαž–αžŸαŸ’αžšαžŠαŸ€αž„αž‚αŸ’αž“αžΆαž•αŸ’αžŸαŸαž„αž‘αŸ€αž αžŠαŸ‚αž›αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž’αŸ’αžœαžΎαž‡αžΆαž‰αžΉαž€αž‰αžΆαž”αŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„ C++ αŸ”
  • αž‡αž˜αŸ’αžšαžΎαžŸαž‚αžΊαž„αžΆαž™αžŸαŸ’αžšαž½αž›αž”αŸ’αžšαžΎ αž“αž·αž„αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž€αŸ†αž αž»αžŸαž”αžΆαž“αž™αŸ‰αžΆαž„αž›αŸ’αž’αŸ”
  • αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž‚αž˜αŸ’αžšαŸ„αž„αž’αžΆαž…αž…αž„αž€αŸ’αžšαž„αž”αžΆαž“ αž“αŸ„αŸ‡ 99% αž“αŸƒαž–αŸαž›αžœαŸαž›αžΆαžŠαŸ‚αž›αžœαžΆαžŠαŸ†αžŽαžΎαžšαž€αžΆαžš αž αžΎαž™αž–αž·αžαž‡αžΆαžŠαžΌαž…αžŠαŸ‚αž›αžœαžΆαž‚αž½αžšαžαŸ‚αŸ” αžαŸ’αž‰αž»αŸ†αž‚αž·αžαžαžΆαžŸαžΆαžšαž€αŸ†αž αž»αžŸαž’αŸ’αž“αž€αž…αž„αž€αŸ’αžšαž„αž‚αžΊαž›αŸ’αž’αž”αŸ†αž•αž»αžαžŠαŸ‚αž›αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αžƒαžΎαž‰αŸ”

αž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž αŸ’αž‚αŸαž˜αž“αŸ…αž€αŸ’αž“αž»αž„ Rust αž‘αžΎαž”αžαŸ‚αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚β€‹αž˜αžΆαž“β€‹αžŸαž αž‚αž˜αž“αŸβ€‹αžŠαŸβ€‹αž’αŸ†β€‹αž˜αž½αž™β€‹αžŠαŸ‚αž›β€‹αž˜αžΆαž“β€‹αžŸαŸ’αžαž·αžšαž—αžΆαž– αž“αž·αž„β€‹αž™αž»αžαŸ’αžαž·αž’αž˜αŸŒβ€‹αž€αŸ†αž–αž»αž„β€‹αž’αŸ’αžœαžΎβ€‹αž€αžΆαžšβ€‹αžŠαžΎαž˜αŸ’αž”αžΈβ€‹αž”αžΎαž€ Rust αžŠαž›αŸ‹β€‹αž’αŸ’αž“αž€β€‹αžšαžΆαž›αŸ‹β€‹αž‚αŸ’αž“αžΆαŸ” αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž αžΎαž™ αžαŸ’αž‰αž»αŸ†αž˜αžΎαž›αž‘αŸ…αž’αž“αžΆαž‚αžαž“αŸƒαž—αžΆαžŸαžΆαžŠαŸ„αž™αžŸαž»αž‘αž·αžŠαŸ’αž‹αž·αž“αž·αž™αž˜ αžŠαŸ„αž™αž‘αž“αŸ’αž‘αžΉαž„αžšαž„αŸ‹αž…αžΆαŸ†αž›αž‘αŸ’αž’αž•αž›αž“αŸƒαž€αžΆαžšαž„αžΆαžšαžšαž½αž˜αžšαž”αžŸαŸ‹αž™αžΎαž„αŸ”

Skillbox αžŽαŸ‚αž“αžΆαŸ†αŸ–

αž”αŸ’αžšαž—αž–: www.habr.com

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹