Game Maker Studio中无法批量生成随机敌人的问题排查请求
问题排查与解决
给你列几个最可能的原因,挨个排查:
1. 用网格索引代替了像素坐标
你现在直接把网格单元格的索引i、j作为生成坐标,但instance_create_layer的前两个参数要求的是像素位置,不是网格格子的序号。比如你的网格每个格子是32px大小,得把网格坐标转成像素:
// 修改关卡对象的Create事件代码 for(var n = 1; n < 8; n++) { var i = irandom_range(1, grid_width-2); var j = irandom_range(1, grid_height-2); // 把tile_size替换成你实际的网格格子像素尺寸,比如32 instance_create_layer(i * tile_size, j * tile_size, "Instances", object_enemy); }
不转换的话,所有敌人都会挤在屏幕左上角极小的区域,叠在一起看起来就像只有1个。
2. 敌人生成后立刻走到同一路径起点
敌人Create事件里直接执行path_start(follow_path, ...),如果这个路径的起点是固定位置,所有敌人生成后会立刻移动到路径起点,最终叠成一团。可以先注释掉路径代码测试:
// 敌人对象Create事件临时注释路径代码 x_speed_ = 0; y_speed_ = 0; max_speed_ = 1.5; move_speed = 1; acceleration_ = .3; // path_start(follow_path, move_speed, continue_path, true);
如果这样能生成多个敌人,那就是路径导致的,需要给每个敌人设置不同的路径起点,或者随机化路径。
3. 变量i/j未局部化
你原来的代码里i和j没加var,如果全局范围内有同名变量,可能导致循环里的坐标被覆盖,所有敌人用同一个坐标生成。给i和j加上var改成局部变量,避免冲突。
额外检查点
- 确认
grid_width和grid_height的值是否正确,比如如果grid_width是2,irandom_range(1, grid_width-2)就变成irandom_range(1,0),会返回0,所有敌人坐标都一样。 - 检查"Instances"图层是否存在、有没有被隐藏,导致敌人生成了但看不到。
内容的提问来源于stack exchange,提问作者m.18
相关产品推荐
相关产品推荐

