GODOT游戏编程007---- Your First Game(2)

上一篇做了一个会移动的小人。
简单回顾一下。我们要创设一个玩家角色,新建Area2D,这个包含两个子节点,一是AnimatedSprite,也就角色的动画图片,二是 CollisionShape2D,也就是角色的范围大小,用于判断是否遭受到攻击。我想,以后在设计得时候,是否可以用这个节点制作范围伤害,如暴风雪?或者制作敌人的警戒圈?现在还不知道……
继续后面的教程。
先来看写的代码

extends Area2D    #拓展Area2D功能

export (int) var speed  # 输出角色移动速度变量 (pixels/sec).
var screensize  # 变量游戏窗口尺寸.

func _ready():
     screensize = get_viewport_rect().size

#_ready() 当一个节点进入场景时调用,是我们获取屏幕尺寸的好时机。

func _process(delta):
    var velocity = Vector2() #定义角色移动速度的二维向量。
    # 我们用_process()函数来定义角色动作。
    #_process函数每帧都调用,所以我们用来更新一些经常改变的元素。
    #现在,我们要用它实现:
    #一检查输入,二向给定方向移动,三角色有适当的动画。
    #首先我们来检查四个默认的方向键有没有按下
    if Input.is_action_pressed("ui_right"):
        velocity.x += 1
    if Input.is_action_pressed("ui_left"):
        velocity.x -= 1
    if Input.is_action_pressed("ui_down"):
        velocity.y += 1
    if Input.is_action_pressed("ui_up"):
        velocity.y -= 1
     #上面可以看到,input这个函数的一个功能用法   
    if velocity.length() > 0:
        velocity = velocity.normalized() * speed
        #速度
        $AnimatedSprite.play()#顺带检查角色是否移动,移动
    else:
        $AnimatedSprite.stop()
        #$ 是get_node()的简写,所有在这里,用$AnimatedSprite.play() 和get_node("AnimatedSprite").play()一样

    position += velocity * delta
    position.x = clamp(position.x, 0, screensize.x)
    position.y = clamp(position.y, 0, screensize.y)
未完待续

猜你喜欢

转载自blog.csdn.net/weixin_42944682/article/details/81915277