Skocz do zawartości

H2S04

Użytkownicy
  • Postów

    47
  • Dołączył

  • Ostatnia wizyta

  • Wygrane w rankingu

    2

Odpowiedzi opublikowane przez H2S04

  1. Wszystko działa dobrze :/ jednak dalej jak staję obok broni, tak by zaliczyło kolizję to, teleportuje broń na postać... Dziwne...

     

     

    EDIT3: NIŻEJ;

    EDIT4: Spróbuję zamienić else na przełącznik... zobaczę jak to będzie działać.

    EDIT5: Na samym dnie :/

     

    EDIT1: Cholera zapomniałem edytować posta wyżej :o...

    EDIT2: A ch**a nie wygląda dobrze... Zebrałem broń, gdy nie posiadałem żadnej, więc powinien iść tylko debug:

    GML
    primweap Jest większe od 5 // 1 Początek

    primweap = 0; // 3 początek

    other.mag + mag <= maxmag

    // 3 koniec

    // 1 Koniec</span></span></span></span></span></span></span></span></span></span></span>

     

    A dodatkowo wykonuje to

    GML
    primweap Jest większe od 5 // 1 Początek

    primweap != 0; // 4 początek

    other.mag + mag <= maxmag

    Tworzenie nowej bronii

    //4 Koniec

    // 1 Koniec</span></span></span></span></span></span></span></span></span></span></span>

    Jeszcze to obadam zaraz...

     

     

     

     

    Próba1 :

    GML
    Resizing fullscreen window..

    Resizing swap chain..

    primweap Jest większe od 5 // 1 Początek

    primweap = 0; // 3 początek

    other.mag + mag <= maxmag

    // 3 koniec

    // 1 Koniec

    primweap Jest większe od 5 // 1 Początek

    primweap != 0; // 4 początek

    other.mag + mag <= maxmag

    Tworzenie nowej bronii

    //4 Koniec

    // 1 Koniec

    primweap Jest większe od 5 // 1 Początek

    primweap != 0; // 4 początek

    other.mag + mag <= maxmag

    Tworzenie nowej bronii

    //4 Koniec

    // 1 Koniec

    primweap Jest większe od 5 // 1 Początek

    primweap != 0; // 4 początek

    other.mag + mag <= maxmag

    Tworzenie nowej bronii

    //4 Koniec

    // 1 Koniec

    Attempting to set gamepadcount to 0

    ---------------------------------------------------------------

    minFPS, maxFPS, avgFPS

    -31, 1310, 363

    ---------------------------------------------------------------

    ---------------------------------------------------------------

    minFPS, maxFPS, avgFPS

    -31, 1310, 363

    ---------------------------------------------------------------

     

     

    C:\ProgramData/GameMakerStudio2/Cache/runtimes\runtime-2.0.7.110/windows/Runner.exe DONE (0)

    Igor complete.

    elapsed time 00:00:19.3177988s for command "C:\ProgramData/GameMakerStudio2/Cache/runtimes\runtime-2.0.7.110/bin/Igor.exe" -options="C:\Users\HieNa\AppData\Local\GameMakerStudio2\GMS2TEMP\build.bff" -- Windows Run started at 06/24/2017 07:49:15

    SUCCESS: Run Program Complete

     

    EDIT3: Tu cię mam gagatku. Zrobiłem myk, Podniosłem broń, wymusiłem nowy debug msg (że podniosę drugą broń), podlazłem wcisnąłem "E", nie wzięło broni, to dawaj drugi raz wymuszony debug msg i proszę, kod nie działa jak powinien :D Dzięki za dobrą wskazówkę, bo wcześniej tego nie znałem, a w gm już dłubałem wiele razy :). Teraz można pomyśleć jak to naprawić :), Tylko jak? haha dodać alarmy? W stepie jeżeli zmienna = true? Bo już sam nie wiem :D

    Próba 2:

    GML
    Resizing fullscreen window..

    Resizing swap chain..

    primweap Jest większe od 5 // 1 Początek

    primweap = 0; // 3 początek

    other.mag + mag <= maxmag

    // 3 koniec

    // 1 Koniec

    // Podniosłem jedną, będę podnosił drugą

    primweap Jest większe od 5 // 1 Początek

    primweap != 0; // 4 początek

    other.mag + mag <= maxmag

    Tworzenie nowej bronii

    //4 Koniec

    // 1 Koniec

    primweap Jest większe od 5 // 1 Początek

    primweap != 0; // 4 początek

    other.mag + mag <= maxmag

    Tworzenie nowej bronii

    //4 Koniec

    // 1 Koniec

    // Podniosłem jedną, będę podnosił drugą

    primweap Jest większe od 5 // 1 Początek

    primweap != 0; // 4 początek

    other.mag + mag <= maxmag

    Tworzenie nowej bronii

    //4 Koniec

    // 1 Koniec

    Attempting to set gamepadcount to 0

    ---------------------------------------------------------------

    minFPS, maxFPS, avgFPS

    -31, 1364, 347

    ---------------------------------------------------------------

    ---------------------------------------------------------------

    minFPS, maxFPS, avgFPS

    -31, 1364, 347

    ---------------------------------------------------------------

     

     

    C:\ProgramData/GameMakerStudio2/Cache/runtimes\runtime-2.0.7.110/windows/Runner.exe DONE (0)

    Igor complete.

    elapsed time 00:00:17.8518242s for command "C:\ProgramData/GameMakerStudio2/Cache/runtimes\runtime-2.0.7.110/bin/Igor.exe" -options="C:\Users\HieNa\AppData\Local\GameMakerStudio2\GMS2TEMP\build.bff" -- Windows Run started at 06/24/2017 08:02:18

    SUCCESS: Run Program Complete

    Kod: [Poprawiony, wywaliłem niepotrzebne instance_destroy(other);]

    GML
    if keyboard_check_pressed(ord("E")){

    if other.weap > 5{

    show_debug_message("primweap Jest większe od 5 // 1 Początek")

    if primweap = other.weap{

    show_debug_message("Jest = other.weap // 2 początek")

    if other.mag + global.weaponid[other.weap,5] <= global.weaponid[other.weap,6]{

    show_debug_message("other.mag + mag <= maxmag")

    global.weaponid[other.weap,5] += other.mag;

    other.mag = 0;

    } else {

    show_debug_message("other.mag + mag > maxmag")

    var a = global.weaponid[other.weap,6] - global.weaponid[other.weap,5];

    global.weaponid[other.weap,5] += a;

    other.mag -= a;

    }

    show_debug_message("// 2 koniec")

    } else {

    if primweap = 0{

    show_debug_message("primweap = 0; // 3 początek")

    primweap = other.weap;

    primammo = other.ammo;

    if other.mag + global.weaponid[other.weap,5] <= global.weaponid[other.weap,6]{

    show_debug_message("other.mag + mag <= maxmag")

    global.weaponid[other.weap,5] += other.mag;

    instance_destroy(other);

    } else {

    show_debug_message("other.mag + mag > maxmag")

    var a = global.weaponid[other.weap,6] - global.weaponid[other.weap,5]

    global.weaponid[other.weap,5] += a;

    instance_destroy(other);

    }

    show_debug_message("// 3 koniec")

    } else {

    show_debug_message("primweap != 0; // 4 początek")

    var oldammo, oldweap, oldweapinst;

    oldammo = primammo;

    oldweap = primweap;

    primweap = other.weap;

    primammo = other.ammo;

    if other.mag + global.weaponid[other.weap,5] <= global.weaponid[other.weap,6]{

    show_debug_message("other.mag + mag <= maxmag")

    global.weaponid[other.weap,5] += other.mag;

    instance_destroy(other);

    } else {

    show_debug_message("other.mag + mag > maxmag")

    var a = global.weaponid[other.weap,6] - global.weaponid[other.weap,5];

    global.weaponid[other.weap,5] += a;

    instance_destroy(other);

    }

    show_debug_message("Tworzenie nowej bronii")

    oldweapinst = instance_create_layer(x,y,"Instances",o_WeaponOld);

    oldweapinst.ammo = oldammo;

    oldweapinst.weap = oldweap;

    oldweapinst.mag = 0;

    show_debug_message("//4 Koniec")

    }

    }

    show_debug_message("// 1 Koniec")

    }

    }

     

     

     

     

     

    Napisałem nowy kod: (spoilery nie działają z [g ml] :/

    GML
    var a, b, cse;

    if keyboard_check_pressed(ord("E")){

    show_debug_message("//Sprawdzam czy nie jest pistoletem");

    if other.weap > 5{

    show_debug_message("//Sprawdzam czy bronie główne są takie same");

    if primweap = other.weap{

    show_debug_message("//Bronie główne są takie same");

    cse = 1;

    } else {

    show_debug_message("//Bronie główne są różne");

    show_debug_message("//Sprawdzam czy posiadam główną broń w EQ");

    if primweap = 0{

    show_debug_message("//Nie posiadam broni głównej");

    cse = 2;

    } else {

    show_debug_message("//Posiadam broń główną");

    cse = 3;

    }

     

    }

    }

     

     

    switch(cse){

    case 1:

    show_debug_message("//Sprawdzam Stan Amunicji");

    if other.mag + global.weaponid[other.weap,5] <= global.weaponid[other.weap,6]{

    show_debug_message("//Magazynków jest mniej, niż ilość maxymalna więc zabieram wszystko");

    global.weaponid[other.weap,5] += other.mag;

    other.mag = 0;

    } else {

    show_debug_message("//Magazynków jest więcej niż ilość maxymalna, więc sprawdzam ilę mogę wziąć");

    a = global.weaponid[other.weap,6] - global.weaponid[other.weap,5];

    global.weaponid[other.weap,5] += a;

    other.mag -= a;

    }

    show_debug_message("//Dodałem magazynki");

    break;

    /////////////////////////

    case 2:

    primweap = other.weap;

    primammo = other.ammo;

    if other.mag + global.weaponid[other.weap,5] <= global.weaponid[other.weap,6]{

    show_debug_message("//Magazynków jest mniej, niż ilość maxymalna więc zabieram wszystko");

    global.weaponid[other.weap,5] += other.mag;

    instance_destroy(other);

    } else {

    show_debug_message("//Magazynków jest więcej niż ilość maxymalna, więc sprawdzam ilę mogę wziąć");

    a = global.weaponid[other.weap,6] - global.weaponid[other.weap,5]

    global.weaponid[other.weap,5] += a;

    instance_destroy(other);

    }

    show_debug_message("//Podniosłem broń do pustego slotu.");

    break;

    /////////////////////////

    case 3:

    show_debug_message("//Zaczynam zamianę broni.")

    var oldammo, oldweap, oldweapinst;

    oldammo = primammo; show_debug_message("//Zapisuję starą ilość ammo");

    oldweap = primweap; show_debug_message("//Zapisuję stare id broni");

    primweap = other.weap; show_debug_message("//Zamieniam broń na nową broń");

    primammo = other.ammo; show_debug_message("//Zamieniam ammo na nową wartość ammo");

    show_debug_message("//Sprawdzam Stan Amunicji");

    if other.mag + global.weaponid[other.weap,5] <= global.weaponid[other.weap,6]{

    show_debug_message("//Magazynków jest mniej, niż ilość maxymalna więc zabieram wszystko");

    global.weaponid[other.weap,5] += other.mag;

    instance_destroy(other);

    } else {

    show_debug_message("//Magazynków jest więcej niż ilość maxymalna, więc sprawdzam ilę mogę wziąć");

    var a = global.weaponid[other.weap,6] - global.weaponid[other.weap,5];

    global.weaponid[other.weap,5] += a;

    instance_destroy(other);

    }

    show_debug_message("//Tworzenie nowej broni:")

    oldweapinst = instance_create_layer(x,y,"Instances",o_WeaponOld); show_debug_message("//Tworzę instancję przez zmienną");

    oldweapinst.ammo = oldammo; show_debug_message("//Dodaję do instancji starą amunicję");

    oldweapinst.weap = oldweap; show_debug_message("//Nadaję broni ID");

    oldweapinst.mag = 0; show_debug_message("//Ustalam ilość magazynków na 0");

    show_debug_message("//Koniec zamiany broni")

    break;

    /////////////////////////

    case 4: //

    break;

    /////////////////////////

    case 5:

     

    break;

    //////////////////////////

    }

    }

     

    Ale i to nie pomogło :/ Klops jest teraz taki, że Podniosłem broń nr1, wcisnąłem wymuszony debug msg, i starałem się podnieść drugą, nie udało się dalej wcisnąłem debug msg, i w tedy podniosłem broń, ale widzę po kodzie, że dwa razy wykonuje mi kod zmiany broni, coś jest nie tak i już nie wiem co :c

     

    GML
    Resizing fullscreen window..

    Resizing swap chain..

    //Sprawdzam czy nie jest pistoletem

    //Sprawdzam czy bronie główne są takie same

    //Bronie główne są różne

    //Sprawdzam czy posiadam główną broń w EQ

    //Nie posiadam broni głównej

    //Magazynków jest mniej, niż ilość maxymalna więc zabieram wszystko

    //Podniosłem broń do pustego slotu.

    // Podniosłem jedną, będę podnosił drugą

    //Sprawdzam czy nie jest pistoletem

    //Sprawdzam czy bronie główne są takie same

    //Bronie główne są różne

    //Sprawdzam czy posiadam główną broń w EQ

    //Posiadam broń główną

    //Zaczynam zamianę broni.

    //Zapisuję starą ilość ammo

    //Zapisuję stare id broni

    //Zamieniam broń na nową broń

    //Zamieniam ammo na nową wartość ammo

    //Sprawdzam Stan Amunicji

    //Magazynków jest mniej, niż ilość maxymalna więc zabieram wszystko

    //Tworzenie nowej broni:

    //Tworzę instancję przez zmienną

    //Dodaję do instancji starą amunicję

    //Nadaję broni ID

    //Ustalam ilość magazynków na 0

    //Koniec zamiany broni

    //Sprawdzam czy nie jest pistoletem

    //Sprawdzam czy bronie główne są takie same

    //Bronie główne są różne

    //Sprawdzam czy posiadam główną broń w EQ

    //Posiadam broń główną

    //Zaczynam zamianę broni.

    //Zapisuję starą ilość ammo

    //Zapisuję stare id broni

    //Zamieniam broń na nową broń

    //Zamieniam ammo na nową wartość ammo

    //Sprawdzam Stan Amunicji

    //Magazynków jest mniej, niż ilość maxymalna więc zabieram wszystko

    //Tworzenie nowej broni:

    //Tworzę instancję przez zmienną

    //Dodaję do instancji starą amunicję

    //Nadaję broni ID

    //Ustalam ilość magazynków na 0

    //Koniec zamiany broni

    // Podniosłem jedną, będę podnosił drugą

    //Sprawdzam czy nie jest pistoletem

    //Sprawdzam czy bronie główne są takie same

    //Bronie główne są różne

    //Sprawdzam czy posiadam główną broń w EQ

    //Posiadam broń główną

    //Zaczynam zamianę broni.

    //Zapisuję starą ilość ammo

    //Zapisuję stare id broni

    //Zamieniam broń na nową broń

    //Zamieniam ammo na nową wartość ammo

    //Sprawdzam Stan Amunicji

    //Magazynków jest mniej, niż ilość maxymalna więc zabieram wszystko

    //Tworzenie nowej broni:

    //Tworzę instancję przez zmienną

    //Dodaję do instancji starą amunicję

    //Nadaję broni ID

    //Ustalam ilość magazynków na 0

    //Koniec zamiany broni

    Attempting to set gamepadcount to 0

    ---------------------------------------------------------------

    minFPS, maxFPS, avgFPS

    -31, 1319, 420

    ---------------------------------------------------------------

    ---------------------------------------------------------------

    minFPS, maxFPS, avgFPS

    -31, 1319, 420

    ---------------------------------------------------------------

     

     

    C:\ProgramData/GameMakerStudio2/Cache/runtimes\runtime-2.0.7.110/windows/Runner.exe DONE (0)

    Igor complete.

    elapsed time 00:00:14.9509962s for command "C:\ProgramData/GameMakerStudio2/Cache/runtimes\runtime-2.0.7.110/bin/Igor.exe" -options="C:\Users\HieNa\AppData\Local\GameMakerStudio2\GMS2TEMP\build.bff" -- Windows Run started at 06/24/2017 11:08:41

    SUCCESS: Run Program Complete

  2. Mam problem z kodem zmiany broni. Po pierwszym kliknięciu "E" broń leżąca na ziemi zmienia x i y na x i y postaci, po drugim wciśnięciu "E" broń dopiero się zmienia... Jest to upierdliwe :/

     

    Collision Code with o_WeaponParent:

    GML
    if keyboard_check_pressed(ord("E")){

    if other.weap > 5{

    if primweap = other.weap{

    if other.mag + global.weaponid[other.weap,5] <= global.weaponid[other.weap,6]{

    global.weaponid[other.weap,5] += other.mag;

    other.mag = 0;

    } else {

    var a = global.weaponid[other.weap,6] - other.mag;

    global.weaponid[other.weap,5] += a;

    other.mag -= a;

    }

    } else {

    if primweap = 0{

    primweap = other.weap;

    primammo = other.ammo;

    if other.mag + global.weaponid[other.weap,5] <= global.weaponid[other.weap,6]{

    global.weaponid[other.weap,5] += other.mag;

    instance_destroy(other);

    } else {

    var a = global.weaponid[other.weap,6] - other.mag;

    global.weaponid[other.weap,5] += a;

    instance_destroy(other);

    }

    instance_destroy(other);

    } else {

    var oldammo, oldweap, oldweapinst;

    oldammo = primammo;

    oldweap = primweap;

    primweap = other.weap;

    primammo = other.ammo;

    if other.mag + global.weaponid[other.weap,5] <= global.weaponid[other.weap,6]{

    global.weaponid[other.weap,5] += other.mag;

    instance_destroy(other);

    } else {

    var a = global.weaponid[other.weap,6] - other.mag;

    global.weaponid[other.weap,5] += a;

    instance_destroy(other);

    }

    oldweapinst = instance_create_layer(x,y,"Instances",o_WeaponOld);

    oldweapinst.ammo = oldammo;

    oldweapinst.weap = oldweap;

    oldweapinst.mag = 0;

    instance_destroy(other);

    }

    }

    } else {

    if secweap = other.weap{

    if other.mag + global.weaponid[other.weap,5] <= global.weaponid[other.weap,6]{

    global.weaponid[other.weap,5] += other.mag;

    other.mag = 0;

    } else {

    var a = global.weaponid[other.weap,6] - other.mag;

    global.weaponid[other.weap,5] += a;

    other.mag -= a;

    }

    } else {

    if secweap = 0{

    secweap = other.weap;

    secammo = other.ammo;

    if other.mag + global.weaponid[other.weap,5] <= global.weaponid[other.weap,6]{

    global.weaponid[other.weap,5] += other.mag;

    instance_destroy(other);

    } else {

    var a = global.weaponid[other.weap,6] - other.mag;

    global.weaponid[other.weap,5] += a;

    instance_destroy(other);

    }

    instance_destroy(other);

    } else {

    var oldammo, oldweap, oldweapinst;

    oldammo = secammo;

    oldweap = secweap;

    secweap = other.weap;

    secammo = other.ammo;

    if other.mag + global.weaponid[other.weap,5] <= global.weaponid[other.weap,6]{

    global.weaponid[other.weap,5] += other.mag;

    instance_destroy(other);

    } else {

    var a = global.weaponid[other.weap,6] - other.mag;

    global.weaponid[other.weap,5] += a;

    instance_destroy(other);

    }

    oldweapinst = instance_create_layer(x,y,"Instances",o_WeaponOld);

    oldweapinst.ammo = oldammo;

    oldweapinst.weap = oldweap;

    oldweapinst.mag = 0;

    instance_destroy(other);

    }

    }

    }

    }

     

    //}

     

    /*

    global.weaponid[16,0] = "Pumpo"; // name

    global.weaponid[16,1] = 20; // dmg

    global.weaponid[16,2] = 40; // AP

    global.weaponid[16,3] = 10; // Ammo

    global.weaponid[16,4] = 10; // Max Ammo

    global.weaponid[16,5] = 0; // Mag

    global.weaponid[16,6] = 5; // Max mag

    global.weaponid[16,7] = 0; // empty mag

    global.weaponid[16,8] = sou_Pumpo; // sound

    global.weaponid[16,9] = room_speed*4; // reload time

    global.weaponid[16,10] = room_speed*1; // shoting time

    global.weaponid[16,11] = 0; // mag ammo

    ///////////////////////////////*/

     

    GML
    other.weap //jest to id broni jaką posiada objekt do losowania broni.

    primweap //zmienna broni głównej

    other.mag //zmienna ile jest magazynków przy broni.

    global.weaponid[other.weap,5] //posiadana ilość magazynków,

    global.weaponid[other.weap,6] //maxymalna ilość magazynków;

    other.ammo //posiadana amunicja przez obiekt

    other.weap > 5 //jeżeli nie jest to pistoletem, to przypisuje do slotu głównej broni

    oldammo //aktualnie posiadana amunicja do danej broni

    oldweap //id broni

    oldweapinst //nowa instancja broni

    primammo //amunicja do głównej broni</span></span>

     

    W postaci mam jeszcze zmienną, którą broń posiadam

    GML
    usedweap; // jest = 0(pistolety) lub 1(karabiny); to jest czy używam primweap czy secweap</span>
  3. Na przyszłość będę pamiętał o komentarzach do kodu. Kod pisałem ja :), broń to zmienna, nie instancja, później będę rysował po prostu dany sprite, czy to przeładowania czy po prostu chodzenia z bronią.

    GML
    other.weap //jest to id broni jaką posiada objekt do losowania broni.

    primweap //zmienna broni głównej

    other.mag //zmienna ile jest magazynków przy broni.

    global.weaponid[other.weap,5] //posiadana ilość magazynków,

    global.weaponid[other.weap,6] //maxymalna ilość magazynków;

    other.ammo //posiadana amunicja przez obiekt

    other.weap > 5 //jeżeli nie jest to pistoletem, to przypisuje do slotu głównej broni

    oldammo //aktualnie posiadana amunicja do danej broni

    oldweap //id broni

    oldweapinst //nowa instancja broni

    primammo //amunicja do głównej broni</span>

     

    W postaci mam jeszcze zmienną, którą broń posiadam

    GML
    usedweap; // jest = 0(pistolety) lub 1(karabiny); to jest czy używam primweap czy secweap
  4. Mam problem z kodem zmiany broni. Po pierwszym kliknięciu "E" broń leżąca na ziemi zmienia x i y na x i y postaci, po drugim wciśnięciu "E" broń dopiero się zmienia... Jest to upierdliwe :/

     

    Collision Code with o_WeaponParent:

    GML
    if keyboard_check_pressed(ord("E")){

    if other.weap > 5{

    if primweap = other.weap{

    if other.mag + global.weaponid[other.weap,5] <= global.weaponid[other.weap,6]{

    global.weaponid[other.weap,5] += other.mag;

    other.mag = 0;

    } else {

    var a = global.weaponid[other.weap,6] - other.mag;

    global.weaponid[other.weap,5] += a;

    other.mag -= a;

    }

    } else {

    if primweap = 0{

    primweap = other.weap;

    primammo = other.ammo;

    if other.mag + global.weaponid[other.weap,5] <= global.weaponid[other.weap,6]{

    global.weaponid[other.weap,5] += other.mag;

    instance_destroy(other);

    } else {

    var a = global.weaponid[other.weap,6] - other.mag;

    global.weaponid[other.weap,5] += a;

    instance_destroy(other);

    }

    instance_destroy(other);

    } else {

    var oldammo, oldweap, oldweapinst;

    oldammo = primammo;

    oldweap = primweap;

    primweap = other.weap;

    primammo = other.ammo;

    if other.mag + global.weaponid[other.weap,5] <= global.weaponid[other.weap,6]{

    global.weaponid[other.weap,5] += other.mag;

    instance_destroy(other);

    } else {

    var a = global.weaponid[other.weap,6] - other.mag;

    global.weaponid[other.weap,5] += a;

    instance_destroy(other);

    }

    oldweapinst = instance_create_layer(x,y,"Instances",o_WeaponOld);

    oldweapinst.ammo = oldammo;

    oldweapinst.weap = oldweap;

    oldweapinst.mag = 0;

    instance_destroy(other);

    }

    }

    } else {

    if secweap = other.weap{

    if other.mag + global.weaponid[other.weap,5] <= global.weaponid[other.weap,6]{

    global.weaponid[other.weap,5] += other.mag;

    other.mag = 0;

    } else {

    var a = global.weaponid[other.weap,6] - other.mag;

    global.weaponid[other.weap,5] += a;

    other.mag -= a;

    }

    } else {

    if secweap = 0{

    secweap = other.weap;

    secammo = other.ammo;

    if other.mag + global.weaponid[other.weap,5] <= global.weaponid[other.weap,6]{

    global.weaponid[other.weap,5] += other.mag;

    instance_destroy(other);

    } else {

    var a = global.weaponid[other.weap,6] - other.mag;

    global.weaponid[other.weap,5] += a;

    instance_destroy(other);

    }

    instance_destroy(other);

    } else {

    var oldammo, oldweap, oldweapinst;

    oldammo = secammo;

    oldweap = secweap;

    secweap = other.weap;

    secammo = other.ammo;

    if other.mag + global.weaponid[other.weap,5] <= global.weaponid[other.weap,6]{

    global.weaponid[other.weap,5] += other.mag;

    instance_destroy(other);

    } else {

    var a = global.weaponid[other.weap,6] - other.mag;

    global.weaponid[other.weap,5] += a;

    instance_destroy(other);

    }

    oldweapinst = instance_create_layer(x,y,"Instances",o_WeaponOld);

    oldweapinst.ammo = oldammo;

    oldweapinst.weap = oldweap;

    oldweapinst.mag = 0;

    instance_destroy(other);

    }

    }

    }

    }

     

    //}

     

    /*

    global.weaponid[16,0] = "Pumpo"; // name

    global.weaponid[16,1] = 20; // dmg

    global.weaponid[16,2] = 40; // AP

    global.weaponid[16,3] = 10; // Ammo

    global.weaponid[16,4] = 10; // Max Ammo

    global.weaponid[16,5] = 0; // Mag

    global.weaponid[16,6] = 5; // Max mag

    global.weaponid[16,7] = 0; // empty mag

    global.weaponid[16,8] = sou_Pumpo; // sound

    global.weaponid[16,9] = room_speed*4; // reload time

    global.weaponid[16,10] = room_speed*1; // shoting time

    global.weaponid[16,11] = 0; // mag ammo

    ///////////////////////////////*/

  5. Mam drobnostkę, dawno programowałem w GMS i do tego kupiłem sobie GMS2 (Studio dawał mi popalić, bo ciągle miał jakieś problemy z winem 10 u mnie :/ ) i coś robię źle ale tego nie widzę...

     

    Hmm, nie wiem, wszystko wygląda ok, ale chyba coś musiałem zje*ać :D

     

     

    EDIT: Dobra ja durny jestem jak pień... Nie wiem na cholerę mi potrzebne było with (o_WeaponParent)... Ehh ja to zawsze :D

     

    Błąd:

    GML
    //Pumpo

    _______________________________________

    ################################################################################

    ############

    FATAL ERROR in

    action number 1

    of Step Evento_WeaponChooser

    for object o_Player:

     

    Variable <unknown_object>.<unknown variable>(100023, -2147483648) not set before reading it.

    at gml_Object_o_Player_Collision_5aae0650_fffc_495c_88b1_5aa3451b403a (line 7) - if other.weap > 5 {

    ################################################################################

    ############

     

     

    Collision Event o_WeaponParent.

    GML

    /// @description Insert description here

    // You can write your code in this editor

    var oldweap;

     

    with (o_WeaponParent){

     

    if other.weap > 5 {

     

    if primweap = 0{

     

    primweap = other.weap;

    primammo = other.ammo;

    primmag = other.mag;

    instance_destroy(other);

     

    } else {

     

    oldweap = instance_create_layer(x,y,"Instances",o_WeaponOld);

    oldweap.weap = primweap;

    oldweap.ammo = primammo;

    oldweap.mag = 0;

     

    }

     

    }

     

    }

     

     

    /* //Wypisałem sobie na zaś trochę tego, już mam wypisane bronie jakie chciałem.

    global.weaponid[16,0] = "Pumpo"; // name

    global.weaponid[16,1] = 20; // dmg

    global.weaponid[16,2] = 40; // AP

    global.weaponid[16,3] = 10; // Ammo

    global.weaponid[16,4] = 10; // Max Ammo

    global.weaponid[16,5] = 0; // Mag

    global.weaponid[16,6] = 5; // Max mag

    global.weaponid[16,7] = 0; // empty mag

    global.weaponid[16,8] = sou_Pumpo; // sound

    global.weaponid[16,9] = room_speed*4; // reload time

    global.weaponid[16,10] = room_speed*1; // shoting time

    global.weaponid[16,11] = 0; // mag ammo

    ////////////////////////////////</span>

  6. Witam. Kupiłem GMS2 i jest tam nowy system kamery... Nie ma już viewów, tzn są ale nie ma już funkcji view_xview,yview,wview,hwiev... I teraz moje pytanie... Jak teraz zaprogramować dezaktywację regionalną? Muszę to zrobić, bo mam mapę całą w obiektach (Podziemia, które można kopać). Mam już upatrzony w necie system kamery, dzięki której mogę przybliżać i oddalać kamerę, i teraz potrzeba mi dezaktywować obiekty, które są poza kamerą... Mam mapę 9984x9984 pełną czarnych kratek 64x64, jest ich od cholery przez co nie jestem w stanie uruchomić gry...

     

     

    Objekt "o_Cam"

    Create:

    GML
    /// @description Insert description here

    // You can write your code in this editor

    camspeed = 30;

    //Build a camera at (0,0), with size 640x480, 0 degrees of angle, no target instance, instant-jupming hspeed and vspeed, with a 32 pixel border

    camera = camera_create_view(4992, 4992, 1920, 1080, 0, self, 30, 30, 1920, 1080);

    view_set_camera(0, camera);

    zoom_level = 1;

    //Get the starting view size to be used for interpolation later

    default_zoom_width = camera_get_view_width(view_camera[0]);

    default_zoom_height = camera_get_view_height(view_camera[0]);

    global.buildqueue = 0;

     

    depth = -100;

     

    Step:

    GML
    /// @description Insert description here

    // You can write your code in this editor

    if keyboard_check(vk_escape){

    game_end();

    }

     

     

     

     

    if keyboard_check(ord("W")){

    y -= camspeed;

    }

    if keyboard_check(ord("S")){

    y += camspeed

    }

    if keyboard_check(ord("A")){

    x -= camspeed;

    }

    if keyboard_check(ord("D")){

    x += camspeed;

    }

     

    if keyboard_check_pressed(ord("R")){

    person = instance_create_layer(mouse_x,mouse_y,"Instances",o_Person);

    person.sex = choose("Man","Woman");

    person.FatherNational = choose("Russian","English","Polish");

    person.MotherNational = choose("Russian","English","Polish","German");

    }

     

    //Move the zoom level based on mouse scrolling. Clamp the value so stuff doesn't get too silly.

    zoom_level = clamp(zoom_level + (((mouse_wheel_down() - mouse_wheel_up())) * 0.1), 0.1, 5);

     

    //Get current size

    var view_w = camera_get_view_width(view_camera[0]);

    var view_h = camera_get_view_height(view_camera[0]);

     

    //Set the rate of interpolation

    var rate = 0.2;

     

    //Get new sizes by interpolating current and target zoomed size

    var new_w = lerp(view_w, zoom_level * default_zoom_width, rate);

    var new_h = lerp(view_h, zoom_level * default_zoom_height, rate);

     

    //Apply the new size

    camera_set_view_size(view_camera[0], new_w, new_h);

     

    //Get the shift necessary to re-align the view.

    var shift_x = camera_get_view_x(view_camera[0]) - (new_w - view_w) * 0.5;

    var shift_y = camera_get_view_y(view_camera[0]) - (new_h - view_h) * 0.5;

     

    //Update the view position

    camera_set_view_pos(view_camera[0],shift_x, shift_y);

     

    camera_set_view_pos(camera,

    clamp( camera_get_view_x(camera), 0, room_width - camera_get_view_width(camera) ),

    clamp( camera_get_view_y(camera), 0, room_height - camera_get_view_height(camera) ));

     

    var xx, yy;

     

    if mouse_check_button(mb_middle){

    xx = mouse_x;

    yy = mouse_y;

     

    x = xx;

    y = yy;

    }

     

     

    instance_deactivate_region(view_xport[0] - 128, view_yport - 128, view_wport[0] + 256, view_hport[0] + 256 , false,true);

    instance_activate_region(view_xport[0] - 64, view_yport - 64, view_wport[0] + 128, view_hport[0] + 128, false);

     

    Room Start:

    GML
    /// @description Insert description here

    // You can write your code in this editor

    //Enable the use of views

    view_enabled = true;

     

    //Make view 0 visible

    view_set_visible(0, true);

     

    //Set the port bounds of view 0 to 640x480

    view_set_wport(0, 1920);

    view_set_hport(0, 1080);

     

    window_set_rectangle((display_get_width() - view_wport[0]) * 0.5, (display_get_height() - view_hport[0]) * 0.5, view_wport[0], view_hport[0]);

    surface_resize(application_surface,view_wport[0],view_hport[0]);

     

    window_set_fullscreen(true);

  7. Wiesz, że dopiero zacząłem pisać i mam tylko 3 zmienne globalne? Jakoś nigdy z tym nie miałem problemu, zazwyczaj GMS robił mi psikusy, kiedy kod był dobry a nie chciał działać :/ Poza tym nigdy nie miałem problemu z dużą ilością zmiennych globalnych... Myślę, że dalej GMS robi mi psikusa (jak zawsze z resztą) i kod który powinien działać po prostu działać nie chce, chyba trzeba kupić GMS a nie jechać na darmowym :/

  8. Mam problem z kodem... Otóż po wejściu na torbę albo na plecak, zamiast usunąć plecak lub torbę usuwa mi bohatera... Dawno nie programowałem w game maker ale chyba wszystko napisałem dobrze.

     

    GML
    if place_meeting(x,y,o_bpack){

    if global.backpack = false{

    if global.bag = true{

    if keyboard_check_pressed(ord("B")){

    global.bag = false;

    global.backpack = true;

    with(other){

    instance_destroy();

    }

    instance_create(x,y,o_bpack);

    }

    } else {

    global.backpack = true;

    with(other)

    {

    instance_destroy();

    }

    }

    }

    }

     

    if place_meeting(x,y,o_bag){

    if global.bag = false{

    if global.backpack = true{

    if keyboard_check_pressed(ord("B")){

    global.backpack = false;

    global.bag = true;

    with(other){

    instance_destroy();

    }

    instance_create(x,y,o_bpack);

    }

    } else {

    global.bag = true;

    with(other)

    {

    instance_destroy();

    }

    }

    }

    }

  9. Jeżeli się nie mylę chodzi o to, że operację -1 dla amunicji (i wszystkie inne też) robisz na zmiennej ammo (podobnie z mag). Natomiast co step aktualizujesz wszystkie zmienne (ammo itp.) danymi z tablicy weapon[x,y] utworzonymi na początku - a tam zawsze masz 15.

     

    wywalenie ze stepu linijek:

     

    GML
    weaponn = 0;

    ammo = weapon[weaponn,1];

    maxammo = weapon[weaponn,2];

    mag = weapon[weaponn,3];

    maxmag = weapon[weaponn,4];

    shottime = weapon[weaponn,5];

    reloadtime = weapon[weaponn,6];

    mindmg = weapon[weaponn,7];

    maxdmg = weapon[weaponn,8];

    weaponname = weapon[weaponn,9];

     

    chyba rozwiąże problem. Musisz tylko dać te linijki np. w create albo jakoś wywołać, ale tylko raz na początku (na końcu postu sugeruję też inne rozwiązanie).

     

     

    Oczywiście, gdy dodasz nową broń to przy ich zmienianiu musisz pamiętać żeby zaktualizować to co trzymasz w tablicy. Bo inaczej zmiana broni będzie przywracać pociski i magazynki.

     

    Ja bym sobie napisał dwa skrypty: pobierz_bron(tu_numer_broni) i aktualizuj_bron(tu_numer_broni). I przy zmianie np. z 1 na 2 dajesz:

     

     

    GML
    aktualizuj_bron(1)

    pobierz_bron(2)

     

    Możesz też mieć oczywiście jeden skrypt zmien_bron(stara_bron,nowa_bron), ale może wczytywanie danych określonej broni gdzieś Ci się przyda? Może planujesz np. sklep (ale wtedy tablica weapon raczej powinna być globalna).

     

    Ponadto ja bym też cały kod odpowiedzialny za utworzenie statystyk broni (czyli całą tablicę weapon) dał w innym obiekcie na początku gry a nie w create obiektu gracza.

     

    Zaraz sprawdzę jak coś edytuję... Dziwne jest to że w stepie wszystko działało w innych projektach :/ Nie na darmo też mam zmienną "weaponn" W niej będę zmieniał wartoś "x" tablicy :D

     

  10. Problem wygląda następująco i pierwszy raz coś nie chce działać :/ Zawsze problemów nie było... Przy strzale odejmuje wartość ammo o jeden i w tym przypadku jest 14 ale zaraz zmienia się na 15 ;o skąd i jak?

     

     

    GML
    Information about object: o_player

    Sprite: s_playerpistol

    Solid: false

    Visible: true

    Depth: 0

    Persistent: false

    Parent:

    Children:

    Mask:

     

    No Physics Object

    Create Event:

     

    execute code:

     

    instance_create(x,y,o_playerlegs);

    move = false;

    sprint = false;

    cshot = true;

    reload = false;

    lspeed = 0;

    mspeed = 4;

     

    ammo = 0;

    maxammo = 0;

    mag = 0;

    maxmag = 0;

    shottime = 0;

    reloadtime = 0;

    mindmg = 0;

    maxdmg =0;

    weaponname = 0;

     

     

    weapon[0,0] = 1;

    weapon[0,1] = 15; // ammo

    weapon[0,2] = 15; // max ammo

    weapon[0,3] = 1; // mag

    weapon[0,4] = 5; // max mag

    weapon[0,5] = 15;// shoot time

    weapon[0,6] = 60; // reload time

    weapon[0,7] = 5; // min dmg

    weapon[0,8] = 15; // max dmg

    weapon[0,9] = "Glock";

     

    Alarm Event for alarm 0:

     

    execute code:

     

    realod = false;

    cshoot = true;

    ammo = maxammo;

    mag -= 1;

     

    Alarm Event for alarm 1:

     

    execute code:

     

    cshot = true;

     

    Step Event:

     

    execute code:

     

    image_angle = direction;

    direction = point_direction(x,y,mouse_x,mouse_y);

     

    weaponn = 0;

    ammo = weapon[weaponn,1];

    maxammo = weapon[weaponn,2];

    mag = weapon[weaponn,3];

    maxmag = weapon[weaponn,4];

    shottime = weapon[weaponn,5];

    reloadtime = weapon[weaponn,6];

    mindmg = weapon[weaponn,7];

    maxdmg = weapon[weaponn,8];

    weaponname = weapon[weaponn,9];

     

    dmg = round(random_range(mindmg,maxdmg));

     

    if keyboard_check_pressed(ord("R")){

    if mag > 0{

    if ammo < maxammo{

    if reload = false{

    alarm[0] = realodtime;

    reload = true;

    cshoot = false;

    }

    }

    }

    }

     

    if mouse_check_button(mb_left){

    if cshot = true && reload = false{

    if ammo > 0{

    ammo -= 1;

    cshot = false;

    alarm[1] = shottime;

    }

    }

    }

     

     

     

    if keyboard_check(vk_shift){

    sprint = true;

    } else {

    sprint = false;

    }

     

    if sprint = true{

    mspeed = 6;

    } else {

    mspeed = 4;

    }

     

    if keyboard_check(ord("W")) or keyboard_check(ord("S")) or keyboard_check(ord("A")) or keyboard_check(ord("D")){

    move = true;

    } else {

    move = false;

    }

    if move = true{

    if sprint = false{

    lspeed = 0.5;

    } else {

    lspeed = 0.8;

    }

    } else {

    lspeed = 0;

    }

     

    if keyboard_check(ord("W")) && place_free(x,y-mspeed){

    y -= mspeed;

    }

    if keyboard_check(ord("S")) && place_free(x,y+mspeed){

    y += mspeed;

    }

    if keyboard_check(ord("A")) && place_free(x-mspeed,y){

    x -= mspeed;

    }

    if keyboard_check(ord("D")) && place_free(x+mspeed,y){

    x += mspeed;

    }

     

    Draw Event:

     

    execute code:

     

    draw_self();

     

     

     

     

    // pistol bullet

    draw_set_color(c_green);

    draw_line(x,y,x + lengthdir_x(50,direction-20) ,y + lengthdir_y(50,direction-20));

    draw_set_color(c_white);

     

     

    //// laser

    draw_set_color(c_red);

    draw_line(x + lengthdir_x(50,direction-20) ,y + lengthdir_y(50,direction-20),x + lengthdir_x(500,direction) ,y + lengthdir_y(500,direction));

    draw_set_color(c_white);

     

    /*

    // rifle bullet

    draw_set_color(c_green);

    draw_line(x,y,x + lengthdir_x(80,direction-14) ,y + lengthdir_y(80,direction-14));

    draw_set_color(c_white);

     

    draw_set_color(c_red);

    draw_line(x + lengthdir_x(80,direction-14) ,y + lengthdir_y(80,direction-14),x + lengthdir_x(500,direction-1) ,y + lengthdir_y(500,direction-1));

    draw_set_color(c_white);

     

     

     

    Draw GUI Event:

     

    execute code:

     

    draw_text(0,0,ammo)

    draw_text(64,0,mag)

    draw_text(128,0,weaponname)

    /*

    weapon = 0;

    ammo = weapon[weapon,1];

    maxammo = weapon[weapon,2];

    mag = weapon[weapon,3];

    maxmag = weapon[weapon,4];

    shottime = weapon[weapon,5];

    reloadtime = weapon[weapon,6];

    mindmg = weapon[weapon,7];

    maxdmg = weapon[weapon,8];

    weaponname = weapon[weapon,9];

  11. Mam problem z zbieraczką, która ma pojechać do obiektu o_ore1/2/3. Napisałem skrypt ruchu lecz nie działa, stoi ona w miejscu i nie chce jechać, a mp_potential_step nie działa jak bym chciał. Chciał bym jeszcze dowiedzieć się jak ta zbieraczka ma wrócić do budynku z którego wyjechała. Każdy budynek ma własny "index" który później jest nadawany też stworzonej zbieraczce. Jeśli budynek ma index = 0; to zbieraczka, którą stworzę w tym budynku też będzie miała index = 0; Oraz Type = Type budynku. Z typem chodzi o to jaki ma zbierać surowiec, jak type = 0 to jedzie do o_ore1. Oczywiście zbieraczka po dojechaniu do budynku ma się zniszczyć, a później znowu utworzyć (Ale ten problem mam z głowy, bo dodałem alarm, który cały czas tworzy mi zbieraczki jeżeli jest jakaś w budynku). Tylko właśnie zatrzymałem się na tym path finding'u :/

     

    EDIT: Problem z wracaniem do budynku już wiem jak rozwiązać... Takie proste, że o tym nawet nie pomyślałem... Wystarczy stworzyć w create zmienną = x oraz drugą = y. i później wpisać zamiast x i y te zmienne... collision line zrobi niszczenie pojazdu oraz dodawanie surowców itd. :D

     

    EDIT2: Napisałem prosty kod... Jakoś na początku działał ale teraz już nie chce działać... Gdy podjedzie do obiektu o_ore1, pojazd się zatrzymuje, get zmienia się z false na true lecz alarm się nie wykonuje :o Chociaż poruszanie się tego pojazdu to dalej klapa << naprawione :/ Nie mogę się tego problemu z alarmem pozbyć. Czemu to cholerstwo nie chce się włączyć? :C

     

    EDIT3: Uporałem się z tym... 7h męki ale się udało... Jakieś bugi z alarmami :/ Zmieniłem alarm i wszystko było OK.

     

     

    kod:

    Zbieraczka

    Information about object: o_GraberCar
    Sprite: s_Grabore
    Solid: true
    Visible: true
    Depth: 0
    Persistent: false
    Parent: 
    Children: 
    Mask: 
    
    No Physics Object
    Create Event:
    
    execute code:
    
    image_speed = 0;
    index = 0; // index budynku(id)
    type = 0; // typ zbierania
    speed = 0;
    dir = direction;
    
    n = instance_nearest(x,y,o_ore1)
    n1 = instance_nearest(x,y,o_ore2)
    n2 = instance_nearest(x,y,o_ore3)
    
    //grid = mp_grid_create(0,0,room_height/3,room_width/322,32,32);
    path = path_add();
    //mp_grid_add_instances(grid,o_solid,1);
    //mp_grid_path(grid,path,x,y,n.x,n.y,1);
    mp_potential_path(path,n.x,n.y,1,0,solid)
    
    Step Event:
    
    execute code:
    
    image_angle = direction;
    
    if type = 0{
       if instance_exists(o_ore1){
           if distance_to_point(n.x,n.y) > 0{
               path_start(path,5,0,1);
           } else {
               path_end();
               speed = 0;
           }
       }
    }
    

    Pozdrawiam :).

     

    Kod po przebudowie:

    Information about object: o_GraberCar
    Sprite: s_Grabore
    Solid: true
    Visible: true
    Depth: 0
    Persistent: false
    Parent: 
    Children: 
    Mask: 
    
    No Physics Object
    Create Event:
    
    execute code:
    
    image_speed = 0;
    index = 0;
    type = 0;
    speed = 0;
    
    
    start = false;
    alarm[10] = room_speed*1;
    
    get = false;
    back = false;
    time = 0;
    startdir = 0
    
    yellow = 0;
    red = 0;
    blue = 0;
    
    startx = 0;
    starty = 0;
    
    
    
    
    Alarm Event for alarm 0:
    
    execute code:
    
    var am;
    am = choose(5,10,15,20,25,30,35,40,45,50)
    global.yellow += 1;
    
    if get = true{
       if type = 0{
           if time < 5{
               col = collision_line(x,y,x+lengthdir_x(64,direction),y+lengthdir_y(64,direction),o_ore
    1,false,false);
               col.amount -= am;
               yellow += am;
               time += 1;
               alarm[0] = room_speed*1;
           } else {
               time = 0;
               get = false;
               back = true;
           }
       }
    }
    
    Alarm Event for alarm 10:
    
    execute code:
    
    start = true;
    
    Alarm Event for alarm 11:
    
    execute code:
    
    global.yellow += yellow;
    global.blue += blue;
    global.red += red;
    bc = collision_line(x,y,x+128,y+128,o_Graber,false,false);
    bc.stack += 1;
    instance_destroy();
    
    Step Event:
    
    execute code:
    
    
    n1 = instance_nearest(x,y,o_ore2)
    n2 = instance_nearest(x,y,o_ore3)
    image_angle = direction;
    
    if start = true{
       if back = false{
    
       if type = 0{
           if instance_exists(o_ore1){
               n = instance_nearest(x,y,o_ore1)
               if distance_to_point(n.x,n.y) > 1 {
                   path = path_add();
                   mp_potential_path(path,n.x,n.y,4,4,false)
                   //mp_potential_step(n.x,n.y,4,o_solid);
                   path_start(path,4,0,1);
               } else {
                   path_end();
                   speed = 0;
                   direction = point_direction(x,y,n.x,n.y);
                   alarm[0] = 3;
                   get = true;
               }
           }
       }
    
    
    
       } else {
           if distance_to_point(startx,starty) > 0{
               mp_potential_step(startx,starty,4,false);
           } else {
               direction = startdir-180;
               speed = 0;
               start = false;
               alarm[11] = 3
           }
       }
    }
    
    Draw Event:
    
    execute code:
    
    draw_sprite_ext(sprite_index,type,x,y,1,1,direction,c_white,1);
    draw_line_colour(x,y,x+lengthdir_x(64,direction),y+lengthdir_y(64,direction),c_r
    ed,c_red);
    if start = true{
    draw_line_colour(x,y,n.y,n.y,c_green,c_green);
    }
    draw_text_colour(x,y+32,yellow,c_white,c_white,c_white,c_white,1);
    draw_text_colour(x,y+16,get,c_white,c_white,c_white,c_white,1);
    draw_text_colour(x,y,startdir,c_white,c_white,c_white,c_white,1);
    draw_text_colour(x,y-16,yellow,c_white,c_white,c_white,c_white,1);
    draw_text_colour(x,y-32,time,c_white,c_white,c_white,c_white,1);
    

  12. Mam problem z tworzeniem budynku... Zamiast jednego tworzy się ich od cholery. Liczba dochodzi do 20 :/

     

    Info z kodu budynku:

     

    Information about object: o_Gbuild
    Sprite: s_OreGraber
    Solid: false
    Visible: true
    Depth: 0
    Persistent: false
    Parent: 
    Children: 
    Mask: 
    
    No Physics Object
    Create Event:
    
    execute code:
    
    can = false;
    col = c_white;
    direction = 0;
    
    Step Event:
    
    execute code:
    
    image_angle = direction;
    x = mouse_x;
    y = mouse_y;
    if place_free(x,y){
       can = true;
       col = c_white;
    } else {
       can = false;
       col = c_red;
    }
    
    Mouse Event for Left Pressed:
    
    execute code:
    
    if can = true{
       instance_create(x,y,o_Gbuilding);
       instance_destroy();
    }
    
    Mouse Event for Glob Right Pressed:
    
    execute code:
    
    instance_destroy();
    
    Draw Event:
    
    execute code:
    
    draw_sprite_ext(sprite_index,0,x,y,1,1,direction,col,1);
    

     

    Po końcu alarmu ma stworzyć się ten obiekt:

     

    Information about object: o_Graber
    Sprite: s_OreGraber
    Solid: true
    Visible: true
    Depth: 0
    Persistent: false
    Parent: 
    Children: 
    Mask: 
    
    No Physics Object
    Create Event:
    
    execute code:
    
    direction = 0;
    type = 0;
    select = false;
    index = 0;
    x += choose(0,128,256,512)// kod by sprawdzić czy tworzy się więcej jak jeden.
    
    Step Event:
    
    execute code:
    
    if select = true{
       instance_create(x+128,y,o_Gtype);
    }
    
    Mouse Event for Left Pressed:
    
    execute code:
    
    select = not select;
    
    Mouse Event for Glob Right Pressed:
    
    execute code:
    
    select = false;
    
    Draw Event:
    
    execute code:
    
    if select = true{
       //draw_rectangle_colour(x-68,y-68,x+68,y+68,c_green,c_green,c_green,c_green,1);
       draw_sprite_ext(s_select,image_index,x,y,1,1,0,c_white,0.5)
       draw_sprite_ext(s_arrow,0,x+128,y,1,1,direction,c_black,0.5)
    
    
    }
    draw_sprite_ext(sprite_index,type,x-10,y+10,1,1,direction,c_black,0.2);
    draw_sprite_ext(sprite_index,type,x,y,1,1,direction,c_white,1);
    
    draw_text_colour(x,y,index,c_white,c_white,c_white,c_white,1);
    
    

     

    Pozdrawiam.

     

    EDIT:

     

    Dobra przeszukałem wszystko i problem znalazłem. Dopiero ogarnąłem to, że tworzyło mi się kilka ikonek budowy budynku, po kliknięciu wszystkie się aktywowały...

  13. Możęsz użyć draw_sprite_part lub draw_sprite_part_ext aby rysować tylko część sprite'a której Ci trzeba.

     

    Długość sprite ustaw na: "min(256,point_distance(x,y,x_celu,y_celu);"

    Min wybierze mniejszą wartość, jeżeli pocisk jest ponad 256 pikseli od celu narysuje całego sprite'a, a jeżeli jest bliżej tylko tyle ile trzeba.

     

    Zastanawiają mnie motywy tego, co robisz, ale nie będę krytykował.

    Jak Cię zastanawiają to już daję odpowiedź :) Jest to pocisk, chodzi tylko o wizualizację. Po co mi mały pixel lecący do celu. Jak dla mnie lepiej wygląda lecąca taka jak by smuga, lecz nie chcę by ta smuga przechodziła też przez zombiaka :) Robiłem wcześniej to na draw_line lecz efekt był mizerny :) Zabieram się do pracy nad tym i idę spać bo nie spałem od... wczoraj.. GameMaker jakoś mnie pochłonął :D

     

    PS. Coś nie idzie :/ draw_sprite_part_ext nie ma rotacji i jest to problem. Kle lecą poziomo zamiast pionowo do celu oraz zauważyłem, że nie bardzo to idzie. Idę spać bo już padam przed lapkiem. Może jak ktoś będzie miał chwilę to jakoś lepiej wytłumaczyć to się na przyszłość nauczę lecz teraz jestem wrakiem i niczego nie zrobię w GMie :D Pozdrawiam.

     

    GML (Draw)
    var ps;

    if instance_exists(o_Zombie){

    ps = min(256,point_distance(x,y,o_Zombie.x,o_Zombie.y));

    draw_set_blend_mode(bm_add);

    draw_sprite_part_ext(sprite_index,sprite_index,sprite_index,sprite_index,ps,sprite_index,x,y,1,2,c_yellow,0.5)

    draw_set_blend_mode(bm_normal);

    }

  14. Witam. Mam problem ze skalowaniem obiektu. Mój pocisk jest długości 256 pixeli i chciał bym go zmniejszyć do 0 gdy zbliży się do obiektu o_Zombie ponieważ punkt x na tym spricie jest równy 0 by podczas tworzenia nie przechodził przez postać.

     

    GML (End Step)
    var near;

    near = instance_nearest(x,y,o_Zombie)

     

    if collision_line(x,y,xprevious,yprevious,o_Zombie,0,1){

    near.hp -= global.dm[o_Player.wm];

    image_xscale = point_distance(x, y, o_Zombie.x, o_Zombie.y) / 256 // <<<<<<<< Próbowałem tak ale nie działa :/

    repeat(5 + random(30)) with (instance_create(near.x,near.y,o_bloodhit)){

    direction = (other.image_angle) - 15 + random(30)

    }

    instance_destroy();

    }

  15. Witajcie. Mam problem z dźwiękiem. Otóż nigdzie nie mam kodu, który by odtwarzał dźwięk prócz tego.

    GML
    if ms = 1 {

    if wm != 100{

    if ammo[wm] > 0{

    ammo[wm] -= 1;

    ms = 0;

    alarm[0] = cs;

    instance_create(x,y,o_Bulletp)

    sound_play(so_sf);

    sound_play(so[wm]); // wm jest to aktualnie posiadana bron. so jest soundem w przypadku wm = 0, so = so_glock

    } else {

    if soe = 0{

    sound_play(so_empty)

    soe = 1;

    alarm[10] = cs;

    }

    }

    } else {

    alarm[0] = cs;

    ms = 0;

    sp = 4;

    }

    }

     

    Problem wygląda następująco. Podczas wejścia do gry i włączeniu drugiego rooma (1 to menu) po załadowaniu "słychać strzały". Nie mogę dojść o co chodzi. Mam jeszcze drugi problem z dźwiękiem. Otóż gdy wybiorę opcję Uncompressed wszystko jest niby ok, a gdy wybiorę opcję Compressed dźwięk się nie odtwarza lub ma jakieś "loty" i pojawia się błąd.

    error opening mp3 file C:\Users\HieNa\AppData\Local\gm_ttt_99424\gm_ttt_52847\so_sf.mp3 - Podany alias jest ju? u?ywany w tej aplikacji. U?yj unikatowego aliasu

    Po wybraniu Compressed i zrobieniu instalki gry mam tylko 3 dźwięki z 9. Pozdrawiam.

     

    PS. Wyłączyłem opcję "Use New Audio Engine"

    PS2. Zrobiłem dźwięki od nowa i całkiem coś się już powaliło :/ Odtwarza tylko jeden dźwięk, dźwięk broni nr 11 (m4a1). nie ważne czy wezmę broń nr 0 czy broń nr 6. Zauważyłem, że odtwarza 1 dźwięk na liście.

     

    Dobra wymęczyłem to. Jest 6:44 a siedzę w GM:S już od 22. Mózg nie wyrabia i się zamotał. PS2 zostało rozwiązane. ( zmiena so = dźwięk zawierała sound_play()....... Tak nie zauważyłem tego przez 4 godziny. Lecz nie rozumiem dalej jednej rzeczy i chciał bym chociaż tego się dowiedzieć. Dlaczego pliki skompresowane nie działają jak powinny? Podczas strzelania dźwięk się "gubi" pojawia się po pojedynczym kliknięciu, a przy przytrzymaniu GlobalLPM po prostu odtworzy się może raz lub w ogóle. Przy plikach nie skompresowanych tego problemu nie ma ponieważ dźwięki są w pliku wykonywalnym. Pozdrawiam.

  16. GMLglobal.hp=max(0,global.hp)

     

    No dobra ale gdzie to wpisać. Bo dałem w Step i nie działa w create nie działa dalej to samo.

     

    EDIT:

    Dzięki tobie mnie olśniło... Wystarczyła dodatkowa zmienna.

    Create:

    GML
    minhp = 0

    Step:

    GML
    if global.hp <= minhp{

    global.hp = minhp;

    lc = c_black;

    }

  17. Problem wygląda dokładniej tak. W teście klikam na postać pasek życia schodzi. Jak zejdzie do 0 lecz wartość nadal spada czyli idzie na wartość minusową i tworzy pasek dalej.

     

    Create:

    GML
    Information about object: o_controller

    Sprite:

    Solid: false

    Visible: true

    Depth: 0

    Persistent: false

    Parent:

    Mask:

     

    No Physics Object

    Create Event:

     

    execute code:

     

    instance_create(50,50,o_Player)

    instance_create(50,50,o_Cam)

    lc = 0;

     

    global.hp = 300

     

    global.weapon[0] = 1;

    global.weapon[1] = 0;

     

     

     

    Step Event:

     

    execute code:

     

    if global.hp <= 300 {

    lc = c_green;

    }

    if global.hp <= 200 {

    lc = c_yellow;

    }

    if global.hp <= 100 {

    lc = c_red;

    }

    if global.hp <= 0 {

    global.hp = 0;

    }

     

    Draw GUI Event:

     

    execute code:

     

    draw_rectangle_colour(0,0,1024,30,c_gray,c_dkgray,c_gray,c_dkgray,0)

    draw_rectangle_colour(0,0,1024,30,c_black,c_black,c_black,c_black,1)

    draw_rectangle_colour(10,5,x+global.hp,25,lc,lc,lc,lc,0)

     

    "lc" to jest zmiana koloru względem poziomu życia. Po prostu jak życie się skończy nie chcę by wystawał kawałek życia poza box od lewej strony, by jakoś to wyglądało.

     

    f9wrtbF.png

×
×
  • Dodaj nową pozycję...