首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >运动体2D不动

运动体2D不动
EN

Stack Overflow用户
提问于 2022-04-22 03:17:14
回答 1查看 379关注 0票数 2

我试着玩一个游戏使用戈多引擎,但我被困在一开始!我KinematicBody2D动不了了!

这是我的Player.GD脚本

代码语言:javascript
复制
extends KinematicBody2D

var velocity = Vector2.ZERO
var move_speed = 480
var gravity = 1200
var jump_force = -720
var right = Input.is_action_pressed("move_right")
var left = Input.is_action_pressed("move_left")
var jump = Input.is_action_pressed("jump")


func _ready():
    pass
    
func _physics_process(_delta):
    var move_direction = int(right) - int(left)
    velocity.x = move_speed * move_direction
    move_and_collide(velocity)

有人能帮帮我吗?

EN

回答 1

Stack Overflow用户

发布于 2022-04-22 03:25:30

当初始化KinematicBody2D时,所有这些代码都将运行:

代码语言:javascript
复制
var velocity = Vector2.ZERO
var move_speed = 480
var gravity = 1200
var jump_force = -720
var right = Input.is_action_pressed("move_right")
var left = Input.is_action_pressed("move_left")
var jump = Input.is_action_pressed("jump")

因此,它将不会接受实时输入。相反,您需要最后三行:

代码语言:javascript
复制
func _physics_process(_delta):
    var right = Input.is_action_pressed("move_right")
    var left = Input.is_action_pressed("move_left")
    var jump = Input.is_action_pressed("jump")
    # …

顺便说一下,这些都是布尔型的。如果使用float,则可以从0.0获得一个从Input.get_action_strength1.0Input.get_action_strength。这也会让你的代码为模拟输入做准备。

我还想指出的是,move_and_collide不是速度,而是位移矢量。因此,要正确地调用它,您需要将速度乘以增量:

代码语言:javascript
复制
func _physics_process(delta):
    # …
    move_and_collide(velocity * delta)

或者使用move_and_slide,它确实需要一个速度。顺便说一句,up参数move_and_slide采用的是区分地板,天花板和墙壁。没有,一切都被认为是一堵墙。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71963102

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档