Skocz do zawartości

Konrad-GM

Użytkownicy
  • Postów

    2 728
  • Dołączył

  • Ostatnia wizyta

  • Wygrane w rankingu

    44

Odpowiedzi opublikowane przez Konrad-GM

  1. nie chodzi jak ma wyglądać, tylko jak go zrobić.

    Wiem tyle że trzeba to robić na x i y viewa używanego.

    Napisy itp. W evencie Draw ( Czy Draw HUD w game maker studio trzeba użyć ?)

    Tak, Draw GUI jest od rysowania HUDa i innych elementów niezależnych od zmian perspektywy ani pozycji 'kamery'. Zatem niezależnie od view_xview,view_yview, w evencie Draw GUI rysuje się pod X,Y przyjmując 0,0 jako lewy-górny róg ekranu.

     

    GML
    draw_text(5, 5, string(health));
  2. @EDIT:

    Gdyby ktoś szukał takiego rozwiązania to napisałem coś takiego(działa :D ):

    void gotoxy(int x, int y)
    {
    COORD c;
    c.X = x - 1;
    c.Y = y - 1;
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), c);
    }
    

    Nie lubię tego rozwiązania od twórców borlandowego "conio". Bo nie indeksuje pozycji kursora od '0', co dla języka C/C++/etc jest rzeczą naturalną i powszechnie stosowaną, odwrotną co do Pascalowego '1'.

  3. Ja tam polecam Eclipse z pluginami CDT.

    Eclipse moim zdaniem do C++ nijak się nie nadaje. Jest pamięciożerną kobyłą, można niekiedy się zniechęcić do niego. Code::Blocks (polecam nightly builds), tak jak Dev-C++, jest lekki i oba są zaopatrzone w kompilator MinGW (do C::B nightly builds trzeba ściągać osobno). Visual co prawda też po instalacji nie potrzebuje dodatkowego oprogramowania, ale chyba twórcy bardziej celują w technologię .NET i C# zatem różnice między Visual C# a Visual C++ są spore. :)

  4. Czy chodzi ci o to, że ja wymazuję obszar pamięci gdzie rezyduje tablica? Bo nie jestem pewny czy dobrze pomyślałem :) [/size][/i]

     

    EDIT - WIN:

     

    Udało mi się :) Zaczeło działać kiedy zmieniłem

    delete[] puTablica;
    puTablica = puNowaTablica;
    delete[] puNowaTablica;

    Na:

    	
    puTablica = NULL;
    delete[] puTablica;
    puTablica = puNowaTablica;
    puNowaTablica = NULL;
    delete[] puNowaTablica;

     

    Tak więc dzięki wszystkim :)

    puNowaTablica = NULL;
    delete[] puNowaTablica;

    Wywal to całkiem. O,o

     

    Usuwanie wskaźnika na 'nullptr' nie daje żadnego efektu. Więc ta część kodu w ogóle nie jest potrzebna.

  5. Przybrałeś zły sposób na iterowanie po danych w tablicy, konkretnie chodzi o: puTablica[uIndeks1 * uIndeks2]. Tak nie może być. :)

     

    Jeżeli chcesz użyć liniowej metody dostępu do adresu pamięci w postaci 2-wymiarowej tablicy blablabla, musisz daną pozycję Y pomnożyć przez "szerokość" tablicy aby wyznaczyć wiersz, i dodać "przejście" X po komórkach:

    puTablica[uIndeksY*muRozmiarX + uIndeksX]

     

    Proponuję zmienić konwencję kodowania, gdyż ciężko "to" się czyta... To taka moja luźna propozycja. :)

     

    Tak samo jak zasada ze zmiennymi 'n' (ilość), jak i 'i' (pozycja). Z X/Y-ami postępuje się podobnie. X-y podawaj na początku argumentów, Y jako drugi.

     

    #EDIT:

    Proponuję abyś jeszcze raz zbadał metodę cInt2dArray::ChangeRozmiar, możesz być niemile zaskoczony. Konkretnie chodzi o delete[] puNowaTablica;

  6. Cóż, zagrałem w każdą część, i przyznam że każdy epizod trzyma poziom :) Ciekawa historia, wciągająca fabuła. W najnowszej części Memories bardzo podoba mi się motyw z rysunkami. Podziwiam za pomysł, cała seria zdecydowanie zasługuje na 5/5 ;)

  7.  

    NAJNOWSZY GAMEPLAY Z TOBHAD [COOL]

    Mam nadzieję, że się spodoba, a jak nie to walcie uwagi swoje. :D

    Wszystko fajnie i wgl. Ale ogień który wydaje pocisk to chyba standardowy efekt GMa, może coś bardziej "rozpixelowanego" tam wstawić można? :P

  8. Źródła tej "biblioteki" są dostępne. Wykorzystuje WinAPI, którego dokumentację znajdziesz pod tym linkiem.

     

    Forum jest do wymiany swoich spostrzeżeń jak i wiedzy. Gdybyś miał z czymś problem, pisz na forum. W miarę możliwości nie tylko ja będę mógł Ci pomóc. ;)

     

    Polecam zapoznać się z takową funkcją: WriteConsoleOutput

  9. https://github.com/konrad92/libconsole Nie jest to jakoś szczególnie rozbudowana biblioteka - raczej zabawka.

     

    Możesz zmienić rozmiar konsoli poprzez:

    void ConsoleSize( unsigned short width, unsigned short height ) const
    {
        SMALL_RECT windowSize = {
            0, 0,
            width - 1,
            height - 1,
        };
    
        SetConsoleWindowInfo( stdOutputHandle, true, &windowSize );
        SetConsoleScreenBufferSize( stdOutputHandle, *((COORD*)&width) );
    
        // show/hide cursor
        CONSOLE_CURSOR_INFO curInfo = {
            100, !m_hideCursor
        };
    
        SetConsoleCursorInfo( stdOutputHandle, &curInfo );
    }

     

    A podział, obiekty i "okienka" to nic innego jak generowanie interfejsu przez wyjście. Np. żeby zmienić pozycję kursora:

    unsigned short x = 0, y = 0;
    SetConsoleCursorPosition( stdOutputHandle, *((COORD*)&x) );

     

    I nie zapomnij o jednym...

    HANDLE stdOutputHandle = GetStdHandle( STD_OUTPUT_HANDLE );

    Przed dokonywaniem zmian na konsoli potrzebujemy wskaźnika na jego wyjście ;p

  10. Mam nadzieję że wiesz co to znaczy LOD? Generuj teren "dynamicznie" - im dalsza część siatki terenu tym rozleglejsze plane'y. A modele stwórz w kilku poziomach LOD, i wywołaj rysowanie odpowiedniego np. względem odległości kamery od obiektu.

     

    Możesz też zainteresować się Ultimate3D.

    Fully automatic generation of levels of detail

  11. po czesci dobrze myslales - to zadziala tylko z konstruktorami bez parametrow, te z parametrami trzeba explicite wywolac w konstruktorze klasy dziedziczacej:

    class A

    {

    A(int v)

    {

    value = v;

    }

    int value;

    };

     

    class B : public A

    {

    B()

    {

    A(10);

    }

    };

    O Borze... :)

     

    class A
    {
    A(int v)
    {
    value = v;
    }
    int value;
    };
    
    class B : public A
    {
    B()
    : A(10)
    {
    }
    };

    Twój kod YXE tworzy nową instancję klasy A, sorry bro.

  12. Wstawiając jakąś grę na jakąkolwiek platformę ciesząc japę a później tylko narzekać - w sumie niewiele to zdziała. Nie ważne jaka by nie była ta gra, rzadkością jest "samoistne" wypłynięcie czegokolwiek. Nie jestem specem od marketingu (:)), ale chyba każdy wie że reklama to podstawa. :)

  13. Ok, rozwiązałem problem. Zmieniłem "createPattern>fillStyle>fillRect" na "drawImage". Już jest ok :)

     

    Dzięki temu: http://vaughnroyko.com/jsfiddle/nearest-neighbor.html

     

    presentViaDrawImage: function(canvas) {
        var ctx = canvas.getContext("2d");
    
        ctx.scale(canvas.width/this.width,
                  canvas.height/this.height);
    
        ctx.webkitImageSmoothingEnabled = 
        ctx.mozImageSmoothingEnabled =
        ctx.msImageSmoothingEnabled =
        ctx.oImageSmoothingEnabled =
        ctx.imageSmoothingEnabled = false;
    
        ctx.drawImage(this.canvas, 0, 0);
    }

  14. Joł joł,

     

    spotkał mnie pewien problem - a mianowicie z "wyłączeniem" interpolacji przy rysowaniu skalowanego elementu w przeglądarce Mozilla Firefox. Otóż aby osiągnąć styl rozpikselowania używam dwóch canvasów. Jeden ukryty, odpowiada za wstępne rysowanie a'la "backbuffer". Drugi zaś jest kilkakrotnie (4x) większy niż jego poprzednik. Aby skopiować zawartość pierwszego płótna, używam coś takiego:

    present: function(canvas, smooth){
        var ctx = canvas.getContext("2d");
    
        ctx.scale(canvas.width/this.width,
                  canvas.height/this.height);
    
        ctx.webkitImageSmoothingEnabled = 
        ctx.mozImageSmoothingEnabled =
        ctx.msImageSmoothingEnabled =
        ctx.oImageSmoothingEnabled =
        ctx.imageSmoothingEnabled = false;
    
        ctx.fillStyle = ctx.createPattern(this.canvas, 'no-repeat');
        ctx.fillRect(0, 0, this.width, this.height);
    }

    Gdzie:

    this - to obiekt który posiada zmienną "canvas", która z kolei służy do przechowywania ukrytego elementu canvas.

    canvas - to element canvas który jest tym "frontbufferem", naszym celem.

     

    W Chromie działa ok, ale Firefox skalując traktuje obrazek interpolacją. A to wygląda już tak:

     

    Chrome:

    cPbJDJt.png

     

    Firefox:

    7MGWlvH.png

     

    Czy znacie może jakieś efektywniejsze sposoby aby osiągnąć skalowanie przy braku interpolacji? (nearest neighbor) A może istnieje rozwiązanie tego problemu dopisując pewne części non-standard? Skalowanie ma się odbywać co klatka (30/60 fps). Także kopiowanie całości poprzez getImageData/putImageData odpada.

     

    Pozdrawiam,

    Konrad-GM

×
×
  • Dodaj nową pozycję...