Godot CharacterBody2D 移动脚本:键盘和鼠标控制
var move_speed := 200 var move_direction := Vector2.ZERO #direction 方向 #在碰撞和移动的情况下 不要使用velocity var mouse
func _process(delta):
key_input();
mouse_input();
move_and_collide(move_direction * move_speed * delta)
#一次性将它的向量和标量传入move_and)
#实际执行移动和碰撞的代码依然要写在物理碰撞函数中
func key_input(): #z制作一个函数 将它八项移动的程序定义到函数内部 move_direction = Vector2.ZERO #每一次调用前将它初始化
if Input.is_action_pressed('ui_right'):
move_direction.x += 1
if Input.is_action_pressed('ui_left'):
move_direction.x -= 1
if Input.is_action_pressed('ui_down'):
move_direction.y += 1
if Input.is_action_pressed('ui_up'):
move_direction.y -= 1
if move_direction.length() > 0:
move_direction = move_direction.normalized()
#调用结束后 将它返回它的单位向量
func mouse_input(): #定义一个鼠标的函数 #鼠标控制移动的函数依然有多重方法
if Input.is_mouse_button_pressed(MOUSE_BUTTON_LEFT):
#如果按下鼠标左键 #查询鼠标位置 一个写在视口里的方法 在顶层设定一个变量将它存起来 mouse = get_viewport().get_mouse_position() #代表返回该节点坐标系中的鼠标位置 注意 这里的位置信息是相对于根节点的 必须确保根节点的坐标在0,0才可以顺利执行 #这就是鼠标位置 move_direction = self.position.direction_to(mouse).normalized() if position.distance_to(mouse)< 5.0: #求两个向量之间的距离 结果为浮点数 。代码中要为精确度留差 所以不能是0 move_direction = Vector2.ZERO# 如果不返回禁止状态 则点哪就往哪个方向一直移动。需要注意的是 keynput里也有这个代码 如果想实现那个效果 连key 那边的也要一起屏蔽
如果移动之后 两个向量之间的距离==0
原文地址: https://www.cveoy.top/t/topic/bROy 著作权归作者所有。请勿转载和采集!