0

私は、FriendlyCosmonaut によるGameMaker Studio 2 のこのゲーム チュートリアルに従っています。これは、私が本当に気にしない理解を深めるために読みやすさを犠牲にしていますが、ビデオの 4 つの箇条書きの部分で立ち往生しています。私はそれを理解していません。

したがって、基本的に反復して i に 90 を乗算し、弾丸を正しい方向に初期化するために必要なコンポーネントを返す lengthdir_x & lengthdir_y 関数に目的の角度を与えます。

他のケース (two_bullets、three_bullets) では正常に機能していますが、チュートリアルの four_bullets と star_bullets の部分では機能しません。

機能しているように見えるようにする唯一の方法は、4回ではなく5回反復することです。必要なものとまったく同じように見えますが、私の意見では機能しないはずです。

問題があると思われるファイルは次のとおりです (ケース powerups.four_bullets & ケース 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;

これらの画像は 5 回ではなく 4 回の繰り返しです。

弾丸が船の起点から離れて飛んでいるスクリーンショット。しかし、270° になるはずの弾丸が 0° になっているようです。

弾丸が船の起点から離れて飛んでいるスクリーンショット。 しかし、270° になるはずの弾丸が 0° になっているようです。

コンソール出力

コンソール出力

4

2 に答える 2