求助:如何将固定相机敌人生成适配移动相机(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
相关产品推荐
相关产品推荐

