Skocz do zawartości

Nadpisanie "funkcji" w dziedziczeniu


hamtaren

Rekomendowane odpowiedzi

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 :)

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

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 :)

Odnośnik do komentarza
Udostępnij na innych stronach

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ę...