我正在做Breakout游戏,这是一个类似于Pong的游戏,球从球拍上反弹,你必须瞄准,才能击中砖块.当你击中砖块时,你得了一分,砖块就消失了.我的每块砖都是Area2D,因为我需要on_body_entered信号.

extends Area2D

func _on_body_entered(body):
    score += 1
    queue_free() 

当球击中砖块时,脚本运行,这正是我想要发生的.问题是砖块被击中后就消失了,球一直穿过它.我试图实现适当的碰撞,这样当砖块消失时,球就会反弹,类似于球击中球拍时的反弹(这是一个BeverterBody2D).

球也是一个健身器Body2D

extends CharacterBody2D

var speed: int = 6

func _ready():
    var target_position = Vector2(575, 645)
    var direction = global_position.direction_to(target_position)
    velocity = direction.normalized() * speed

func _physics_process(delta):
    var collision = move_and_collide(velocity)
    
    if collision != null:
        velocity = velocity.bounce(collision.get_normal())

根据这些信息,我如何在砖块上实现正确的逻辑,使球在消失时反弹?

推荐答案

队列空闲不是问题.move_and_collect不检测与区域的冲突.

为了保持你的球逻辑相同,我会做文档here中描述的相同的事情:

将您的Brick从Area2D更改为StaticBody2D.把你的_on_body_entered方法改成一个简单的hit方法:

func hit():
    score += 1
    queue_free() 

由于球已经检测到碰撞,他也能够与正在碰撞的物体互动.要做到这一点,你得到碰撞物体和判断,它有一个方法称为"击中".如果对象确实有函数,请在改变方向后调用它:

func _physics_process(delta):
    var collision = move_and_collide(velocity)

    if collision:
        velocity = velocity.bounce(collision.get_normal())
        if collision.get_collider().has_method("hit"):
            collision.get_collider().hit() 

现在你的Brick在与球碰撞时有和你的桨一样的行为,但在碰撞后也会被释放,因为它有一个击中功能,球可以呼叫.

Python相关问答推荐

Chatgpt API不断返回错误:404未能从API获取响应

如何使用scipy从频谱图中回归多个高斯峰?

理解Python的二分库:澄清bisect_left的使用

TARete错误:类型对象任务没有属性模型'

在Google Colab中设置Llama-2出现问题-加载判断点碎片时Cell-run失败

如何在python xsModel库中定义一个可选[December]字段,以产生受约束的SON模式

如何获取numpy数组的特定索引值?

如何在Python数据框架中加速序列的符号化

如何获得每个组的时间戳差异?

在Python argparse包中添加formatter_class MetavarTypeHelpFormatter时, - help不再工作""""

无法在Docker内部运行Python的Matlab SDK模块,但本地没有问题

如何并行化/加速并行numba代码?

名为__main__. py的Python模块在导入时不运行'

什么是合并两个embrame的最佳方法,其中一个有日期范围,另一个有日期没有任何共享列?

在极中解析带有数字和SI前缀的字符串

如何将数据帧中的timedelta转换为datetime

BeautifulSoup-Screper有时运行得很好,很健壮--但有时它失败了::可能这里需要一些更多的异常处理?

为什么后跟inplace方法的`.rename(Columns={';b';:';b';},Copy=False)`没有更新原始数据帧?

如何在Quarto中的标题页之前创建序言页

VSCode Pylance假阳性(?)对ImportError的react