游戏制造商GML双棒射击模拟控制器

时间:2017-05-23 18:54:09

标签: gml

我正在尝试制作双棒射击游戏,但我无法使用正确的模拟棒以正确的方向拍摄。这是我将武器放在播放器顶部并旋转的代码。这一切都很好,只需要知道如何获得正确的角度,并朝这个方向发射子弹。

     //set depth
    depth = -y + obj_player.y_off_set - 1;

    //analog left stick face direction
    var h_point = gamepad_axis_value(0, gp_axisrh);
    var v_point = gamepad_axis_value(0, gp_axisrv);

    if ((h_point != 0) || (v_point != 0))
    {
    var pdir = point_direction(0, 0, h_point, v_point);
    var dif = angle_difference(pdir, image_angle);
    image_angle += median(-20, dif, 20);
    }

    //flips gun when turning 
    if(gamepad_axis_value(0, gp_axisrh) < -0.5)
    {
    image_yscale = -1;
    }else if (gamepad_axis_value(0, gp_axisrh) > 0.5)
    {
    image_yscale = 1;
    }

//fireing
fire = gamepad_button_check_pressed(0, gp_shoulderr) && alarm[0] <= 0;


if(fire)
{

    var face = point_direction(0, 0, gp_axisrh, gp_axisrv);   

    var p = instance_create(x, y, obj_projectile);
    var xforce = lengthdir_x(20, face*90);
    var yforce = lengthdir_x(20, face*90);
    p.creator = id;
    with (p){

    physics_apply_impulse(x, y, xforce, yforce);

    }

1 个答案:

答案 0 :(得分:0)

因为这个问题已经有几个月了,我想你找到了问题的解决方案,但希望这个答案可以帮助其他人解决这个问题。

根据您提供的代码段,如果您从lengthdir_函数中删除 * 90 ,您的代码应该可以正常工作。

以下是我在游戏中编写的代码,用于使用正确的模拟摇杆进行360度射击(此代码位于Player对象的步骤事件中):

if (shooting) {
    bullet = instance_create(x, y, Bullet);

    with (bullet) {
        haxis = gamepad_axis_value(0, gp_axisrh);
        vaxis = gamepad_axis_value(0, gp_axisrv);
        dir = point_direction(0, 0, haxis, vaxis);

        physics_apply_impulse(x, y, lengthdir_x(50, gp_axisrh), lengthdir_y(50, dir));
    }
}

GameMaker社区论坛上的这个particular thread非常有用,因为我研究了如何在游戏中解决这个问题。