Skocz do zawartości

Rekomendowane odpowiedzi

Opublikowano

Mam dwa obiekty, jeden dziedziczy po drugim i rozszerza funkcjonalność pierwszego, ewentualnie nadpisuje własnym kodem.

 

Obiekt obj_Parent w step event:

GML
if (keyboard_check_pressed(vk_enter))

show_message("Parent message enter");

 

 

if (keyboard_check_pressed(ord('W')))

show_message("Parent message W");

Obiekt obj_Child w step event:

GML
event_inherited();

 

if (keyboard_check_pressed(vk_enter))

show_message("Child message enter");

 

if (keyboard_check_pressed(vk_space))

show_message("Child message space");

 

Czy da się zrobić tak, żeby obj_Child mógł po wciśnięciu "W" wywołać to co ma obj_Parent pod tym przyciskiem; po wciśnięciu "Enter" wywołać to co jest w obj_Child, a co też istniało w obj_Parent; po wciśnięciu spacji wywołać to co obj_Child ma do tego przypisane? Być może komuś więcej wyjaśni jak zapiszę to w innym kodzie

class obj_Parent
{
    public virtual string pressedKeyEnter()
    {
        return "Parent keyEnter";
    }
    public string pressedKeyW()
    {
        return "Parent keyW";
    }
}

class obj_Child : obj_Parent
{
    public override string pressedKeyEnter()
    {
        return "Child keyEnter";
    }
    public string pressedKeySpace()
    {
        return "Child keySpace";
    }
}

...

obj_Parent.pressedKeySpace() -> zwraca "Child keySpace"
obj_Parent.pressedKeyW() -> zwraca "Parent keyW"
obj_Parent.pressedKeyEnter() -> zwraca "Child keyEnter"

 

W GMLu jest ten problem, że to wspólne " if (keyboard_check_pressed(vk_enter)) " bierze tylko z obj_Parent. Mam nadzieję, że ktoś zrozumie o co mi chodzi :)

  • Administratorzy
Opublikowano

Musiałbyś kod po IF przenieść do eventyu "user defined" i wtedy byś nadpisywał ten event. Inaczej się niestety nie da. Zresztą, to co zaprezentowałeś w pseudokodzie nie jest poprawne względem GM. Poprawnie byłoby tak (chodzi mi o kod GML który dałeś):

 

class obj_Parent
{
    public void stepEvent()
    {
        if (keyboard_check_pressed(vk_enter))
            show_message("Parent message enter");

        if (keyboard_check_pressed(ord('W')))
            show_message("Parent message W");
    }
}

class obj_Child : obj_Parent
{
    public void stepEvent()
    {
        parent.stepEvent();

        if (keyboard_check_pressed(vk_enter))
            show_message("Child key  enter");

        if (keyboard_check_pressed(ord('W')))
            show_message("Child key W");
    }
}

 

 

Zatem moja propozycja w GML

 

GML
if (keyboard_check_pressed(vk_enter))

event_user(0);

 

 

if (keyboard_check_pressed(ord('W')))

event_user(1);

 

I odpowiednio w eventach user defined 0 i 1 odpowiedni kod :)

Opublikowano

Ok, dzięki Gnysek, będę w domu to sprawdzę, ale z tego co widzę, to chyba udało mi się przekazać to co miałem na myśli i otrzymam pożądany efekt.

Edit: Sprawdziłem i działa tak jak chciałem. Dzięki Gnysek jeszcze raz :)

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...