ue——贪吃蛇笔记

首先我们需要去明确蛇变长的逻辑

错误总结:

1.设置头节点的变量的时候,为什么传入的是bp——snakebody的对象引用?

@Claude
 请问ue蓝图中spawn actor的作用是什么?

Claude
应用  31 分钟前
在UE4蓝图中,Spawn Actor节点的作用是动态生成一个演员(Actor)。
其主要功能和使用场景包括:
1. 在游戏中Runtime时生成角色、道具等;
2. 实现对象池,优化资源利用率;
3. 需要的时候再加载关卡或机制,实现懒加载;
4. 通过代码控制和配置演员的生成;
5. 支持绑定和配置生成的演员。
具体用法是:
1. 连接要生成的演员类。
2. 配置演员的Transform。
3. 拖拽节点到Graph生成。
4. 获取并配置生成的演员对象。
5. 析构时记得销毁生成的演员。
Spawn Actor是一个非常重要的运行时生成节点,合理利用可以优化游戏性能,提升游戏体验。是蓝图编程中一个必学的技能点。 (已编辑) 


xiong gavin
  4 分钟前
@Claude
 为了通过蓝图完成贪吃蛇功能  我设置了两个actor blueprint  一个是bp_snake代表蛇头,一个是bp_snakebody代表蛇的身子,然后我希望在bp_snake中添加一个NEXT BODY变量,请问我应该将该变量设置为什么类型并给出理由?

Claude
应用  4 分钟前
根据你描述的这个贪吃蛇游戏的蓝图设置,为了让蛇头节点 bp_snake 可以连接并控制蛇身体节点 bp_snakebody,你需要在 bp_snake 中添加一个 NEXT BODY 变量,用来保存下一个蛇身体节点的引用。
这个 NEXT BODY 变量最好设置为 bp_snakebody 的变量类型,理由如下:
1. 设置为 snakebody 的类型,可以直接存储其对象引用,然后通过这个引用直接操作特定蛇身体节点。
2. 如果只设置为一个通用的 Actor 类型,则无法访问到 snakebody 中的特定属性和方法。
3. 设置为 snakebody 类型可以避免强制类型转换的开销。
4. 通过对象引用可以直接调用 snakebody 中的方法来实现移动等效果。
5. 设置为具体的对象类型符合面向对象的思想,提高可维护性。
6. 可以设置为 TSubclassOf<snakebody> 类型,在生成时再转换为具体对象类型。
综上,根据贪吃蛇的实现逻辑,将 NEXT BODY 变量设置为 bp_snakebody 的类型,是连接和控制蛇身体节点最合理的选择。这符合面向对象设计思想,也是 UE4 中实现这类游戏逻辑的常用方式。 (已编辑) 


xiong gavin
  2 分钟前
@Claude
 这个NEXT BODY算是头结点吗?

Claude
应用  1 分钟前
根据你的描述,NEXT BODY变量存放的是蛇身体(bp_snakebody)节点的引用,不是头结点(bp_snake)。
头结点应该是通过自身的对象引用来表示的,不需要特别保存引用。
而NEXT BODY变量的作用是让头结点可以连接并控制它后面的第一个蛇身体节点。
所以更准确的说,NEXT BODY是头结点(bp_snake)中保存的指向下一段蛇身体(bp_snakebody)的引用。
在实现蛇的移动逻辑时,典型的流程是:
1. 头结点移动到新位置
2. 头结点将自身的引用传递给NEXT BODY节点,作为其的下一段身体
3. 原来的NEXT BODY节点移动到头结点先前的位置
4. 依次将之前的身体节点传递给它的NEXT BODY
5. 最后一段身体生成一个新节点作为尾巴
所以NEXT BODY的作用是让头结点可以控制和连接蛇身体链表,并在移动时传递引用和位置,实现整条蛇的移动。
综上所述,NEXT BODY不是头结点,而是用于连接蛇身体链表的关键引用变量。 (已编辑) 


xiong gavin
  < 1 分钟前
@Claude
 为什么bp_snake算是头节点呢?

Claude
应用  < 1 分钟前
根据你描述的贪吃蛇游戏蓝图设置,bp_snake被称为头节点的原因有以下几点:
1. 蛇头是蛇身体链表的第一个节点,起到链表头的作用。
2. 蛇头节点负责控制整条蛇的移动,其他身体节点需要根据头节点的位置来移动。
3. 蛇头节点含有NEXT BODY变量来连接后续的第一个蛇身体节点。
4. 在游戏逻辑上,蛇头的位置代表了整条蛇身体的位置,起到了头的作用。
5. 蛇头可能含有碰撞组件来检测游戏元素如食物、障碍等,起到了头部的作用。
6. 销毁蛇头节点会导致整条蛇被销毁,头节点起到关键作用。
7. 玩家通过控制键盘上下左右来控制蛇头的移动方向。
8. 设计模式上,链表需要一个头节点来连接后续节点。
所以,从数据结构的角度,以及贪吃蛇游戏的逻辑和功能上,把bp_snake作为头节点都是合理的。
它起到了控制蛇身移动、连接蛇身体、与游戏交互的头部作用。这也是在UE4中使用蓝图实现贪吃蛇时的常见设计方式。

@Claude
 我在bp_snakebody中自定义了一个函数spawnbody,为什么在bp_snake中只能从NEXT BODY 变量引出的线才能调用这个自定义函数?

回复


Claude
应用  < 1 分钟前
在UE4蓝图编程中,如果要从一个蓝图A调用另一个蓝图B中的函数,需要满足:
1. 蓝图A中有一个类型为蓝图B的变量。
2. 通过这个变量获取到蓝图B的对象引用。
3. 然后就可以通过这个引用调用蓝图B中定义的函数。
回到你的例子:
1. bp_snakebody中定义了spawnbody函数。
2. bp_snake中有一个NEXT_BODY变量,类型为bp_snakebody。
3. 所以只有通过NEXT_BODY获得的bp_snakebody对象引用,才能调用其spawnbody函数。
4. 直接从bp_snake引出的线,无法获取到bp_snakebody的对象引用。
5. 所以无法调用bp_snakebody中的函数。
综上,跨蓝图调用函数必须通过对象引用,这是UE4蓝图的一项基本规则。
明确了这一点,就可以正确理解和使用自定义函数了。

看清楚颜色    next body连的自定义事件代表把当前的位置传递给下一个节点当初始location

然后上一个传递给这一个  所以要从第一个location链接到set上面

为什么是在蛇头添加碰撞框,而不是在food添加碰撞框?

在food添加之后,你的调用有一些问题,具体来说  你给的引用好像不能直接使用  这是为什么?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值