You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

伦敦金斯顿大学2D游戏开发问题:实现匕首从剑角色两侧动态朝光标发射

解决2D剑角色动态生成匕首的位置问题

核心思路

要实现沿角色朝向垂直线的左右交替生成点,关键是利用2D向量的垂直旋转计算偏移方向,再结合交替标记控制左右侧生成。

分步实现(适配GFC引擎逻辑)

  1. 获取基础数据
    先拿到剑的位置、光标位置,计算剑指向光标的朝向向量:

    // 假设GFC引擎提供以下方法
    Vector2 swordPos = Sword.GetPosition();
    Vector2 cursorPos = Input.GetCursorWorldPosition(); // 获取光标世界坐标
    Vector2 direction = cursorPos - swordPos;
    
    // 避免光标与剑重合时的零向量问题
    if (direction.Length() > 0.01f) {
        direction.Normalize(); // 归一化方向,确保偏移距离稳定
    }
    
  2. 计算垂直偏移方向
    2D中,向量(x, y)顺时针旋转90度得到垂直右侧的向量(-y, x),逆时针旋转90度得到垂直左侧的向量(y, -x):

    const float offsetDistance = 20.0f; // 对应你之前用的固定偏移量
    
    // 计算左右侧的偏移向量
    Vector2 rightOffset = Vector2(-direction.Y, direction.X) * offsetDistance;
    Vector2 leftOffset = Vector2(direction.Y, -direction.X) * offsetDistance;
    

    注:如果GFC引擎Y轴向下(部分2D引擎的设定),可交换左右偏移的向量公式,测试后调整即可。

  3. 交替生成逻辑
    用一个布尔变量记录下一次生成的侧,每次生成后翻转标记:

    // 类成员变量,记录下一次生成方向
    bool spawnRightNext = true;
    
    // 确定本次生成位置
    Vector2 spawnPos = spawnRightNext ? (swordPos + rightOffset) : (swordPos + leftOffset);
    
    // 生成匕首并设置朝向
    Dagger newDagger = GFC::CreateGameObject<Dagger>(spawnPos);
    newDagger.SetMovementDirection(direction);
    
    // 切换下一次生成侧
    spawnRightNext = !spawnRightNext;
    

额外注意事项

  • 如果角色有独立的朝向(比如转向动画的朝向,而非完全指向光标),可以替换direction为角色自身的朝向向量,比如Vector2 direction = Sword.GetFacingDirection();
  • 若偏移位置需要随角色尺寸调整,可将offsetDistance设为角色宽度的比例值,比如Sword.GetWidth() * 0.3f

内容的提问来源于stack exchange,提问作者Mercenary -

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 00:32:51