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

求助:如何将固定相机敌人生成适配移动相机(GDScript)

移动相机视野外敌人生成实现方案(GDScript)
  • 获取相机实时可视范围
    移动相机的视野会随位置动态变化,直接调用Camera2D的get_visible_rect()方法即可得到当前视口对应的世界空间矩形,该值会自动跟随相机位置更新:

    var camera = $Camera2D
    var visible_rect = camera.get_visible_rect()
    
  • 划定视野外的生成区域
    基于可视矩形向外设置缓冲区,避免敌人出现在视野边缘。可直接计算出上下左右四个方向的生成区域:

    # 生成缓冲区宽度,可根据游戏场景大小调整
    var spawn_buffer = 200
    
    # 四个方向的生成区域列表
    var spawn_areas = [
        # 上方视野外区域
        Rect2(visible_rect.x, visible_rect.y - spawn_buffer, visible_rect.width, spawn_buffer),
        # 下方视野外区域
        Rect2(visible_rect.x, visible_rect.y + visible_rect.height, visible_rect.width, spawn_buffer),
        # 左侧视野外区域
        Rect2(visible_rect.x - spawn_buffer, visible_rect.y, spawn_buffer, visible_rect.height),
        # 右侧视野外区域
        Rect2(visible_rect.x + visible_rect.width, visible_rect.y, spawn_buffer, visible_rect.height)
    ]
    
  • 随机生成敌人并校验距离
    从生成区域中随机选取位置,同时确保生成点与玩家保持足够距离,防止敌人突然出现在玩家附近:

    func spawn_enemy():
        var camera = $Camera2D
        var visible_rect = camera.get_visible_rect()
        var player = $Player
        var spawn_buffer = 200
        
        var spawn_areas = [
            Rect2(visible_rect.x, visible_rect.y - spawn_buffer, visible_rect.width, spawn_buffer),
            Rect2(visible_rect.x, visible_rect.y + visible_rect.height, visible_rect.width, spawn_buffer),
            Rect2(visible_rect.x - spawn_buffer, visible_rect.y, spawn_buffer, visible_rect.height),
            Rect2(visible_rect.x + visible_rect.width, visible_rect.y, spawn_buffer, visible_rect.height)
        ]
        
        # 随机选择一个生成区域
        var selected_area = spawn_areas[randi() % spawn_areas.size()]
        # 在区域内生成随机坐标
        var spawn_pos = Vector2(
            rand_range(selected_area.x, selected_area.x + selected_area.width),
            rand_range(selected_area.y, selected_area.y + selected_area.height)
        )
        
        # 确保生成点与玩家距离达标
        var min_distance = 300
        if spawn_pos.distance_to(player.global_position) >= min_distance:
            var enemy_scene = preload("res://Enemy.tscn")
            var enemy = enemy_scene.instance()
            enemy.global_position = spawn_pos
            add_child(enemy)
    
  • 控制生成频率
    用Timer节点控制生成间隔,避免短时间内生成大量敌人:

    func _ready():
        var spawn_timer = Timer.new()
        spawn_timer.wait_time = 4.0 # 每4秒触发一次生成逻辑
        spawn_timer.autostart = true
        spawn_timer.connect("timeout", self, "spawn_enemy")
        add_child(spawn_timer)
    

内容的提问来源于stack exchange,提问作者oliver james

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 11:40:52