我正在关注FriendlyCosmonaut的 GameMaker Studio 2 游戏教程,它牺牲了可读性以便更好地理解,我并不介意,但我被困在视频的四个项目符号部分。我只是不明白。
因此,它基本上迭代并将 i 乘以 90,从而为 lengthdir_x 和 lengthdir_y 函数提供所需的角度,该函数返回所需的组件以在正确的方向上初始化子弹。
它在其他情况下(two_bullets、three_bullets)运行良好,但不适用于本教程的four_bullets 和star_bullets 部分。
我让它看起来工作的唯一方法是迭代 5 次而不是 4 次。它看起来完全符合我的需要,但在我看来它不应该工作。
这是我认为我在 (case powerups.four_bullets & case powerups.star_bullets) 有问题的文件:
///@description create_bullet
///@arg direction
///@arg speed
///@arg faction
///@arg gun_type*
var _dir = argument[0];
var _spd = argument[1];
var _fac = argument[2];
var _gun_type = -1;
if(argument_count > 3) _gun_type = argument[3];
switch(_gun_type){
case powerups.two_bullets:
var _sep = 12;
var inst = instance_create_layer(
x+ lengthdir_x(_sep, _dir+90),
y+lengthdir_y(_sep, _dir+90),
"Instances", obj_bullet
);
initialize_bullet(_dir, _spd, _fac, inst)
var inst = instance_create_layer(
x + lengthdir_x(_sep, _dir-90),
y+lengthdir_y(_sep, _dir-90),
"Instances", obj_bullet
);
initialize_bullet(_dir, _spd, _fac, inst)
break;
case powerups.three_bullets:
var inst = instance_create_layer(
x,
y,
"Instances", obj_bullet
);
initialize_bullet(_dir, _spd, _fac, inst)
var _sep = 12;
var inst = instance_create_layer(
x + lengthdir_x(_sep, _dir+90),
y + lengthdir_y(_sep, _dir+90),
"Instances", obj_bullet
);
initialize_bullet(_dir, _spd, _fac, inst)
var inst = instance_create_layer(
x + lengthdir_x(_sep, _dir-90),
y + lengthdir_y(_sep, _dir-90),
"Instances", obj_bullet
);
initialize_bullet(_dir, _spd, _fac, inst)
break;
case powerups.four_bullets:
var _sep = 7;
var bullet_angle;
var i = 0; repeat(4){
bullet_angle = _dir + (i * 90);
show_debug_message("bullet_angle:" + string(bullet_angle));
show_debug_message("_dir:" + string(_dir));
show_debug_message("i:" + string(i));
var inst = instance_create_layer(
x + lengthdir_x(_sep, bullet_angle),
y + lengthdir_y(_sep, bullet_angle),
"Instances", obj_bullet
);
initialize_bullet(bullet_angle, _spd, _fac, inst)
i++;
}
break;
case powerups.star_bullets:
var _sep = 7;
var bullet_angle;
var i = 0; repeat(8){
bullet_angle = _dir + (i*45);
var inst = instance_create_layer(
x+ lengthdir_x(_sep, bullet_angle),
y+lengthdir_y(_sep, bullet_angle),
"Instances", obj_bullet
);
initialize_bullet(bullet_angle, _spd, _fac, inst)
i++;
}
break;
case powerups.laser_bullets:
break;
default:
var inst = instance_create_layer(x,y, "Instances", obj_bullet);
initialize_bullet(_dir, _spd, _fac, inst)
break;
}
inst.direction = image_angle;
这些图像有 4 次迭代,而不是 5 次。
子弹飞离船舶原点的屏幕截图。但是应该去 270° 的子弹反而会去 0°,或者看起来是这样。
控制台输出