Gothic Online Forums
Problem z klasami - Printable Version

+- Gothic Online Forums (https://archive.gothic-online.com)
+-- Forum: Community (https://archive.gothic-online.com/forum-18.html)
+--- Forum: Polish (Polski) (https://archive.gothic-online.com/forum-19.html)
+---- Forum: Pomoc (https://archive.gothic-online.com/forum-23.html)
+---- Thread: Problem z klasami (/thread-2156.html)



Problem z klasami - Magister - 07.08.2017

Dzień dobry!
Mam pewien problem. Mianowicie klasa u mnie nie działa tak, jak powinna działać. Jeśli przypiszę klasę do jakiejś zmiennej, to cały czas operuję przez zmienną na klasie, tak jakby była tablicą.
Dziękuję uprzejmie z góry za pomoc Smile

Code:
local fst;
local sec;
local thr;

class window
{
    config = {
        x = 0,
        y = 0,
        width = 0,
        height = 0,
        texture_name = "",
        enabled = false
    };
    
    objects = {
        texture = null,
        count = 0
    };

    dotestu = 0;
    
    constructor(x,y,width,height,texture_name)
    {
        dotestu++;
        config.x = x;
        config.y = y;
        config.width = width;
        config.height = height;
        config.texture_name = texture_name;
        
        objects.texture = Texture(x,y,width,height,texture_name);
    }
    
    function createText(text, x, y)
    {
        objects.count++;
        objects[objects.count] <- {};
        objects[objects.count].draw <- Draw(x + config.x, y + config.y,text);
        objects[objects.count].draw.setColor(255,255,255);
        objects[objects.count].draw.font = "FONT_OLD_10_WHITE_HI.TGA";
    }
    
    function test()
    {
        Chat.print(255,0,0,dotestu);
    }
    
    function show()
    {
        config.enabled = true;
        objects.texture.visible = true;
        
        if (objects.count > 0) {
            for (local i = 1; i <= objects.count; ++i) {
                objects[i].draw.visible = true;
            }
        }
    }
    
    function hide()
    {
        config.enabled = false;
        objects.texture.visible = false;
        
        if (objects.count > 0) {
            for (local i = 1; i <= objects.count; ++i) {
                objects[i].draw.visible = false;
            }
        }
    }
}

function onInit()
{    
    fst = window(0,0,5000,2000,"DLG_CONVERSATION.TGA");
    fst.createText("ABCD", 100, 100);
    fst.createText("BCDE", 100, 300);
    fst.createText("CDEF", 100, 500);
    fst.createText("DEFG", 100, 700);
    fst.test();
    
    sec = window(0,3000,5000,2000,"DLG_CONVERSATION.TGA");
    sec.createText("EFGH", 100, 100);
    sec.createText("FGHI", 100, 300);
    sec.test();
    
    thr = window(0,6000,5000,2000,"DLG_CONVERSATION.TGA");
    thr.createText("GHIJ", 100, 100);
    thr.createText("HIJK", 100, 300);
    thr.createText("XXXX", 100, 500);
    thr.test();
    
    fst.show();
    sec.show();
    thr.show();
    
    for (local i = 1; i <= thr.objects.count; ++i) {
        Chat.print(255,0,0,thr.objects[i].draw.text);
    }
}

addEventHandler("onInit", onInit);



RE: Problem z klasami - Bimbol - 07.08.2017

Bo twoje pola są statyczne. Jeśli masz pole, które jest tablicą lub tabelą i jest tak po prostu zdefiniowana w klasie to każda instancja klasy ma ten sam adres tych obiektów, więc de fakto operujesz na tych samych danych. Nie robi się tak, powinieneś config oznaczyć jako null i tworzyć tą tabele w konstruktorze, wtedy każdy obiekt będzie miał swoją własną instancję tej tabeli.


RE: Problem z klasami - Magister - 07.08.2017

Więc tak to działa. Dziękuję za pomoc serdecznie Smile