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

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

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

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]刪除
最新教學 更多>
  • Python讀取CSV文件UnicodeDecodeError終極解決方法
    Python讀取CSV文件UnicodeDecodeError終極解決方法
    在試圖使用已內置的CSV模塊讀取Python中時,CSV文件中的Unicode Decode Decode Decode Decode decode Error讀取,您可能會遇到錯誤的錯誤:無法解碼字節 在位置2-3中:截斷\ uxxxxxxxx逃脫當CSV文件包含特殊字符或Unicode的路徑逃...
    程式設計 發佈於2025-07-22
  • 表單刷新後如何防止重複提交?
    表單刷新後如何防止重複提交?
    在Web開發中預防重複提交 在表格提交後刷新頁面時,遇到重複提交的問題是常見的。要解決這個問題,請考慮以下方法: 想像一下具有這樣的代碼段,看起來像這樣的代碼段:)){ //數據庫操作... 迴聲“操作完成”; 死(); } ? > ...
    程式設計 發佈於2025-07-22
  • 查找當前執行JavaScript的腳本元素方法
    查找當前執行JavaScript的腳本元素方法
    如何引用當前執行腳本的腳本元素在某些方案中理解問題在某些方案中,開發人員可能需要將其他腳本動態加載其他腳本。但是,如果Head Element尚未完全渲染,則使用document.getElementsbytagname('head')[0] .appendChild(v)的常規方...
    程式設計 發佈於2025-07-22
  • Java數組中元素位置查找技巧
    Java數組中元素位置查找技巧
    在Java數組中檢索元素的位置 利用Java的反射API將數組轉換為列表中,允許您使用indexof方法。 (primitives)(鏈接到Mishax的解決方案) 用於排序陣列的數組此方法此方法返回元素的索引,如果發現了元素的索引,或一個負值,指示應放置元素的插入點。
    程式設計 發佈於2025-07-22
  • 解決MySQL插入Emoji時出現的\\"字符串值錯誤\\"異常
    解決MySQL插入Emoji時出現的\\"字符串值錯誤\\"異常
    Resolving Incorrect String Value Exception When Inserting EmojiWhen attempting to insert a string containing emoji characters into a MySQL database us...
    程式設計 發佈於2025-07-22
  • 如何使用PHP從XML文件中有效地檢索屬性值?
    如何使用PHP從XML文件中有效地檢索屬性值?
    從php $xml = simplexml_load_file($file); foreach ($xml->Var[0]->attributes() as $attributeName => $attributeValue) { echo $attributeName,...
    程式設計 發佈於2025-07-22
  • 如何實時捕獲和流媒體以進行聊天機器人命令執行?
    如何實時捕獲和流媒體以進行聊天機器人命令執行?
    在開發能夠執行命令的chatbots的領域中,實時從命令執行實時捕獲Stdout,一個常見的需求是能夠檢索和顯示標準輸出(stdout)在cath cath cant cant cant cant cant cant cant cant interfaces in Chate cant inter...
    程式設計 發佈於2025-07-22
  • Java中如何使用觀察者模式實現自定義事件?
    Java中如何使用觀察者模式實現自定義事件?
    在Java 中創建自定義事件的自定義事件在許多編程場景中都是無關緊要的,使組件能夠基於特定的觸發器相互通信。本文旨在解決以下內容:問題語句我們如何在Java中實現自定義事件以促進基於特定事件的對象之間的交互,定義了管理訂閱者的類界面。 以下代碼片段演示瞭如何使用觀察者模式創建自定義事件: args...
    程式設計 發佈於2025-07-22
  • `console.log`顯示修改後對象值異常的原因
    `console.log`顯示修改後對象值異常的原因
    foo = [{id:1},{id:2},{id:3},{id:4},{id:id:5},],]; console.log('foo1',foo,foo.length); foo.splice(2,1); console.log('foo2', foo, foo....
    程式設計 發佈於2025-07-22
  • 可以在純CS中將多個粘性元素彼此堆疊在一起嗎?
    可以在純CS中將多個粘性元素彼此堆疊在一起嗎?
    [2这里: https://webthemez.com/demo/sticky-multi-header-scroll/index.html </main> <section> { display:grid; grid-template-...
    程式設計 發佈於2025-07-22
  • Java的Map.Entry和SimpleEntry如何簡化鍵值對管理?
    Java的Map.Entry和SimpleEntry如何簡化鍵值對管理?
    A Comprehensive Collection for Value Pairs: Introducing Java's Map.Entry and SimpleEntryIn Java, when defining a collection where each element com...
    程式設計 發佈於2025-07-22
  • 同實例無需轉儲複製MySQL數據庫方法
    同實例無需轉儲複製MySQL數據庫方法
    在同一實例上複製一個MySQL數據庫而無需轉儲在同一mySQL實例上複製數據庫,而無需創建InterMediate sqql script。以下方法為傳統的轉儲和IMPORT過程提供了更簡單的替代方法。 直接管道數據 MySQL手動概述了一種允許將mysqldump直接輸出到MySQL cli...
    程式設計 發佈於2025-07-22
  • 在JavaScript中如何並發運行異步操作並正確處理錯誤?
    在JavaScript中如何並發運行異步操作並正確處理錯誤?
    同意操作execution 在執行asynchronous操作時,相關的代碼段落會遇到一個問題,當執行asynchronous操作:此實現在啟動下一個操作之前依次等待每個操作的完成。要啟用並發執行,需要進行修改的方法。 第一個解決方案試圖通過獲得每個操作的承諾來解決此問題,然後單獨等待它們: c...
    程式設計 發佈於2025-07-22
  • Java中假喚醒真的會發生嗎?
    Java中假喚醒真的會發生嗎?
    在Java中的浪費喚醒:真實性或神話? 在Java同步中偽裝喚醒的概念已經是討論的主題。儘管存在這種行為的潛力,但問題仍然存在:它們實際上是在實踐中發生的嗎? Linux的喚醒機制根據Wikipedia關於偽造喚醒的文章,linux實現了pthread_cond_wait()功能的Linux實現,...
    程式設計 發佈於2025-07-22
  • Python高效去除文本中HTML標籤方法
    Python高效去除文本中HTML標籤方法
    在Python中剝離HTML標籤,以獲取原始的文本表示Achieving Text-Only Extraction with Python's MLStripperTo streamline the stripping process, the Python standard librar...
    程式設計 發佈於2025-07-22

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

Copyright© 2022 湘ICP备2022001581号-3