pong_day02_让球飞来+碰撞反弹

1.创建Ball场景

创建一个新场景后再创造characterbody2D节点

命名Ball

再创建colorrect

命名为BallSprite

设置大小为12*12的方块,调整位置到正中央

再创建小球的碰撞体积

设置碰撞体积的大小和刚才的方块大小一样12*12

2.写球的脚本

bash 复制代码
extends CharacterBody2D

# 球的速度
@export var ball_speed:float = 300

# 函数_ready(),每次游戏开始运行一次
func _ready() -> void:
	reset_ball()
	
func _physics_process(delta: float) -> void:
    # 函数move_and_collide用于检测这次移动是否有碰撞
    # 若没有,则直接移动,并返回null
    # 若有,则移动到碰撞的位置,并返回碰撞信息
	var collision = move_and_collide(velocity * delta)
	if collision:
        # 函数get_normal用于返回碰撞面的法线向量
        # bounce根据返回的法线向量求出,碰撞后的反射方向
		velocity= velocity.bounce(collision.get_normal())

        # 每次碰撞略微加速
		velocity*=1.02

# 函数reset_ball确定每次游戏开始时球移动的方向和位置
func reset_ball():
    # 球初始位置位于中央
	position=Vector2(320,240)
    
	var random_x
	var random_y = randf_range(-0.5,0.5)
	
    # 让球随机往左(-1)或往右(1)
	if randi() % 2 == 0 :
		random_x = 1
	else :
		random_x = -1
    
    # normalized()是将(random_x,random_y)的向量值进行归一化,保证了初速度的稳定		
	var direction=Vector2(random_x,random_y).normalized()
	
    
	velocity = direction * ball_speed

如果想深入了解一下bounce可以看一下下面的公式和图(第一次画,画的不是很好看凑合着看吧)

3.设置球的碰撞层

layer代表在第几层

mask表示可以和哪几层进行碰撞

4.创建上下墙壁

返回game场景,在game节点下创建staticbody2D

改名成topwall

创建碰撞体积

设置shape为worldboundaryshape2D

normal.x : 0

normal.y : 1

distance : 0

和上面同样的步骤做一个bottomwall

normal.x : 0

normal.y : -1

distance : -480

另一种方法:也可以分别放一上一下两个长方形,一样可以

5.结果

6.个人总结+一点碎碎念(纯新手)

已经学了godot几天了,大概摸清了一点窍门

1.大部分当我们需要创建一个角色时,我们要创建一个父节点characterbody2d,并且给他添加子节点colorrect(外形)和collisionshape2d(碰撞层)

2.我们写脚本时用到的velocity(速度)是我们移动一个物体时最重要的参数,move_and_collide()和move_and_slide()就是根据velocity的参数进行相应的移动。

我个人之前只学过c语言和python的一点皮毛,对游戏引擎一直是想要了解并且去实践,但碍于学业和各种事情到现在才有时间和精力去搞这些,实际体验下来也确实非常有意思,自己也开始对接下来要做的项目有点想法了

相关推荐
kyle~3 小时前
Godot开源游戏引擎
开源·游戏引擎·godot
郝学胜-神的一滴1 天前
[简化版 GAMES 101] 计算机图形学 13:从光栅化到着色——赋予三维像素光影灵魂
c++·计算机视觉·unity·godot·图形渲染·opengl·unreal
Zwarwolf2 天前
Godot零散知识点项目汇总
游戏引擎·godot
caimouse4 天前
Godot Engine 最新版官方文档(简体中文完整翻译 & 精简梳理)
游戏引擎·godot
郝学胜-神的一滴5 天前
中级OpenGL教程 009:用环境光告别模型死黑
前端·c++·unity·godot·图形渲染·opengl·unreal
张学徒5 天前
Godot 4.x 中导入Excel文件的最简单的方式
游戏·godot·gdscript·游戏开发
caimouse6 天前
Godot 引擎官方常见问题(FAQ)整理
游戏引擎·godot
caimouse7 天前
Godot 4.7 内嵌 C# 模块切换到 .NET 9.0 编译指南
c#·.net·godot
郝学胜-神的一滴8 天前
[简化版 GAMES 101] 计算机图形学 12:可见性与 Z‑Buffer 深度缓存
unity·godot·图形渲染·three.js·opengl·unreal