伦敦金斯顿大学2D游戏开发问题:实现匕首从剑角色两侧动态朝光标发射
解决2D剑角色动态生成匕首的位置问题
核心思路
要实现沿角色朝向垂直线的左右交替生成点,关键是利用2D向量的垂直旋转计算偏移方向,再结合交替标记控制左右侧生成。
分步实现(适配GFC引擎逻辑)
获取基础数据
先拿到剑的位置、光标位置,计算剑指向光标的朝向向量:// 假设GFC引擎提供以下方法 Vector2 swordPos = Sword.GetPosition(); Vector2 cursorPos = Input.GetCursorWorldPosition(); // 获取光标世界坐标 Vector2 direction = cursorPos - swordPos; // 避免光标与剑重合时的零向量问题 if (direction.Length() > 0.01f) { direction.Normalize(); // 归一化方向,确保偏移距离稳定 }计算垂直偏移方向
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引擎的设定),可交换左右偏移的向量公式,测试后调整即可。
交替生成逻辑
用一个布尔变量记录下一次生成的侧,每次生成后翻转标记:// 类成员变量,记录下一次生成方向 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 -
相关产品推荐
相关产品推荐

