」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > C++:遊戲產業對速度的執著

C++:遊戲產業對速度的執著

發佈於2024-08-01
瀏覽:880

C   : speed obsession in the game industry

我們什麼時候真正需要速度

C 很久以前就成為遊戲和圖形軟體的標準語言。而且,這是有實際原因的——使用即時圖形物理需要高效能。處理幾何圖形、管理緩衝區、矩陣計算 - 所有這些都需要時間。
但是,高級邏輯又如何呢?遊戲機制、使用者介面、儲存管理、網路請求? 穩定性和安全性比速度更需要。

責任分配

我們可以用編譯語言(例如 C )實作對效能要求較高的函數,並從用動態語言(例如 Python)編寫的程式中呼叫它們。
但是,今天我們已經有了記錄良好且易於使用的Python 庫(pygame、pyopengl、pyassimp、pybullet、numpy),這些庫主要在C/C 上實現,並提供用於繁重計算的函數,或特別是物理/圖形。我們可能永遠不需要自己實作這樣的函式庫。

C是唯一的選擇嗎?

人們普遍認為,垃圾收集語言(例如 Java 或 C#)比 C 慢,並且不能真正滿足繁重計算的要求。 這當然不是真的
在某些特殊情況下,C 可能會在效能上超越Java 或C# 20-30%,但是當涉及到運行時抽象,例如動態函數調度、語言互動、非同步任務、文字或抽象集合管理時, Java和C#表現出比C高得多的效率。
此外,我們可以使用 Jython 或 IronPython 在與 Java 或 C# 相同的運行時運行 Python 程式。它帶來了許多好處,例如共享垃圾收集記憶體、類型系統以及開箱即用的輕鬆存取C#或Java庫。在 Java 上實作了諸如 Clojure 和 Groovy 等優秀的動態語言,它們可以完全存取 Java 類別庫並共享前面提到的優點。

真正影響性能的是什麼?

今天的個人電腦比 15-20 年前快得多。但是,大多數桌面程式或遊戲的運行速度不如預期(儘管它們仍然主要在 C/C 上實現)。今天,我們需要好的演算法有效的方法,而不僅僅是語言速度。 Python 上具有 恆定複雜度 的函數比 C 上具有 線性複雜度 的函數更可取。用 15 行 Python 程式碼繪製 100 棵樹比用 300 行繪製 500 棵樹更可取C 程式碼。

關心遊戲,而不是語言

當你沒有製作任何遊戲時,使用什麼語言並不重要,對吧?
與在 Python 或 Ruby 上製作遊戲相比,在 C 上製作遊戲要求更高、更費力。當您使用 C 製作 1 個遊戲時,您將使用 Python 製作 10 個遊戲。當你用Python製作5個遊戲時,用C來製作0個遊戲
讓我們關心遊戲和樂趣,否則還有什麼意義?

版本聲明 本文轉載於:https://dev.to/taqmuraz/speed-obsession-in-the-game-industry-1p4i?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 儘管程式碼有效,為什麼 POST 請求無法擷取 PHP 中的輸入?
    儘管程式碼有效,為什麼 POST 請求無法擷取 PHP 中的輸入?
    解決PHP 中的POST 請求故障在提供的程式碼片段中:action=''而非:action="<?php echo $_SERVER['PHP_SELF'];?>";?>"檢查$_POST陣列:表單提交後使用 var_dump 檢查 $_POST 陣列的內...
    程式設計 發佈於2024-12-22
  • 插入資料時如何修復「常規錯誤:2006 MySQL 伺服器已消失」?
    插入資料時如何修復「常規錯誤:2006 MySQL 伺服器已消失」?
    插入記錄時如何解決「一般錯誤:2006 MySQL 伺服器已消失」介紹:將資料插入MySQL 資料庫有時會導致錯誤「一般錯誤:2006 MySQL 伺服器已消失」。當與伺服器的連線遺失時會出現此錯誤,通常是由於 MySQL 配置中的兩個變數之一所致。 解決方案:解決此錯誤的關鍵是調整wait_tim...
    程式設計 發佈於2024-12-22
  • HTML 格式標籤
    HTML 格式標籤
    HTML 格式化元素 **HTML Formatting is a process of formatting text for better look and feel. HTML provides us ability to format text without us...
    程式設計 發佈於2024-12-22
  • 大批
    大批
    方法是可以在物件上呼叫的 fns 數組是對象,因此它們在 JS 中也有方法。 slice(begin):將陣列的一部分提取到新數組中,而不改變原始數組。 let arr = ['a','b','c','d','e']; // Usecase: Extract till index ...
    程式設計 發佈於2024-12-22
  • 如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    在 PHP 中組合關聯數組在 PHP 中,將兩個關聯數組組合成一個數組是常見任務。考慮以下請求:問題描述:提供的代碼定義了兩個關聯數組,$array1 和 $array2。目標是建立一個新陣列 $array3,它合併兩個陣列中的所有鍵值對。 此外,提供的陣列具有唯一的 ID,而名稱可能重疊。要求是建...
    程式設計 發佈於2024-12-22
  • 為什麼「正在載入類別 com.mysql.jdbc.Driver...」已被棄用,如何修復它?
    為什麼「正在載入類別 com.mysql.jdbc.Driver...」已被棄用,如何修復它?
    了解「Loading Class com.mysql.jdbc.Driver ... Is Deprecated」訊息嘗試連接到MySQL 時使用舊的驅動類別com.mysql.jdbc.Driver的資料庫,你可能會遇到一個諮詢訊息:Loading class com.mysql.jdbc.Dri...
    程式設計 發佈於2024-12-22
  • 如何處理 Java XPath 查詢中的 XML 命名空間?
    如何處理 Java XPath 查詢中的 XML 命名空間?
    Java XPath 查詢中的XML 命名空間處理在Java 中,當使用XPath 查詢XML 時,命名空間可能會帶來挑戰。當 XML 不包含命名空間時,XPath 查詢可以很簡單,但命名空間的存在會帶來複雜性。 情況 1:沒有命名空間的 XML對於沒有命名空間的 XML,XPath查詢使用預設命名...
    程式設計 發佈於2024-12-22
  • Go 1.7 可以在 Windows 上建置 DLL 嗎?
    Go 1.7 可以在 Windows 上建置 DLL 嗎?
    使用Go 1.7 建構dll使用Go 1.7 建構dll在本文中,我們將探討在Windows 下針對Go v1.7 建置dll 的可能性. 問題:有沒有辦法建構一個dll Windows下Go v1.7? 背景:go build -buildmode=shared main.go嘗試使用經典方法建構...
    程式設計 發佈於2024-12-22
  • 如何在 PHP 和 MySQL 中有效處理時區?
    如何在 PHP 和 MySQL 中有效處理時區?
    PHP 和MySQL 中的時區PHP 和MySQL 中的時區將時區系統整合到PHP 應用程式中可能具有挑戰性,但在處理來自不同資料庫的數據時,這一點至關重要時區。這是解決最常見問題並提供實用解決方案的綜合指南。 在MySQL 中儲存日期時間使用DATETIME 或TIMESTAMP: DATETIM...
    程式設計 發佈於2024-12-22
  • Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta:列偏移的刪除和恢復Bootstrap 4 在其Beta 1 版本中引入了重大更改柱子偏移了。然而,隨著 Beta 2 的後續發布,這些變化已經逆轉。 從 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    程式設計 發佈於2024-12-22
  • 如何有效率地檢索MySQL資料庫中的所有列名?
    如何有效率地檢索MySQL資料庫中的所有列名?
    有效獲取MySQL中所有表的所有列名無需手動即可高效檢索MySQL資料庫中所有表的所有列名select column_name from information_schema.columns where table_schema = 'your_db' order by table_name,ord...
    程式設計 發佈於2024-12-22
  • 如何用Java將URL內容讀入字串?
    如何用Java將URL內容讀入字串?
    使用Java 將URL 內容讀入字串程式設計中的一個常見需求是檢索URL 的內容並將它們儲存為細繩。在Groovy 中,此任務透過簡潔的語法得到簡化:String content = "http://www.google.com".toURL().getText();但是,尋找J...
    程式設計 發佈於2024-12-22
  • 如何在 C++ 中高效複製向量而不使用循環?
    如何在 C++ 中高效複製向量而不使用循環?
    創建向量副本將向量附加到自身時,出於性能原因,最好避免使用循環。 std::vector::insert 函數雖然是一個選項,但不允許使用迭代器*this.用std::copy使用std: :copy 來解決這個問題似乎是一個解決方案,但這種方法可能會導致分段錯誤。 最優解決方案最佳解決方案是同時使...
    程式設計 發佈於2024-12-22
  • 使用 Go 標準庫建立健全的 API:綜合指南
    使用 Go 標準庫建立健全的 API:綜合指南
    作为一名 Go 开发人员,我发现标准库提供了一系列令人印象深刻的工具来构建强大的 API。让我们探索如何利用这些内置包来创建高效且可扩展的 Web 服务。 net/http 包构成了我们 API 开发的基础。它提供了一个简单但功能强大的接口来处理 HTTP 请求和响应。以下是我们如何设置基本服务器:...
    程式設計 發佈於2024-12-22
  • 如何在 CSS 中建立反向邊框半徑效果?
    如何在 CSS 中建立反向邊框半徑效果?
    創建倒置邊框半徑效果創建倒置邊框半徑效果問題:可以倒置邊框半徑嗎達到拐角處出現彎曲的效果向內? 答案:原生 CSS 的 border-radius 屬性不允許使用負值,否則會導致反向效果。不過,這裡有一種使用 CSS 的替代方法:在容器內添加四個附加元素,確保它們稍微超出其邊界。這些元素應該與頁面的...
    程式設計 發佈於2024-12-22

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3