GAMES102课程框架环境配置
课程给出的环境配置方法一我不可用,故在这里通过方法二进行环境配置。由于项目CMakeLists.txt中给出的Ubpa_DownloadZip函数的assets_v2.zip的URL链接失效,故通过离线下载assets_v2.zip并修改cMakeLists.txt的URL为本地路径的方式进行cmake的配置
环境配置前需要做的准备
1. 编译好的依赖库 Ubpa_v2.zip(百度网盘提取码:qmp4)和我提供的assets_v2.zip文件。
将下载的Ubpa_v2.zip解压至文件夹下,并配置bin文件的环境变量,环境变量的配置在课程的md中已经给出,将assets_v2.zip下载完后记住文件路径,后面要用~
2. 相关软件的安装
- Cmake-GUI
- Visual Studio
- GitHub Desktop(非必需)
关于软件的安装说明在课程的md中已经详细给出,在此不做赘述~
下面开始环境配置~
下载课程框架源码
这里通过GitHub Desktop方法下载,同学们也可以通过下载压缩包的形式下载
下载完成后通过cmake-GUI进行项目build编译
首先打开到项目的作业框架文件夹
修改CMakeLists.txt的内容
将其URL修改为你下载下来的assets_v2.zip的存储路径
通过Cmake-GUI进行项目的build搭建
通过配置Configures和Generate生成项目build代码,再通过open Project进入VS来进行项目运行,
打开解决方案管理器,打开GAMES102_Project。将其设为启动项目。
此时如果进行项目编译会报静态资源错误,是由于项目外部依赖部分方法的静态断言导致的,下面将具体文件的静态断言注释即可.
在错误报告中找到CmptPtr.h
将CmptAccessPtr类的静态断言注释掉即可,注释代码如下
// CmptAccessType + void*
class CmptAccessPtr {
public:
constexpr CmptAccessPtr(CmptType type, void* p, AccessMode mode) noexcept : accessType{ type, mode }, p{ p } {}
constexpr CmptAccessPtr(CmptAccessType accessType, void* p) noexcept : accessType{ accessType }, p{ p } {}
constexpr CmptAccessPtr(CmptPtr p, AccessMode mode) noexcept : accessType{ p.Type(), mode }, p{ p.Ptr() } {}
template<typename TaggedCmpt>
constexpr CmptAccessPtr(TaggedCmpt p) noexcept : accessType{ CmptAccessType::Of<TaggedCmpt> }, p{ CastToVoidPointer(p) } {}
explicit constexpr CmptAccessPtr(CmptPtr p) noexcept : CmptAccessPtr{ p, AccessMode::LATEST } {}
explicit constexpr CmptAccessPtr() noexcept : CmptAccessPtr{ Invalid() } {}
explicit constexpr operator CmptPtr() const noexcept { return { CmptType{accessType}, p }; }
constexpr void* Ptr() const noexcept { return p; }
constexpr CmptAccessType AccessType() const noexcept { return accessType; }
static constexpr CmptAccessPtr Invalid() noexcept { return { CmptAccessType::Invalid(), nullptr }; };
constexpr bool Valid() const noexcept { return p != nullptr && accessType.Valid(); }
// check: type's access mode must be equal to <mode>
template<typename Cmpt, AccessMode mode>
constexpr auto As() const noexcept {
assert(accessType.GetAccessMode() == mode);
if constexpr (mode == AccessMode::LAST_FRAME)
return LastFrame<Cmpt>{p};
else if constexpr (mode == AccessMode::WRITE)
return Write<Cmpt>{p};
else if constexpr (mode == AccessMode::LATEST)
return Latest<Cmpt>{p};
//else
// static_assert(false);
}
private:
friend class EntityMngr;
CmptAccessType accessType;
void* p;
};
}
此时再次运行项目,会再次报四个同样的错误,找到相关文件将其静态断言注释即可,
注意!!!
注释时记得将else方法体全部注释,否则会出现C1001内部编译器错误的报错。
将其注释完成后项目即可运行~
希望能帮到各位同学~