You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Godot中开发PONG:如何在屏幕高度中线两侧创建Paddle?

解决Godot PONG游戏中Paddle创建错误及屏幕尺寸获取问题

错误原因解析

  • 变量定义阶段调用get_viewport()会返回null:节点还未加入场景树时,无法获取视口实例,直接在变量初始化时写get_viewport().x/y就会触发"Invalid get index 'y' (on base: 'null instance')"错误。
  • 屏幕半尺寸变量初始化时机错误:screen_half_height、screen_half_width在变量定义时计算,此时screen_height/screen_width还未赋值,结果始终为0,导致绘制位置错误。

修正方案与完整代码

调整屏幕尺寸的获取时机,确保在节点就绪后再计算相关变量,同时补充右侧Paddle的绘制逻辑:

extends Node2D

# 屏幕尺寸相关变量,先不初始化
var screen_size
var screen_height
var screen_width 
var screen_half_height
var screen_half_width

# Paddle配置
var paddle_color = Color.WHITE
var paddle_size = Vector2(10.0, 100.0)
var paddle_half_height = paddle_size.y / 2.0
var paddle_padding = 10.0

func _ready():
    # 节点就绪后获取屏幕尺寸,计算半尺寸
    screen_size = get_viewport().size
    screen_width = screen_size.x
    screen_height = screen_size.y
    screen_half_height = screen_height / 2.0
    screen_half_width = screen_width / 2.0

func _draw():
    # 绘制中线参考圆
    draw_circle(Vector2(screen_half_width, screen_half_height), 10.0, Color.WHITE)
    
    # 左侧Paddle:距离左边缘padding,垂直居中
    draw_rect(
        Rect2(
            Vector2(paddle_padding, screen_half_height - paddle_half_height),
            paddle_size
        ), 
        paddle_color
    )
    
    # 右侧Paddle:距离右边缘padding,垂直居中(需要减去Paddle自身宽度)
    draw_rect(
        Rect2(
            Vector2(screen_width - paddle_padding - paddle_size.x, screen_half_height - paddle_half_height),
            paddle_size
        ), 
        paddle_color
    )

额外说明

如果窗口尺寸可能动态变化(比如玩家调整窗口大小),可以把屏幕尺寸的更新逻辑放到视口尺寸变化的信号回调中,确保尺寸始终准确:

func _ready():
    # 监听窗口 resize 事件
    get_viewport().connect("size_changed", self, "_on_viewport_resized")
    # 初始化一次尺寸
    _on_viewport_resized()

func _on_viewport_resized():
    screen_size = get_viewport().size
    screen_width = screen_size.x
    screen_height = screen_size.y
    screen_half_height = screen_height / 2.0
    screen_half_width = screen_width / 2.0
    # 尺寸变化后重新绘制
    queue_redraw()

内容的提问来源于stack exchange,提问作者Filipe Prazeres

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 03:22:37