Player schiesst nicht

  • GM 8
  • Player schiesst nicht

    Hallo

    Ich habe ein Problem, nämlich soll das Objekt in 2 Sekunden abständen auf eine sich bewegende Instanz schiessen. Allerdings nur, wenn diese weniger als 250 Pixel weit entfernt ist. Früher hat alles geklappt, doch nun schiesst er einfach nicht mehr.

    [hide='Object: obj_panzer']
    Sprite: panzer_einfach
    Solid: false
    Visible: true
    Depth: 0
    Persistent: false
    Parent:
    Mask: mask_panzer_einfach

    Create Event:

    execute code:

    selected = true;
    near = instance_nearest(x,y,feind_mask);
    alarm[1] = 2*room_speed;
    alarm[0] = 2*room_speed;
    alarm[2] = 3.5*room_speed;

    Alarm Event for alarm 0:

    execute code:

    var ID;
    if (instance_exists(feind_mask) and near.x < 125 and near.y < 125)
    {
    ID=instance_create(x,y,obj_bullet_panzer_einfach);
    with (ID)
    {
    motion_set(point_direction(x,y,near.x,near.y),20);
    }

    }

    alarm[0] = 2*room_speed;

    Alarm Event for alarm 1:

    execute code:

    near = instance_nearest(x,y,feind_mask);

    alarm[1] = 2.25*room_speed;

    Alarm Event for alarm 2:

    set variable selected to false
    Step Event:

    execute code:

    if (selected)
    {
    draw_sprite(mask_panzer_einfach,-1,x,y);
    screen_refresh();
    }

    Collision Event with object feind_mask:

    execute code:

    dir = point_direction(x,y,near.x,near.y);
    image_angle = dir;

    Mouse Event for Left Released:

    execute code:

    if (!selected)
    {
    selected = true;
    }
    else
    {
    selected = false;
    }

    [/hide]

    [hide='Bullet']Sprite: bullet_panzer_einfach
    Solid: false
    Visible: true
    Depth: 0
    Persistent: false
    Parent:
    Mask:

    Create Event:

    execute code:

    image_angle=obj_panzer_einfach.dir;

    Collision Event with object feind_mask:

    execute code:

    instance_destroy();

    [/hide]
    :thumbsup:
  • Was mir gleich an deinem Code auffällt, ist etwas im Alarm 0-Event des Panzers: Du frägst dort ab

    GML-Quellcode

    1. if (instance_exists(feind_mask) and near.x < 125 and near.y < 125)

    In deiner Fragestellung hast du ja aber beschrieben, dass du abfragen möchtest, ob sich der Feind im Umkreis von 250 Pixeln befindet. Deine Abfrage tut aber etwas ganz anderes. Du frägst ab, ob sich der feind innerhalb eines hypothetischen Quadrates mit der Seitenlänge 125, das in der oberen rechten Ecke des Spielbildschirms platziert ist, befindet. Vermutlich ist er das kaum und deswegen wird nicht geschossen. Die korrekte Abfrage, also eine, die abfrägt, ob sich der Feind im Radius von 250 Pixeln relativ zum Panzer ist, würde wie folgt lauten:

    GML-Quellcode

    1. if (instance_exists(feind_mask) and point_distance(x,y,near.x,near.y)<250)



    Außerdem möchte ich dich darauf hinweisen, dass wenn du, wie es momentan noch der Fall ist, die ID von near im Create-Event festlegst, sie auch dieselbe bleibt. Wenn sich die Gegner in der Zwischenzeit bewegen, könnte ja aber ein anderer in der Zwischenzeit dem Panzer näher gekommen sein als der ursprüngliche. Deswegen solltest du near erst im Alarm 0-Event selbst festlegen.