10.25UEC++/小试牛刀(笨鸟先飞案例)

2023-11-01 06:30

本文主要是介绍10.25UEC++/小试牛刀(笨鸟先飞案例),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.思路整理:

如何入手?

角色可能是每个游戏的最重要的部分,所以一般可以先从角色入手,如果游戏很复杂,可以进行拆分设计。


蓝图创建地图:

创建默认Pawn:

编写GameMode默认构造函数:

 将创建的BirdPawn设置为默认Pawn


引入Paper2D模块:会加载FlipBook,类似连续帧数图片;

 在UE4中创建FlipBook序列:

 创建飞行动画:(三帧)

 选取Sprite类型的资产(但是图片加载进入时,是纹理类型)

 转换纹理到Sprite:

 将图片按照帧率填入:


FlipBook面板:

单帧也可以拖动进行调整帧率:

 

 UEC++中编写BirdPawn代码,首先创建根组件(能力)

创建一个FlipBook组件

将FlipBook绑定到根组件上:


可以被加载到Ue中的能力:

 

添加相机:

 将UE中动画资源加载到FlipBook上:

调整相机位置,为了垂直于图片:


设置背景:

怎么知道一个资源需要什么样的组件呢?

把资源拖入场景,组件就会显示:

创建组件对象:

 创建渲染组件:并且设置为根节点

 将创建的随机背景切换函数进行实现:

在BeginPlay中调用函数:

分析:在什么时候开始设置背景?(游戏运行时,那么需要在GameMode中写初始化背景逻辑):创建一个类对象

BeginPlay中进行创建背景Actor:

Ue运行结果显示:

显示不出背景原因分析:由于相机吊臂的碰撞机制,当有物体在相机和相机关联物体之间时,相机吊臂会向前推,产生碰撞,所以需要关闭相机吊臂碰撞:

编译运行:

 随机背景设置:分析:首先要确定有几个背景,就要创建几个类对象:

 创建完对象之后,要先将资源加载进来:

如果都为空,报错:

 随机赋值给背景根组件:(设置背景)(NEW知识:Fmath,随机取值)


 将相机设置为非正交关系(投射关系)(2D游戏不会因摆放位置而产生视觉差距):

改变投射宽度:


设置地面(会移动的地面):

 创建一个地板类,会移动,需要加载资源;移动是行为,资源是属性:所以创建类对象,构建移动函数:

 在构造函数中进行初始化属性:

移动的行为定义函数:

设置三块板子:

 初始化三块板子:

初始化板子位置:

 如果板子出了屏幕,则在后面再次出现:


循环播放地板移动优化:


 设置飞行:分析(飞行是状态,所以需要多种状态,使用枚举类型定义状态)

在类内部定义枚举类型变量:   

 绑定输入事件:

飞行函数:

 改变状态函数:

设置力:


添加与地板碰撞:

首先创建碰撞函数:(代码段)动态代理需要加UF函数:

 在初始化函数中绑定物理碰撞:

 碰撞逻辑模板:


设计小鸟抬头:分析(向上飞行,头向上抬,向下落,头向下,所以头的方向是和飞行时x轴的偏移有关,当X正向偏移,小鸟的z轴旋转(以x.speed为依据)):

设置声音 :

 设计管道:

创建actor类,用数组管理:

设置根节点:

加载资源:

 以for循环,进行设置节点,然后绑定到根节点上,将新设计的接待你绑定在Group节点上,设置节点的位置: 


 设计管道逻辑:

定义变量:

gameplay时:

随机产生  数组:

 随机出现不同排列的管道:

更新管道的位置:在tick中调用:

 


加分设计:新建GameState:

行为和属性:

 在管道移动中,会产生分数变化,所以在管道类中进行编写加分逻辑(调用默认GameStateBase):


整理逻辑到GameMode中:

定义一个枚举类型记录游戏状态:

 

定义类指针:在GameMode中设定速度

 改变状态函数:

使用控制台程序进行控制游戏当前状态:(0重置,1开始,2结束)

 

 生成类对象:

这篇关于10.25UEC++/小试牛刀(笨鸟先飞案例)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/321133

相关文章

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

【C++ Primer Plus习题】13.4

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: main.cpp #include <iostream>#include "port.h"int main() {Port p1;Port p2("Abc", "Bcc", 30);std::cout <<

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

C++包装器

包装器 在 C++ 中,“包装器”通常指的是一种设计模式或编程技巧,用于封装其他代码或对象,使其更易于使用、管理或扩展。包装器的概念在编程中非常普遍,可以用于函数、类、库等多个方面。下面是几个常见的 “包装器” 类型: 1. 函数包装器 函数包装器用于封装一个或多个函数,使其接口更统一或更便于调用。例如,std::function 是一个通用的函数包装器,它可以存储任意可调用对象(函数、函数

C++11第三弹:lambda表达式 | 新的类功能 | 模板的可变参数

🌈个人主页: 南桥几晴秋 🌈C++专栏: 南桥谈C++ 🌈C语言专栏: C语言学习系列 🌈Linux学习专栏: 南桥谈Linux 🌈数据结构学习专栏: 数据结构杂谈 🌈数据库学习专栏: 南桥谈MySQL 🌈Qt学习专栏: 南桥谈Qt 🌈菜鸡代码练习: 练习随想记录 🌈git学习: 南桥谈Git 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈�

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

06 C++Lambda表达式

lambda表达式的定义 没有显式模版形参的lambda表达式 [捕获] 前属性 (形参列表) 说明符 异常 后属性 尾随类型 约束 {函数体} 有显式模版形参的lambda表达式 [捕获] <模版形参> 模版约束 前属性 (形参列表) 说明符 异常 后属性 尾随类型 约束 {函数体} 含义 捕获:包含零个或者多个捕获符的逗号分隔列表 模板形参:用于泛型lambda提供个模板形参的名

【区块链 + 人才服务】可信教育区块链治理系统 | FISCO BCOS应用案例

伴随着区块链技术的不断完善,其在教育信息化中的应用也在持续发展。利用区块链数据共识、不可篡改的特性, 将与教育相关的数据要素在区块链上进行存证确权,在确保数据可信的前提下,促进教育的公平、透明、开放,为教育教学质量提升赋能,实现教育数据的安全共享、高等教育体系的智慧治理。 可信教育区块链治理系统的顶层治理架构由教育部、高校、企业、学生等多方角色共同参与建设、维护,支撑教育资源共享、教学质量评估、

客户案例:安全海外中继助力知名家电企业化解海外通邮困境

1、客户背景 广东格兰仕集团有限公司(以下简称“格兰仕”),成立于1978年,是中国家电行业的领军企业之一。作为全球最大的微波炉生产基地,格兰仕拥有多项国际领先的家电制造技术,连续多年位列中国家电出口前列。格兰仕不仅注重业务的全球拓展,更重视业务流程的高效与顺畅,以确保在国际舞台上的竞争力。 2、需求痛点 随着格兰仕全球化战略的深入实施,其海外业务快速增长,电子邮件成为了关键的沟通工具。