Pagina 1 di 1

GM: Studio 1 - Colpire i nemici nella schermata

Inviato: 01/09/2019, 16:41
da MagicFool64
Io ho uno script che genera i tuoni sulla posizione di 10 nemici casuali. L'attacco dovrebbe essere tipo che usando l'incantesimo, si generano 10 tuoni su 10 nemici casuali, ma lo script che tengo io funziona per tutti i nemici nella mappa, ma a me serve uno che funziona solo con quelli presenti nella view. Qualcuno mi può aiutare?
Ecco lo script:

Codice: Seleziona tutto

var count, so_far;
so_far = 0;
count = 10;
with(nemico) {
    if not place_meeting(x, y, tuono) and so_far < count {
        instance_create(x, y, tuono);
        so_far += 1;
    }
}

Re: GM: Studio 1 - Colpire i nemici nella schermata

Inviato: 02/09/2019, 10:38
da Vallo92
Come hai detto tu, devi controllare se i nemici si trovano nella tua view. Visto che la view può essere vista come un rettangolo, puoi controllare se bbox del nemico si trova all'interno del rettangolo della view:

Codice: Seleziona tutto

if (rectangle_in_rectangle(bbox_left, bbox_top, bbox_right, bbox_bottom, bview_xview[0], view_yview[0], view_xview[0] + view_wview[0], view_yview[0] + view_hview[0])) {
   // Ok il nemico si trova all'interno della view
}

Re: GM: Studio 1 - Colpire i nemici nella schermata

Inviato: 02/09/2019, 11:42
da MagicFool64
Vallo92 ha scritto:Come hai detto tu, devi controllare se i nemici si trovano nella tua view. Visto che la view può essere vista come un rettangolo, puoi controllare se bbox del nemico si trova all'interno del rettangolo della view:

Codice: Seleziona tutto

if (rectangle_in_rectangle(bbox_left, bbox_top, bbox_right, bbox_bottom, bview_xview[0], view_yview[0], view_xview[0] + view_wview[0], view_yview[0] + view_hview[0])) {
   // Ok il nemico si trova all'interno della view
}
Quindi questo script nello step del nemico, giusto? E tra { e } cosa devo scrivere?

Re: GM: Studio 1 - Colpire i nemici nella schermata

Inviato: 04/09/2019, 18:10
da Alv
Io di solito utilizzo questo script, che verifica se un oggetto è in schermo o no (lo chiamo "in_screen"):

Codice: Seleziona tutto

if (argument0.bbox_left<view_xview[0]+view_wview[0])
    if (argument0.bbox_right>=view_xview[0])
        if (argument0.bbox_top<view_yview[0]+view_hview[0])
            if (argument0.bbox_bottom>=view_yview[0])
                return true;
return false;
Il tuo codice diventerebbe così quindi:

Codice: Seleziona tutto

var count, so_far;
so_far = 0;
count = 10;
with(nemico) {
    if not place_meeting(x, y, tuono) and so_far < count and in_screen(id) {
        instance_create(x, y, tuono);
        so_far += 1;
    }
}

Re: GM: Studio 1 - Colpire i nemici nella schermata

Inviato: 04/09/2019, 21:05
da MagicFool64
Alv ha scritto:Io di solito utilizzo questo script, che verifica se un oggetto è in schermo o no (lo chiamo "in_screen"):

Codice: Seleziona tutto

if (argument0.bbox_left<view_xview[0]+view_wview[0])
    if (argument0.bbox_right>=view_xview[0])
        if (argument0.bbox_top<view_yview[0]+view_hview[0])
            if (argument0.bbox_bottom>=view_yview[0])
                return true;
return false;
Il tuo codice diventerebbe così quindi:

Codice: Seleziona tutto

var count, so_far;
so_far = 0;
count = 10;
with(nemico) {
    if not place_meeting(x, y, tuono) and so_far < count and in_screen(id) {
        instance_create(x, y, tuono);
        so_far += 1;
    }
}
Funziona, come posso ringraziarti?

Re: GM: Studio 1 - Colpire i nemici nella schermata

Inviato: 05/09/2019, 13:07
da Alv
MagicFool64 ha scritto:
Alv ha scritto:Io di solito utilizzo questo script, che verifica se un oggetto è in schermo o no (lo chiamo "in_screen"):

Codice: Seleziona tutto

if (argument0.bbox_left<view_xview[0]+view_wview[0])
    if (argument0.bbox_right>=view_xview[0])
        if (argument0.bbox_top<view_yview[0]+view_hview[0])
            if (argument0.bbox_bottom>=view_yview[0])
                return true;
return false;
Il tuo codice diventerebbe così quindi:

Codice: Seleziona tutto

var count, so_far;
so_far = 0;
count = 10;
with(nemico) {
    if not place_meeting(x, y, tuono) and so_far < count and in_screen(id) {
        instance_create(x, y, tuono);
        so_far += 1;
    }
}
Funziona, come posso ringraziarti?
Nessun problema! :cappa: