游戏编程 - Godot引擎中控制移动的几种方式

Godot引擎中控制移动的几种方式

cover-02

1。我们要讲什么?

本篇我们要梳理一下游戏中常见的几种角色移动的控制方式,比如:
使用键盘手柄

  • 八个方向移动
  • 旋转(左右键控制) + 移动(上下键控制)

使用鼠标

  • 自由移动(点击位置)
  • 旋转(始终朝向鼠标) + 移动(上下键控制)

2。准备一个简单的演示

本篇为了聚焦我们要研究的问题,我们不再给角色加入动画等其它效果,仅使用godot引擎的图标作为精灵,之后的一切控制演示都由它承担。
在这里插入图片描述

  • 首先建立一个以KinematicBody2D为载体的精灵,其包含的节点和层级关系如上图。
  • KinematicBody2D是一个运动学性质的节点。(在另一篇文章里会详细说)
  • Sprite是一个精灵节点,把godot的图标(icon.png)拖到它的Texture属性上。
  • CollisionShape2D是一个碰撞检测盒,我们给了它一个矩形形状。本篇文章中可以不使用。(加上是为了消除警告)
  • 给KinematicBody2D节点附加一个脚本。(选中此节点,然后点击右上角的在这里插入图片描述
    图标)
  • 最后我们可以看到如下效果,因为精灵默认处于(0,0)处,所以会展示在窗口的角落。因为我们脚本里什么都没做,所以图标也只是静静的躺在那里。
    在这里插入图片描述

3。配置输入映射(Input Map)

输入映射可以理解成什么东西呢?它相当于提前把我们可能按的键,比如键盘的W A S D、手柄的某个键或鼠标的某个键绑定到一个字符串,而godot提供了一个方便的函数,我们只要把我们绑定的字符串提供给这个函数,根据返回值真假(true or false)就可以知道与这个字符串绑定的的键是否被按下。

  • 找到配置的对话框:Project -> Project Settings… -> Input Map选项卡
    在这里插入图片描述
  • 从上面的图中可以知道,我们配置了5个映射关系:
    在这里插入图片描述
  • 好,现在如果我们要检测上、下、左、右键是否有按下,我们可能写出这样的代码:
func get_input():
    ...
    if Input.is_action_pressed('move_right'):
        velocity.x += 1
    if Input.is_action_pressed('move_left'):
        velocity.x -= 1
    if Input.is_action_pressed('move_down'):
        velocity.y += 1
    if Input.is_action_pressed('move_up'):
        velocity.y -= 1
    ...
  • 下面是输入映射的基本操作:在Action文本框中输入你想绑定的字符串名字,一般是提示性的(比如:move_left、attack等等);点击Add按钮后,你要绑定的字符串会出现在下面的列表里;最后在你的字符串右边,点击"+"号来添加你要将哪些键映射到这个字符串。
    在这里插入图片描述
  • 能不能对godot所有支持的键做一个基本的介绍,比如:
    在这里插入图片描述
  • 其中Joy Axis(轴)的标记会多一点,因为一般手柄上会有左右两个摇杆,所以:0表示左摇杆横轴,1表示左摇杆纵轴,2表示右摇杆横轴,3表示右摇杆纵轴;“+” 表示正半轴,"-"表示负半轴;这两组标记组合一下得到下面的所有输入:
    在这里插入图片描述
  • 复习一遍。所以,下面这个映射的含义是:当第0号玩家(Device x表示第x号玩家,用于多个人玩的时候)的手柄的左摇杆的横轴推向正半轴的时候,表示它要往右移动(呼~)
  • 13
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值