Hazel游戏引擎(004)项目设置

这篇具有很好参考价值的文章主要介绍了Hazel游戏引擎(004)项目设置。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本人菜鸟,文中若有代码、术语等错误,欢迎指正

我写的项目地址:https://github.com/liujianjie/GameEngineLightWeight(中文的注释适合中国人的你)

前言

  • 此节目的

    新建好Hazel和Sandbox项目,Hazel项目生成为dll,Sandbox项目生成为exe,运行此exe通过动态链接Hazel的dll,可以调用dll定义的函数并输出信息。

  • Cherno的Hazel项目地址

    https://github.com/TheCherno/Hazel

操作步骤+讲解

GitHub

  • 新建空仓库

    hazel 项目 怎么使用,Hazel游戏引擎,游戏引擎,windows,microsoft,Hazel

  • 本地创建Hazel项目

    注意将解决方案和项目不放在同一目录

    hazel 项目 怎么使用,Hazel游戏引擎,游戏引擎,windows,microsoft,Hazel

  • Github仓库与本地项目关联

    • cmd输入命令克隆项目

      git clone https://github.com/username/Hazel2
      

      hazel 项目 怎么使用,Hazel游戏引擎,游戏引擎,windows,microsoft,Hazel

    • 将Hazel2文件夹里的文件都剪切到sln文件下的目录,然后删除Hazel2文件夹

      hazel 项目 怎么使用,Hazel游戏引擎,游戏引擎,windows,microsoft,Hazel

Hazel项目

此项目定位

Hazel是我们的引擎核心库,需生成为dll文件

然后创建外部应用程序项目生成为exe文件,将Hazel导出的dll链接到exe文件中。

项目属性修改

  • 删除32位的发布平台

  • 设置项目配置类型为dll

  • 调整输出目录和中间目录

    $(SolutionDir)\bin\$(Configuration)-$(Platform)\$(ProjectName)\
    $(SolutionDir)\bin-int\$(Configuration)-$(Platform)\$(ProjectName)\
    

hazel 项目 怎么使用,Hazel游戏引擎,游戏引擎,windows,microsoft,Hazel

中间目录:存储一些obj、二进制文件,生成好dll、exe后可以删除此文件夹

Sandbox项目

此项目定位

是exe应用程序

项目属性修改

  • 删除32位发布平台
  • 调整输出目录和中间目录
  • 设置项目配置类型为exe应用程序
  • 设置为启动目录

hazel 项目 怎么使用,Hazel游戏引擎,游戏引擎,windows,microsoft,Hazel

  • Sandbox项目引用Hazel项目

    hazel 项目 怎么使用,Hazel游戏引擎,游戏引擎,windows,microsoft,Hazel

    • 说明

      此引用将会链接Hazel.lib文件。

      • 问题
        可Hazel明明设置为dll为什么还是能生成lib文件。
      • 网上解释
        在动态库情况有,有lib和dll两个文件,lib是包含被DLL导出的函数的名称和位置,DLL包含实际的函数和数据。
        exe程序通过编译期间链接lib文件,存放了DLL中所要调用的函数的内存地址
    • 打开项目属性-链接器可以看到链接命令

      hazel 项目 怎么使用,Hazel游戏引擎,游戏引擎,windows,microsoft,Hazel

      这是视频里的,我本地却没有这行命令。。。

写代码

Hazel项目

  • 代码

    Test.h

    #pragma once
    namespace Hazel {
    	_declspec(dllexport) void Print();
    }
    

    Test.cpp

    #include "Test.h"
    #include <stdio.h>
    
    namespace Hazel {
    	void Print() {
    		printf("Welcome to Hazel Game Engine!\n");
    	}
    }
    
  • 项目生成

    hazel 项目 怎么使用,Hazel游戏引擎,游戏引擎,windows,microsoft,Hazel

Sandbox项目

  • 代码

    application.cpp

    namespace Hazel {
    	_declspec(dllimport) void Print();
    }
    void main() {
    	Hazel::Print();
    }
    
  • 项目生成

    hazel 项目 怎么使用,Hazel游戏引擎,游戏引擎,windows,microsoft,Hazel

  • 运行报错

    hazel 项目 怎么使用,Hazel游戏引擎,游戏引擎,windows,microsoft,Hazel

  • 解决bug

    由于Sandbox项目引用了Hazel项目,而Hazel又是dll文件,所以会报找不到Hazel.dll

    需要将Hazel.dll文件放到Sandbox.exe文件同目录下才行

    hazel 项目 怎么使用,Hazel游戏引擎,游戏引擎,windows,microsoft,Hazel

  • 正确运行结果

    hazel 项目 怎么使用,Hazel游戏引擎,游戏引擎,windows,microsoft,Hazel

C++:静态链接与动态链接

阅读的CSDN博客:https://blog.csdn.net/kang___xi/article/details/80210717

  • 静态链接

    • 说明

      使用静态库方式链接,编译后链接时会将使用的库函数对应所包含库函数定义的.o目标文件都包含在exe文件中。

    • 优点

      执行速度快:因为可执行文件程序内部包含了所有需要执行的东西

    • 缺点

      浪费空间:因为多个可执行程序对同所需要的目标文件都有一份副本

      更新慢:如果有一个.o目标文件发生改变,那么对应的使用这个.o目标文件的多个可执行程序需要重新来一遍链接过程,即链接多个.o目标文件来实现生成可执行文件。

  • 动态链接

    • 说明

      使用动态库方式链接,编译后因为推迟链接不会将使用的库函数对应的dll文件都包含在exe文件中,而是在exe运行的时候将dll加载到内存CPU中再链接。

    • 优点

      节省空间:多个可执行程序对同所需要的库函数共享一份副本

      更新快:一个源文件发生改变,只需更新编译成dll文件,不用每个可执行程序需要重新来一遍链接过程,因为多个可执行程序在运行时时链接,且共享一份副本

    • 缺点

      启动速度慢:因为每次执行程序都需要链接

    我对此小知识的思考:

    动态链接dll,是将整个dll都加载到内存中,还是说当前可执行文件使用了哪些库函数,将对应的函数定义加载到CPU中。

    问了同学和交流群的人,他们说是整个dll都加载到内存中。文章来源地址https://www.toymoban.com/news/detail-792317.html

到了这里,关于Hazel游戏引擎(004)项目设置的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Hazel 引擎学习笔记

    https://youtu.be/etdSXlVjXss 我感觉自己照抄视频中的脚本还是有点慢了 因为你不知道他什么时候加了什么东西,或者自己照抄就很容易抄错 我觉得最好的方法就是自己快速过一遍他的视频,知道他大概的思路是怎么样的,然后自己再拉取那个 commit 的代码,用 diff 方便看他具体修

    2024年02月13日
    浏览(50)
  • 一个简单的 rust 项目 使用 bevy 引擎 复刻 Flappy Bird 小游戏

    一个使用 bevy 引擎复刻的 Flappy Bird 经典小游戏。 通过该项目我们可以学到:bevy 的自定义组件,自定义插件,自定义资源,sprite 的旋转,sprite 的移动,sprite sheet 动画的定义使用,状态管理,等内容… 简单介绍一下包含的内容: 游戏状态管理 Menu、InGame、Paused、GameOver。 小

    2023年04月24日
    浏览(47)
  • QQ浏览器怎么才能设置默认搜索引擎为百度

    问题: 打开QQ浏览器,搜索相关信息时发现总是默认为”搜狗搜索引擎“,想将其转为”百度搜索引擎“ 解决: 1、点击浏览器右侧”菜单“图标,选择”设置“,如下图所示: 2、在”常规设置“中的”搜索引擎“栏目中将”搜狗“替换为”百度“即可,如下图所示:

    2024年02月06日
    浏览(51)
  • 开源游戏引擎和模拟器的项目合集 | 开源专题 No.38

    Stars: 26.2k License: GPL-3.0 yuzu是一款全球最受欢迎的开源Nintendo Switch模拟器,由Citra创建者编写。它采用C++语言编写,并具有可移植性,在Windows和Linux上进行积极维护。该模拟器能够全速运行大多数商业游戏,只要您满足其兼容性要求即可。yuzu支持许多不同类型的游戏,并且可以

    2024年02月08日
    浏览(42)
  • 【游戏】PC游戏引擎简介及游戏使用技术检测技巧

    从事游戏安全行业多年,各种游戏引擎让人眼花缭乱,对游戏分析肯定也想了解相关引擎特点,这样才能更好的进行下一步的分析。 今天就将PC上常见的引擎及作品进行介绍,并介绍一些工具去快速了解一个新游戏。 先看一个steam上游戏引擎统计数据 https://steamdb.info/tech/。

    2024年02月07日
    浏览(61)
  • 如何使用现代C++特性构建游戏引擎

    游戏引擎是用来设计、开发和构建计算机游戏的软件框架。它们由一些基本的工具和程序构成,可帮助游戏设计师和开发者轻松地创建、管理和优化游戏。基本上,游戏引擎是实现游戏的所有技术的一个集合。 现代C++(指C++11、C++14和C++17)为游戏引擎的开发提供了强大的功能

    2024年02月05日
    浏览(46)
  • 使用团结引擎开发Unity 3D射击游戏

           本案例是初级案例,意在引导想使用unity的初级开发者能较快的入门,体验unity开发的方便性和简易性能。       本次我们将使用团结引擎进行开发,帮助想体验团结引擎的入门开发者进行较快的环境熟悉。      本游戏是一个俯视角度的射击游戏。主角始终位于屏幕

    2024年01月19日
    浏览(72)
  • 【C#项目实战】控制台游戏勇士斗恶龙(1)——游戏初始设置以及开始界面

    君兮_的个人主页 即使走的再远,也勿忘启程时的初心 C/C++ 游戏开发 Hello,米娜桑们,这里是君兮_,最近开始正式的步入学习游戏开发的正轨,想要通过写博客的方式来分享自己学到的知识和经验,这就是开设本专栏的目的。希望这些独立的C#小项目能对做游戏的你有所帮助,

    2024年02月09日
    浏览(51)
  • 跟着cherno手搓游戏引擎【10】使用glm窗口特性

    创建: ImGuiBuild.cpp:引入ImGui Layer.h:加入GuiRender方法,每次渲染Gui都会调用 ImGuiLayer.h:删除冗余部分,仅留下加入,删除,和Render方法,添加Begine和End,用于每次刷新UI的配置和删除UI。 ImGuiLayer.cpp:删除原来的Update,把配置、绘制UI的代码、渲染分离 LayerStack.h:修改m_LayerInsertI

    2024年01月25日
    浏览(37)
  • 激活Windows时出现错误代码0xC004C003怎么办?

    Windows是我们最常见的电脑操作系统,那么如果我们在尝试激活Windows时出现错误代码0xC004C003,应该如何解决? Windows操作系统为了抑制盗版软件,在安装系统时需要通过微软公司的正版验证,该过程就是Windows激活过程。通常情况下,Windows产品密钥是由25个字符组成的代码,只

    2024年02月06日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包