首页 > 编程语言 >[10] UE C++ 拓展知识

[10] UE C++ 拓展知识

时间:2024-04-18 19:23:54浏览次数:22  
标签:USnakeSaveGame 10 GameScore int void number C++ SnakeSaveGameInstance UE

SaveGame

//--USnakeSaveGame.h
UCLASS()
class SNAKE_API USnakeSaveGame : public USaveGame
{
   GENERATED_BODY()
public:
   UPROPERTY()
   int32 GameScore;
   UPROPERTY()
   FString Name;

   UPROPERTY()
   TArray<int32> Numbers;

   FString SlotName;
   int32 UserIndex;

   FString SlotName1;
   int32 UserIndex1;

   USnakeSaveGame();

   // int32 A
};
//--SnakeSaveGame.cpp
USnakeSaveGame::USnakeSaveGame()
{
	SlotName = TEXT("FirstSlot");
	UserIndex = 0;
}

HUD中使用

void ASnakeHUD::SaveGameInfoToSlot()
{

   if (USnakeSaveGame* SnakeSaveGameInstance = Cast<USnakeSaveGame>(
      UGameplayStatics::CreateSaveGameObject(USnakeSaveGame::StaticClass())))
   {
      SnakeSaveGameInstance->GameScore = 10;
      SnakeSaveGameInstance->Name = TEXT("小黑");
      SnakeSaveGameInstance->Numbers.Add(34);
      SnakeSaveGameInstance->Numbers.Add(21);

      UGameplayStatics::SaveGameToSlot(SnakeSaveGameInstance, SnakeSaveGameInstance->SlotName,
                                       SnakeSaveGameInstance->UserIndex);
   }
}

void ASnakeHUD::GetGameInfoFromSlot()
{
   if (USnakeSaveGame* SnakeSaveGameInstance = Cast<USnakeSaveGame>(
      UGameplayStatics::LoadGameFromSlot(TEXT("FirstSlot"), 0)))
   {
      int32 Number = SnakeSaveGameInstance->GameScore;
      FString Name = SnakeSaveGameInstance->Name;
      TArray<int32> Numbers = SnakeSaveGameInstance->Numbers;

      UE_LOG(LogTemp, Log, TEXT("Number=%d;Name=%s;Numbers=%d"), Number, *Name, Numbers[1]);
   }
}

静态变量的使用

静态变量 : 局部作用域、成员作用域、最终都是在静态全局区 , 且在UE5程序没关闭前都存在

//--ASnakeGameState.h
class SNAKE_API ASnakeGameState : public AGameStateBase
{
   GENERATED_BODY()
public:
   static int32 GameScore;
   void AddGameScore();
};

//--ASnakeGameState.cpp
int32 ASnakeGameState::GameScore = 0; //独有一份
void ASnakeGameState::AddGameScore()
{
	GameScore++;
}
//--使用
void ASnakeHUD::SaveGameInfoToSlot()
{
	// ASnakeGameState::GameScore++;

	static int32 N = 0; //局部作用域提升到静态区 , 即使函数执行完也不会回收
	N++;
	
	if (USnakeSaveGame* SnakeSaveGameInstance = Cast<USnakeSaveGame>(
		UGameplayStatics::CreateSaveGameObject(USnakeSaveGame::StaticClass())))
	{
		SnakeSaveGameInstance->GameScore = ASnakeGameState::GameScore; //静态代码区赋值
		SnakeSaveGameInstance->GameScore = N;
		SnakeSaveGameInstance->Name = TEXT("小黑");
		SnakeSaveGameInstance->Numbers.Add(34);
		SnakeSaveGameInstance->Numbers.Add(21);

		UGameplayStatics::SaveGameToSlot(SnakeSaveGameInstance, SnakeSaveGameInstance->SlotName,
		                                 SnakeSaveGameInstance->UserIndex);
	}
}

全局函数指针和匿名函数

//函数指针 全局函数指针(Lambda表达式  匿名函数)  成员函数指针

//void Function1(int);
void Test1()
{
	void  (*Ptr)(int) = nullptr;//创建一个变量Ptr,Ptr可以(指向)存储一个无返回值,参数为int 的全局函数的地址
								//函数指针的最终使用目的是传递参数使用的
	Ptr = Function1;

	Function1(10);
	Ptr(10);

	/*
	//万能指针(C语言的指针)*/
	void*a =   malloc(sizeof(int));//在自由存储区(堆区)申请了10字节的内存空间
	free(a);
	int* ptr1 = (int*)a;


	int*ptr =   new int(10);//申请了堆区4字节的内存空间,并在空间中初始化为10
	delete ptr;
	
}
void Test2(int(*CallBack)(), int a) //Test2 1. 需要执行自己的逻辑, 2. 要执行形参中函数的逻辑(回调函数)
{
	int number = a;

	std::cout << "number = " << number << std::endl;
	CallBack();
}

//匿名函数  Lambda表达式 (一般用于全局函数指针传参)
void Function2()
{
	/* [] 捕获列表(捕获父作用域下的属性的方式)
	   [] 不捕获父作用域下的属性

	*/
	// ()
	// ->
  /*
	{} 函数逻辑
 */
	int number = 100, a = 200, b = 300;
	//[] 
	//{
	//    number;//不捕获
	//};
	//[=] 
	//{
	//    number;//值捕获(值的拷贝,只能使用,不能复制)
	//    number=100;//不能赋值
	//};
	[&]
	{
		number;//引用捕获(此处的number是父作用域下的属性number的别名)
		number = 300;//可以借助别名赋值 ,但是赋值结果不会影响到父作用域
	};
	std::cout << "number=" << number << "\n";
	[=, &number]   //
	{
		number;//引用捕获(此处的number是父作用域下的属性number的别名)
		number = 300;//可以借助别名赋值 ,但是赋值结果不会影响到父作用域
		//a;
		//a = 100;
	};
	std::cout << "number=" << number << "\n";

}

//--
	//  //匿名函数  []捕获列表 () ->void
	[](int a)->int
	{
		std::cout << "[](int a)->int" << std::endl;
		return 10;
	};
	//不捕获父作用域下的属性 函数参数为a 函数返回值为int 的匿名函数Lambda表达式
	Test2([]()->int {std::cout << "[]()->int" << std::endl; return 6662; }, 79);


	Function2();

函数指针(类、结构体)

类型别名(类、结构体)

代理_1

代理_2

标签:USnakeSaveGame,10,GameScore,int,void,number,C++,SnakeSaveGameInstance,UE
From: https://www.cnblogs.com/Aquakinn/p/18143325

相关文章

  • stm32f103使用RT-Thread组件fal读写内部flash
    本次使用RT-Threadstudio编写,使用为5.02完整版,目的是将内部flash进行分区,可以直接在内部flash存储数据。一、功能配置首先是打开设置里的FAL组件,因为我这里不需要外部内存,SFUD驱动就没打开:然后是配置两个参数,一个在board.h里,定义BSP_USING_ON_CHIP_FLASH,一个是在stm32xxxx_hal_......
  • Vue的class类面向对象
    一.准备工作JavaScript语言中,生成实例对象的传统方法是通过构造函数functionAnimal(name,age){this.name=name;this.age=age;}Animal.prototype.showName=function(){console.log(this.name);......
  • 10 个优化技巧,减少 Docker 镜像大小【转】
    什么是docker?Docker是一种容器引擎,可以在容器内运行一段代码。Docker镜像是在任何地方运行您的应用程序而无需担心应用程序依赖性的方式。要构建镜像,docker使用一个名为Dockerfile的文件。Dockerfile是一个包含许多指令(RUN、COPY、EXPOSE等)的文件。成功执行这些命令后,do......
  • 重装Win10系统
    参考自教程重装Win10-百度重装Win10-知乎BIOS设置U盘启动-百度知道安装步骤制作Win10的安装盘一个内存大于等于8G的U盘-Win10操作系统会下载到这个盘中,在Microsoft官网下载时,Microsoft会先将U盘格式化,因此需要一块空的U盘官网下载Win10Win10-官网下载此时会将......
  • 1052 卖个萌(测试点1)
    测试点1,可能给出的数字<=0,也是不合法的。Dev-C好像不能打印出来╮这个字符,搞得我一直以为写错了,实际上并没有错。#include<bits/stdc++.h>usingnamespacestd;constintinf=0x3f3f3f3f;#definelllonglongstringshou[20],yan[20],kou[20];intsetbiao(strings1,......
  • DP10RF001一款200MHz~960MHz 低功耗(G)FSK/OOK无线收发芯片应用无线遥控工控设备无线
    产品概述.DP10RF001是一款工作于200MHz~960MHz范围内的低功耗、高性能、单片集成的(G)FSK/OOK无线收发机芯片。内部集成完整的射频接收机、射频发射机、频率综合器、调制解调器,只需配备简单、低成本的外围器件就可以获得良好的收发性能。芯片支持灵活可设的数据包格式,支持自动应......
  • Alibaba Cloud Linux 3.2104 LTS 安装php-5.6.12
    1把php安装包上传到服务器2安装php所需要的扩展yum-yinstalllibxml2libxml2-developensslopenssl-develbzip2bzip2-develcurlcurl-devellibjpeglibjpeg-devellibpnglibpng-develfreetypefreetype-devellibmcryptlibmcrypt-develgdgd-devel3安装......
  • 6个高级Vue3知识技巧
    Vue3是一个非常流行的前端框架,广泛应用于大型互联网企业和个人项目。虽然我们已经熟悉了一些常见的Vue3知识,但还有一些不太常见但实用性很强的点可以帮助我们进一步优化和提升Vue3应用的性能和开发效率。本文将介绍一些不太常见的Vue3知识点。01、TeleportTeleport是V......
  • VuePress搭建文档网站
    VuePress官方文档:https://v2.vuepress.vuejs.org/zh/guide/getting-started.html以下是官方文档复制过来的步骤,加上了我的一些经验注释。1、依赖环境Node.jsv18.16.0+(我试了v14是运行不了的,必须这个版本及以上,建议安装nvm,方便切换node版本)包管理器,如pnpm、yarn、npm等(我安......
  • 1051 复数乘法
    记录一下问题。v1(13分)#include<bits/stdc++.h>usingnamespacestd;constintinf=0x3f3f3f3f;#definelllonglongintmain(){ doubler1,p1,r2,p2; cin>>r1>>p1>>r2>>p2;doublea1=r1*cos(p1);doubleb1=r1*sin(p1);dou......