<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>quaddev.com</title>
	<atom:link href="http://quaddev.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://quaddev.com</link>
	<description>mój drugi dom</description>
	<lastBuildDate>Tue, 24 Aug 2010 22:35:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Hania</title>
		<link>http://quaddev.com/2010/07/16/hania/#utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=hania</link>
		<comments>http://quaddev.com/2010/07/16/hania/#comments</comments>
		<pubDate>Fri, 16 Jul 2010 00:10:00 +0000</pubDate>
		<dc:creator>d.evil</dc:creator>
				<category><![CDATA[ciekawostki]]></category>

		<guid isPermaLink="false">http://quaddev.com/?p=310</guid>
		<description><![CDATA[Od dziś jestem dumnym tatą:)]]></description>
			<content:encoded><![CDATA[<p>Od dziś jestem dumnym tatą:)<br />
<a href="http://quaddev.com/wp-content/uploads/2010/07/Hania-017.jpg"><img src="http://quaddev.com/wp-content/uploads/2010/07/Hania-017.jpg" alt="" title="Hania"  class="aligncenter size-full wp-image-311" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://quaddev.com/2010/07/16/hania/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Ubuntu 13.06 &#8211; Jebnięta Jaszczurka</title>
		<link>http://quaddev.com/2010/07/12/ubuntu-13-06-jebnieta-jaszczurka/#utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=ubuntu-13-06-jebnieta-jaszczurka</link>
		<comments>http://quaddev.com/2010/07/12/ubuntu-13-06-jebnieta-jaszczurka/#comments</comments>
		<pubDate>Mon, 12 Jul 2010 09:07:02 +0000</pubDate>
		<dc:creator>d.evil</dc:creator>
				<category><![CDATA[humor]]></category>

		<guid isPermaLink="false">http://quaddev.com/?p=304</guid>
		<description><![CDATA[Zamknęliśmy kolejną iterację SPA, zwała się zwyczajnie i nijako &#8211; beta2. Możliwe, że odejdziemy od tej nijakości nazewnictwa;) kurruk: tak się zastanawiałem już jakiś czas temu, tak ci powiem, czy nie nazywać jakoś bardziej z inwencja te iteracje techniczna dalej będzie jakaś beta3, ale może masz jakiś pomysł na czym możemy się poopierać, żeby nadać [...]]]></description>
			<content:encoded><![CDATA[<p>Zamknęliśmy kolejną iterację SPA, zwała się zwyczajnie i nijako &#8211; <em>beta2</em>. Możliwe, że odejdziemy od tej nijakości nazewnictwa;)</p>
<ul>
<li>
<strong>kurruk:</strong><br />
tak się zastanawiałem już jakiś czas temu, tak ci powiem, czy nie nazywać jakoś bardziej z inwencja te iteracje<br />
techniczna dalej będzie jakaś beta3, ale może masz jakiś pomysł na czym możemy się poopierać, żeby nadać im jakąś bardziej chwytliwa nazwę</li>
<li>
<strong>dvl:</strong><br />
chcesz jak ubuntu nazywać? gibki gibon, jebnięta jaszczurka, słitaśny struś, etc?</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://quaddev.com/2010/07/12/ubuntu-13-06-jebnieta-jaszczurka/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JavaZone Trailer: Java 4-ever</title>
		<link>http://quaddev.com/2010/06/25/javazone-trailer-java-4-ever/#utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=javazone-trailer-java-4-ever</link>
		<comments>http://quaddev.com/2010/06/25/javazone-trailer-java-4-ever/#comments</comments>
		<pubDate>Fri, 25 Jun 2010 19:06:24 +0000</pubDate>
		<dc:creator>d.evil</dc:creator>
				<category><![CDATA[ciekawostki]]></category>
		<category><![CDATA[humor]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[java 4-ever]]></category>
		<category><![CDATA[javazone]]></category>
		<category><![CDATA[trailer]]></category>

		<guid isPermaLink="false">http://quaddev.com/?p=294</guid>
		<description><![CDATA[Nie jestem fanbojem javy, ale nie mogłem się powstrzymać &#8211; autorzy dali czadu:)]]></description>
			<content:encoded><![CDATA[<p>Nie jestem fanbojem javy, ale nie mogłem się powstrzymać &#8211; autorzy dali czadu:)</p>
<p><object width="512" height="300"><param name="movie" value="http://www.youtube.com/v/KrfpnbGXL70&#038;hl=pl_PL&#038;fs=1&#038;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/KrfpnbGXL70&#038;hl=pl_PL&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="512" height="300"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://quaddev.com/2010/06/25/javazone-trailer-java-4-ever/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SFML tutorial &#8211; część 3 &#8211; obsługa zdarzeń</title>
		<link>http://quaddev.com/2010/06/19/sfml-tutorial-czesc-3-obsluga-zdarzen/#utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=sfml-tutorial-czesc-3-obsluga-zdarzen</link>
		<comments>http://quaddev.com/2010/06/19/sfml-tutorial-czesc-3-obsluga-zdarzen/#comments</comments>
		<pubDate>Sat, 19 Jun 2010 17:01:31 +0000</pubDate>
		<dc:creator>d.evil</dc:creator>
				<category><![CDATA[programowanie]]></category>
		<category><![CDATA[klawiatury]]></category>
		<category><![CDATA[komunikaty]]></category>
		<category><![CDATA[myszki]]></category>
		<category><![CDATA[obsługa]]></category>
		<category><![CDATA[SFML]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[zdarzeń]]></category>

		<guid isPermaLink="false">http://quaddev.com/?p=280</guid>
		<description><![CDATA[W poprzedniej części było tworzenie okna, jednak nie dało się go &#8220;normalnie&#8221; zamknąć. Między innymi o tym będzie dzisiaj. Odbieranie komunikatów Istnieją dwa sposoby odbierania komunikatów okienkowych (ciężki do przetłumaczenia fragment;): &#8220;odpytywanie&#8221; &#8211; ang. polling &#8211; w każdym przebiegu pętli programu pytamy okno o oczekujące komunikaty poprzez funkcje zwrotne &#8211; ang. using callback functions &#8211; [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://quaddev.com/2010/06/18/sfml-tutorial-czesc-2-tworzymy-okno/">W poprzedniej części było tworzenie okna</a>, jednak nie dało się go &#8220;normalnie&#8221; zamknąć. Między innymi o tym będzie dzisiaj.</p>
<p><strong>Odbieranie komunikatów</strong></p>
<p>Istnieją dwa sposoby odbierania komunikatów okienkowych (ciężki do przetłumaczenia fragment;):</p>
<ul>
<li>&#8220;odpytywanie&#8221; &#8211; ang. <em>polling</em> &#8211; w każdym przebiegu pętli programu pytamy okno o oczekujące komunikaty</li>
<li>poprzez funkcje zwrotne &#8211; ang. <em>using callback functions</em> &#8211; przekazujemy do okna wskaźnik funkcji, którą wywoła kiedy otrzyma komunikat.</li>
</ul>
<p><span id="more-280"></span><br />
<em>SFML</em> używa tego pierwszego sposobu. Funkcja, którą odpytujemy okno, to <em>GetEvent</em> należąca do klasy <em>sf::Event</em>.<br />
Zwraca ona wartość <em>true</em>, jeżeli są jakieś nieprzetworzone komunikaty. Inaczej zwraca wartość <em>false</em>.</p>
<pre name="code" class="cpp">
sf::Event Event;
if (App.GetEvent(Event))
{
    // Przetwarzanie komunikatu
}
</pre>
<p>Oczywiście komunikatów w każdej klatce może być więcej jak jeden. Za każdym razem są one odkładane na stosie komunikatów &#8211; najświeższy na wierzchu.<br />
Jeżeli przetworzymy tylko jeden &#8211; pozostałe nadal będą czekać. Może to doprowadzić do sytuacji, kiedy niektóre komunikaty nigdy nie zostaną przetworzone.<br />
Przy okazji &#8211; powinniśmy je obsługiwać na początku pętli głównej aplikacji:</p>
<pre name="code" class="cpp">
while(Running)
{
sf::Event Event;
while (App.GetEvent(Event))
{
    // Process event
}
App.Display();
}
</pre>
<p><strong>Przetwarzanie komunikatów</strong></p>
<p>Pierwszą rzeczą jaką powinniśmy zrobić z komunikatem, to sprawdzić jego typ (<em>sf::Event.Type</em>).<br />
<em>SFML</em> definiuje następujące typy:</p>
<ul>
<li><em>Closed</em> &#8211; zamknięcie okna</li>
<li><em>Resized</em> &#8211; zmiana rozmiaru okna, nowy rozmiar jest w <em>Event.Size.Width</em> (szerokość) i <em>Event.Size.Height</em> (wysokość)</li>
<li><em>LostFocus</em> &#8211; okno przestało być aktywne</li>
<li><em>GainedFocus</em> &#8211; okno odzyskało aktywność</li>
<li><em>TextEntered </em>- został wprowadzony tekst &#8211; <em>Event.Text.Unicode</em> (UTF-32)</li>
<li><em>KeyPressed</em> -<em> Event.Key.Code</em> &#8211; kod wciśniętego klawisza, <em>Event.Key.Alt</em>, <em>Event.Key.Control</em>, <em>Event.Key.Shift</em> &#8211; czy były przy tym wciśnięte</li>
<li><em>KeyReleased</em> &#8211; <em>Event.Key.Code</em> &#8211; kod zwolnionego klawisza, <em>Event.Key.Alt</em>, <em>Event.Key.Control</em>, <em>Event.Key.Shift</em> &#8211; czy były przy tym wciśnięte</li>
<li><em>MouseWheelMoved</em> &#8211; poruszenie rolką myszki &#8211; <em>Event.MouseWheel.Delta</em> &#8211; dodatnia liczba &#8211; do przodu, ujemna &#8211; wiadomo</li>
<li><em>MouseButtonPressed</em> &#8211; <em>Event.MouseButton.Button</em> zawiera wciśnięte przyciski myszy</li>
<li><em>MouseButtonReleased</em> &#8211; j.w. tylko zwolnione</li>
<li><em>MouseMoved</em> &#8211; poruszenie myszką &#8211; <em>Event.MouseMove.X</em> i <em>Event.MouseMove.Y</em> zawierają pozycję kursora (współrzędne lokalne &#8211; względem początku okna)</li>
<li><em>MouseLeft</em>/<em>MouseEntered</em> &#8211; opuszczenie i powrót kursora w obszar okna</li>
</ul>
<p>Są jeszcze komunikaty obsługujące joystick, ale będą przeze mnie pomijane.</p>
<p>Kody klawiszy, o których była mowa, są zbiorem stałych zdefiniowanych w pliku <em>Events.hpp</em> (można je sobie tam w razie wątpliwości podejrzeć).<br />
Np. <em>sf::Key::F5</em> czy <em>sf::Key::A</em>.</p>
<p>Klawisze myszy również są zdefiniowane &#8211; mamy ich do wyboru pięć: <em>sf::Mouse::Left</em>, <em>sf::Mouse::Right</em>, <em>sf::Mouse::Middle</em> (zazwyczaj wciskana rolka), <em>sf::Mouse::XButton1</em> and <em>sf::Mouse::XButton2</em>. </p>
<p>Wracając do naszej aplikacji &#8211; w końcu możemy obsługiwać komunikaty:</p>
<pre name="code" class="cpp">
sf::Event Event;
while (App.GetEvent(Event))
{
    // Zamkniecie okna
    if (Event.Type == sf::Event::Closed)
        Running = false;

    // Wcisniecie klawisza ESC
    if ((Event.Type == sf::Event::KeyPressed) &#038;&#038; (Event.Key.Code == sf::Key::Escape))
        Running = false;
}
</pre>
<p>Jeżeli przyglądaliście się wcześniejszej aplikacji &#8211; być może zauważyliście, że klikanie w &#8216;x&#8217; zamykający okno generowało<br />
komunikat <em>Close</em>, jednak okno nie było niszczone. To dlatego, że obsługa zamknięcia okna powinna być obsłużona przez nas &#8211; np. mamy okazję upewnić się, że użytkownik nie wcisnął przycisku przypadkiem czy też zaproponować zapisanie stanu gry;)<br />
Zamknięcie okna możemy spowodować usuwając jego instancję lub za pomocą funkcji <em>Close()</em>.</p>
<p>Teraz nasza główna pętla powinna wyglądać tak:</p>
<pre name="code" class="cpp">
while(App.IsOpened())
{
	sf::Event Event;

	while(App.GetEvent(Event))
	{
		// Zamkniecie okna
		if (Event.Type == sf::Event::Closed)
			App.Close();

		// Wcisniecie klawisza ESC
		if ((Event.Type == sf::Event::KeyPressed) &#038;&#038; (Event.Key.Code == sf::Key::Escape))
			App.Close();
	}
}
</pre>
<p><strong>Reagowanie na zdarzenia w czasie rzeczywistym</strong></p>
<p>Powyższy sposób sprawdzania zdarzeń dobrze sprawdza się w przypadku pojedynczych wciśnięć klawiszy czy zamknięcia okna.<br />
Jeżeli chcemy obsługiwać bardziej skomplikowane i czułe zdarzenia &#8211; np. sterowanie postacią &#8211; może okazać się, że wystąpią niedopuszczalne opóźnienia.</p>
<p>Lepszym rozwiązaniem w takim przypadku jest ustawianie zmiennej typ <em>bool</em> wartością <em>true</em> lub <em>false</em> &#8211; w zależności od tego czy interesujący nas klawisz jest wciśnięty lub puszczony.<br />
Jeżeli taka zmienna jest ustawiona, wtedy po prostu co przebieg pętli poruszamy postać.<br />
Taką funkcjonalność zapewnia nam klasa <em>sf::Input</em>.</p>
<p>Tworząc instancję tej klasy musimy ją powiązać z naszym oknem:</p>
<pre name="code" class="cpp">
const sf::Input&#038; Input = App.GetInput();
</pre>
<p>Dzięki temu mamy dostęp do klawiatury i myszki (pomijanego joysticka również) w każdej chwili, na przykład:</p>
<pre name="code" class="cpp">
bool         LeftKeyDown     = Input.IsKeyDown(sf::Key::Left);
bool         RightButtonDown = Input.IsMouseButtonDown(sf::Mouse::Right);
unsigned int MouseX          = Input.GetMouseX();
unsigned int MouseY          = Input.GetMouseY();
</pre>
<p>Przykładowy kod aplikacji mógłby wyglądać tak:</p>
<pre name="code" class="cpp">
#include &#60SFML/Window.hpp&#62

int main()
{
    // Tworzymy okno
    sf::Window App(sf::VideoMode(800, 600, 32), "SFML - obsluga zdarzen");

    // Tworzymy referencje do menagera obsługi zdarzen powiązanego z naszym oknem
    const sf::Input&#038; Input = App.GetInput();

    // Petla glowna
    while (App.IsOpened())
    {
        // Przetwarzamy komunikaty
        sf::Event Event;
        while (App.GetEvent(Event))
        {
            // Zamkniecie okna przyciskiem na belce tytulowej lub z paska zadan
            if (Event.Type == sf::Event::Closed)
                App.Close();

            // Zamkniecie okna klawiszem ESC
            if ((Event.Type == sf::Event::KeyPressed)
                 &#038;&#038; (Event.Key.Code == sf::Key::Escape))
                App.Close();
        }

        // Przykladowe zmienne do pobierania stanu
		// urzadzen wejsciowych w czasie rzeczywistym
        bool LeftKeyDown = Input.IsKeyDown(sf::Key::Left);
        bool RightButtonDown = Input.IsMouseButtonDown(sf::Mouse::Right);
        unsigned int MouseX = Input.GetMouseX();
        unsigned int MouseY = Input.GetMouseY();

        // Wyswietlanie okna
        App.Display();
    }

    return EXIT_SUCCESS;
}
</pre>
<p>Jak widać dzięki <em>SFML</em> obsługa zdarzeń jest całkiem prosta i przyjemna:)</p>
<p>W następnej części &#8211; obsługa czasu.</p>
]]></content:encoded>
			<wfw:commentRss>http://quaddev.com/2010/06/19/sfml-tutorial-czesc-3-obsluga-zdarzen/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>SFML tutorial &#8211; część 2 &#8211; tworzymy okno</title>
		<link>http://quaddev.com/2010/06/18/sfml-tutorial-czesc-2-tworzymy-okno/#utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=sfml-tutorial-czesc-2-tworzymy-okno</link>
		<comments>http://quaddev.com/2010/06/18/sfml-tutorial-czesc-2-tworzymy-okno/#comments</comments>
		<pubDate>Fri, 18 Jun 2010 19:15:59 +0000</pubDate>
		<dc:creator>d.evil</dc:creator>
				<category><![CDATA[programowanie]]></category>
		<category><![CDATA[okno]]></category>
		<category><![CDATA[SFML]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://quaddev.com/?p=259</guid>
		<description><![CDATA[Na wstępie zaznaczę – póki omawiam podstawy SFML, bez konkretnego większego przykładu zastosowania (n.p. gra) tutoriale zawarte w moim blogu są zazwyczaj luźnymi, „użytkowymi” tłumaczeniami ze strony http://www.sfml-dev.org/tutorials/. Nie widzę potrzeby wynajdywania koła na nowo – skoro coś jest dobre, to warto tego użyć. W dzisiejszej części zajmiemy się tworzeniem okna wchodzącego w skład modułu [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>Na wstępie zaznaczę – póki omawiam podstawy <em>SFML</em>, bez konkretnego większego przykładu zastosowania (n.p. gra) tutoriale zawarte w moim blogu są zazwyczaj luźnymi, „użytkowymi” tłumaczeniami ze strony <a href="http://www.sfml-dev.org/tutorials/">http://www.sfml-dev.org/tutorials/</a>. Nie widzę potrzeby wynajdywania koła na nowo – skoro coś jest dobre, to warto tego użyć. </p></blockquote>
<p>W dzisiejszej części zajmiemy się tworzeniem okna wchodzącego w skład modułu <em>Window</em>.</p>
<p><strong>Okno</strong></p>
<p>Tworzone przez nas okno jest typu<em> sf::Window</em>. Parametry okna możemy podać już przy deklaracji obiektu:</p>
<pre name="code" class="cpp">
int main
{
sf::Window App(sf::VideoMode(800,600,32),”Okno SFML”);
}
</pre>
<p>jak i później:</p>
<pre name="code" class="cpp">
int main
{
sf::Window App;

App.Create(sf::VideoMode(800,600,32),”Okno SFML”);
}
</pre>
<p><span id="more-259"></span><br />
Jak widzimy konstruktor oraz metoda <em>Create</em> przyjmują dwa parametry:</p>
<ul>
<li><em>sf::VideoMode</em> – jak nietrudno się domyślić rozdzielczość ekranu (szerokość, wysokość, głębia koloru)</li>
<li><em>std::string</em> – nazwa okna</li>
</ul>
<p><strong>Tryby graficzne</strong></p>
<p>W poprzednich przykładach nie przejmowaliśmy się specjalnie obsługą trybów graficznych, ponieważ uruchamialiśmy aplikację w oknie, gdzie można użyć właściwie każdego. Uruchomienie aplikacji w trybie pełnoekranowym już nie pozwala na taką beztroskę. Obsługiwane tryby pełnoekranowe możemy odczytać w następujący sposób:</p>
<pre name="code" class="cpp">
unsigned int VideoModesCount = sf::VideoMode::GetModesCount();
for(unsigned int i = 0; i < VideoModesCount; ++i)
{
sf::VideoMode Mode = sf::VideoMode::GetMode(i);
}
</pre>
<p>Listowane tryby będą posortowane od najwyższego obsługiwanego. Czyli – jeżeli chcemy otworzyć okno w najwyższej dostępnej na danym sprzęcie rozdzielczości i głębi kolorów – utworzymy je w ten sposób:</p>
<pre name="code" class="cpp">
App.Create(sf::VideoMode::GetMode(0), „Okno SFML”, sf::Style::Fullscreen);
</pre>
<p>(jak widać użyliśmy tutaj trzeciego parametru dla metody <em>Create</em> – <em>sf::Style::Fullscreen</em> – o stylach będzie szerzej w przyszłości)</p>
<p>Jeżeli jednak będziemy tworzyć okno ręcznie lub wczytywać jego parametry z pliku – warto sprawdzić, czy zadany tryb jest obsługiwany:</p>
<pre name="code" class="cpp">
sf::VideoMode Mode = ReadModeFromFile();
if(!Mode.IsValid())
{
// komunikat o błędzie
}
</pre>
<p><em>SFML</em> umożliwia także w prosty sposób pobranie aktualnej rozdzielczości pulpitu:</p>
<pre name="code" class="cpp">
sf::VideoMode DesktopMode = sf::VideoMode::GetDesktopMode();
</pre>
<p><strong>Główna pętla</strong></p>
<p>Umiemy już utworzyć okno, więc możemy napisać podstawowy program wyświetlający okno:</p>
<pre name="code" class="cpp">
#include &#60SFML/Window.hpp&#62

int main()
{
    sf::Window App(sf::VideoMode(800, 600, 32), "Okno SFML”);

    bool Running = true;
    while (Running)
    {
        App.Display();
    }

    return EXIT_SUCCESS;
}
</pre>
<p>Uwagi:<br />
metodę <em>Display</em> wywołujemy tylko raz, w głównej pętli i najlepiej na samym jej końcu<br />
gdyby ktoś sprawdzał kody wyjścia programu – użyliśmy tutaj <em>EXIT_SUCCESS</em>, który = 0, w przypadku błędu możemy użyć<em> EXIT_FAILURE</em> = -1.</p>
<p>Oczywiście nie ma jeszcze „normalnej” obsługi zamknięcia okna – ale dojdziemy do tego później. W tej chwili wystarczy zamknąć okienko konsoli.</p>
<p>W następnym odcinku – obsługa komunikatów:)</p>
]]></content:encoded>
			<wfw:commentRss>http://quaddev.com/2010/06/18/sfml-tutorial-czesc-2-tworzymy-okno/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SFML tutorial &#8211; część 1 &#8211; podstawy</title>
		<link>http://quaddev.com/2010/06/10/sfml-tutorial-czesc-1-podstawy/#utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=sfml-tutorial-czesc-1-podstawy</link>
		<comments>http://quaddev.com/2010/06/10/sfml-tutorial-czesc-1-podstawy/#comments</comments>
		<pubDate>Thu, 10 Jun 2010 18:57:43 +0000</pubDate>
		<dc:creator>d.evil</dc:creator>
				<category><![CDATA[programowanie]]></category>
		<category><![CDATA[podstawy]]></category>
		<category><![CDATA[SFML]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://quaddev.com/?p=220</guid>
		<description><![CDATA[Na wstępie zaznaczę – póki omawiam podstawy SFML, bez konkretnego większego przykładu zastosowania (n.p. gra) tutoriale zawarte w moim blogu są zazwyczaj luźnymi, „użytkowymi” tłumaczeniami ze strony http://www.sfml-dev.org/tutorials/. Nie widzę potrzeby wynajdywania koła na nowo – skoro coś jest dobre, to warto tego użyć. Na początku prac nad SPA używaliśmy SDL, jednak w którymś momencie [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>Na wstępie zaznaczę – póki omawiam podstawy <em>SFML</em>, bez konkretnego większego przykładu zastosowania (n.p. gra) tutoriale zawarte w moim blogu są zazwyczaj luźnymi, „użytkowymi” tłumaczeniami ze strony <a href="http://www.sfml-dev.org/tutorials/">http://www.sfml-dev.org/tutorials/</a>. Nie widzę potrzeby wynajdywania koła na nowo – skoro coś jest dobre, to warto tego użyć. </p></blockquote>
<p>Na początku prac nad <a href="http://kpteam.eu/">SPA</a> używaliśmy <a href="http://www.libsdl.org/">SDL</a>, jednak w którymś momencie okazało się, że w połączeniu z OpenGL i kartą ATI Kurruka dawał nam niezły slideshow. Podobno nic nowego/nierozwiązany problem. W związku z tym byliśmy zmuszeni poszukać jakiejś alternatywy &#8211; wybór padł na <a href="http://www.sfml-dev.org/">SFML</a>.</p>
<p>Minęło od tamtej chwili już sporo czasu, ale ostatnio przyszło mi do głowy żeby zrobić serię małych, prostych tutoriali.<br />
Po części będą to luźne tłumaczenia, po części luźne wariacje na temat konkretnych podzespołów <em>SFML</em> &#8211; pod kątem szybkiego robienia małych aplikacji. Cały czas patrzę na <em>SFML</em> jako świetne narzędzie pomagające w prototypowaniu. Może nawet przy okazji tutoriali napiszę na forum małą gierkę, którą wymyśliłem kiedyś na 2h Warsztatowe compo, ale nie zdążyłem jej skończyć w terminie;)</p>
<p><strong>Czym jest <a href="http://www.sfml-dev.org/features.php">SFML</a>?</strong></p>
<p>W skrócie szybką i łatwą w użyciu biblioteką multimedialną napisaną w C++.<br />
Główne cechy:</p>
<ul>
<li>przenośna (Win/Linux/MacOS)</li>
<li>zaprojektowana i napisana obiektowo</li>
<li>łatwa w użyciu</li>
<li>elastyczna (poszczególnych modułów można używać osobno)</li>
<li>można ją łączyć z OpenGL</li>
<li>obsługa myszy/klawiatury/joysticka</li>
<li>obsługa dźwięku w wielu popularnych formatach</li>
<li>obsługa sieci</li>
</ul>
<p><span id="more-220"></span></p>
<p><strong>Przygotowanie środowiska pracy</strong></p>
<p>Jako środowisko posłuży nam Visual C++ 2008 Express (gdyby ktoś miał problem z jakimś innym środowiskiem &#8211; niech da znać;)</p>
<p><strong><em>Zakładam, że czytelnik zna w miarę VC++ &#8211; tylko w tym pierwszym tutorialu rozpisuję co i gdzie dokładnie kliknąć przy konfiguracji środowiska. Przy następnych będę takie rzeczy mocno streszczał!</em></strong></p>
<p>Pierwszą rzeczą (po zainstalowaniu VC++ oczywiście) jest <a href="http://www.sfml-dev.org/download.php">pobranie bibliotek <em>SFML</em></a>. Kategoria <em>SFML development files (headers / libraries / external libraries)</em>. Najświeższa wersja w tej chwili, to <em>1.6</em>.<br />
Pobrany plik rozpakowujemy w wybrane miejsce. Dalej mamy dwie drogi do wyboru:</p>
<ul>
<li>kopiujemy zawartość <em>SFML-1.6/include</em> do katalogu <em>include</em> Visual C++, podobnie robimy z katalogiem <em>lib</em></li>
<p>lub</p>
<li>cały katalog umieszczamy w dogodnym miejscu i dokonujemy odpowiednich zmian w środowisku:</li>
<ul>
<li>wchodzimy w <em>Tools->Options->Projects and Solutions->VC++ Directories</em>, po prawej wybieramy <em>Show directories for:</em></li>
<ul>
<li><em>Include files</em> &#8211; dodajemy nową pozycję (żółta ikonka) i wskazujemy na folder <em>include</em> z naszej lokalizacji</li>
<li><em>Library files</em> &#8211; jak wyżej, tylko wskazujemy folder <em>lib</em></li>
</ul>
</ul>
</ul>
<p><strong>Pierwszy program</strong></p>
<p>W VC++ tworzymy nowy, pusty projekt typu <em>Win32 console application</em>. Dodajemy standardowy plik <em>main.cpp</em> &#8211; poniżej zawartość:<br />
(przykładowy kod z oficjalnego tutoriala):</p>
<pre name="code" class="cpp">
#include &#60;SFML/System.hpp&#62;
#include &#60;iostream&#62;

int main()
{
    sf::Clock Clock;
    while (Clock.GetElapsedTime() < 5.f)
    {
        std::cout << Clock.GetElapsedTime() << std::endl;
        sf::Sleep(0.5f);
    }

    return 0;
}
</pre>
<p>Program odliczy 5s od uruchomienia i zakończy swoje działanie.</p>
<p>Poznajemy tutaj klasę <em>Clock</em> oraz funkcję <em>Sleep</em> wchodzące w skład modułu <em>System</em>.<br />
Przy okazji należy zapamiętać, że wszystkie składniki <em>SFML</em> należą do przestrzeni nazw "<em>sf</em>".</p>
<p>To jeszcze nie wszystko - zanim zbudujemy projekt musimy wskazać linkerowi biblioteki <em>SFML</em> - w tym przypadku tylko jedną.<br />
Klikamy <em>Project->Nazwa projektu Properties->Configuration Properties->Linker->Additional Dependencies</em> i dopisujemy <strong>sfml-system.lib</strong>.</p>
<p>W przypadku pracy w konfiguracji <em>debug</em> zalecane jest wskazanie pliku <strong>sfml-system-d.lib</strong>, w przypadku dołączania bibliotek statycznie - <strong>sfml-system-s.lib</strong>. W przypadku pozostałych bibliotek będzie obowiązywała ta sama zasada.</p>
<p>Teraz możemy skompilować projekt - jeżeli wszystko zostało zrobione jak opisałem nie powinno być niespodzianek. Poza jedną:)<br />
Zanim uruchomimy program - a kompilowaliśmy z bibliotekami dołączanymi dynamicznie - musimy tam, gdzie pojawił się plik wynikowy skopiować <strong>sfml-system.dll</strong> - jest w rozpakowanym katalogu <em>SFML</em> w <em>lib</em>.</p>
<p>I to wszystko - mamy pierwszy program wykorzystujący klasę <strong>Clock</strong>. </p>
<p>W następnym odcinku - <a href="http://quaddev.com/2010/06/18/sfml-tutorial-czesc-2-tworzymy-okno/">otwieranie okna w trybie graficznym</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://quaddev.com/2010/06/10/sfml-tutorial-czesc-1-podstawy/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>How To Destroy Angels</title>
		<link>http://quaddev.com/2010/06/05/how-to-destroy-angels/#utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=how-to-destroy-angels</link>
		<comments>http://quaddev.com/2010/06/05/how-to-destroy-angels/#comments</comments>
		<pubDate>Sat, 05 Jun 2010 18:31:43 +0000</pubDate>
		<dc:creator>d.evil</dc:creator>
				<category><![CDATA[ciekawostki]]></category>
		<category><![CDATA[muzyka]]></category>
		<category><![CDATA[how to destroy angels]]></category>
		<category><![CDATA[nine inch nails]]></category>
		<category><![CDATA[trent reznor]]></category>

		<guid isPermaLink="false">http://quaddev.com/?p=213</guid>
		<description><![CDATA[Wczoraj się przekonałem, że zdecydowanie za rzadko zaglądam na nin.com. Trent Reznor się ożenił, a na dodatek z żoną i Atticusem Rossem wypuścili EPkę nowej formacji. Oprócz tego &#8211; jak zadeklarował w 2008 roku &#8211; odpuszcza z koncertowaniem jako Nine Inch Nails. Swoją niewiedzę usprawiedliwię przedstawiając się jako fan jego twórczości, a nie gość zaglądający [...]]]></description>
			<content:encoded><![CDATA[<p><img alt="" src="http://howtodestroyangels.com/img/preorder-cover.jpg" title="How To Destroy Angels" class="aligncenter" width="446" height="445" /><br />
Wczoraj się przekonałem, że zdecydowanie za rzadko zaglądam na <a href="http://www.nin.com">nin.com</a>.<br />
Trent Reznor się <a href="http://www.spinner.com/2009/10/19/trent-reznor-marries-mariqueen-maandig/"  target="_blank">ożenił</a>, a na dodatek z żoną i Atticusem Rossem wypuścili <a href="http://nin.com/?id=97906">EPkę</a> nowej formacji. Oprócz tego &#8211; <a href="http://www.guardian.co.uk/music/2008/dec/10/nine-inch-nails-stop-touring" target="_blank">jak zadeklarował w 2008 roku</a> &#8211; odpuszcza z koncertowaniem jako Nine Inch Nails.</p>
<p>Swoją niewiedzę usprawiedliwię przedstawiając się jako fan jego twórczości, a nie gość zaglądający mu do kuchni;)</p>
<p>A EP <a href="http://www.howtodestroyangels.com/" target="_blank">&#8220;How To Destroy Angels&#8221;</a> bardzo mi się podoba &#8211; do pobrania za free:)</p>
]]></content:encoded>
			<wfw:commentRss>http://quaddev.com/2010/06/05/how-to-destroy-angels/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Łamanie kości czyli jak malować gwiazdy:)</title>
		<link>http://quaddev.com/2010/06/05/lamanie-kosci-czyli-jak-malowac-gwiazdy/#utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=lamanie-kosci-czyli-jak-malowac-gwiazdy</link>
		<comments>http://quaddev.com/2010/06/05/lamanie-kosci-czyli-jak-malowac-gwiazdy/#comments</comments>
		<pubDate>Fri, 04 Jun 2010 23:06:32 +0000</pubDate>
		<dc:creator>d.evil</dc:creator>
				<category><![CDATA[projekty]]></category>
		<category><![CDATA[różne]]></category>
		<category><![CDATA[gimp]]></category>
		<category><![CDATA[SPA]]></category>
		<category><![CDATA[space pioneers arena]]></category>

		<guid isPermaLink="false">http://quaddev.com/?p=198</guid>
		<description><![CDATA[Jak widać na powyższym zdjęciu prace posuwają się powoli, lżej mi teraz pokombinować z grafiką do SPA jak klepać kod. W sieci wygrzebałem w związku z tym rewelacyjny tutorial &#8211; &#8220;Stwórz fajne, gwiaździste niebo&#8221; w GiMPie. Poniżej efekt pierwszego zastosowania tegoż samouczka:)]]></description>
			<content:encoded><![CDATA[<p align="center"><a href="http://quaddev.com/wp-content/uploads/2010/06/jasemhc_wm.jpg" target="_blank"><img src="http://quaddev.com/wp-content/uploads/2010/06/jasemhc_wm.jpg" alt="JESTEM HARDKOREM" title="JESTEM HARDKOREM" width="600" class="alignnone size-full wp-image-200" /></a></p>
<p>Jak widać na powyższym zdjęciu prace posuwają się powoli, lżej mi teraz pokombinować z grafiką do <a href="http://kpteam.eu">SPA</a> jak klepać kod.<br />
W sieci wygrzebałem w związku z tym rewelacyjny tutorial &#8211; &#8220;<a href="http://www.tutorialhero.com/click-10638-create_a_cool_starfield.php">Stwórz fajne, gwiaździste niebo</a>&#8221; w GiMPie. Poniżej efekt pierwszego zastosowania tegoż samouczka:)</p>
<p align="center"><a href="http://quaddev.com/wp-content/uploads/2010/06/title_wm.png" target="_blank"><img src="http://quaddev.com/wp-content/uploads/2010/06/title_wm.png" alt="space pioneers arena menu" title="space pioneers arena menu" width="600"  class="alignnone size-full wp-image-201" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://quaddev.com/2010/06/05/lamanie-kosci-czyli-jak-malowac-gwiazdy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Projekt SPA &#8211; Space Pioneers Arena &#8211; wersja alfa</title>
		<link>http://quaddev.com/2010/03/27/projekt-spa-space-pioneers-arena-wersja-alfa/#utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=projekt-spa-space-pioneers-arena-wersja-alfa</link>
		<comments>http://quaddev.com/2010/03/27/projekt-spa-space-pioneers-arena-wersja-alfa/#comments</comments>
		<pubDate>Sat, 27 Mar 2010 18:35:12 +0000</pubDate>
		<dc:creator>d.evil</dc:creator>
				<category><![CDATA[gry]]></category>
		<category><![CDATA[programowanie]]></category>
		<category><![CDATA[projekty]]></category>
		<category><![CDATA[SPA]]></category>
		<category><![CDATA[space pioneers arena]]></category>

		<guid isPermaLink="false">http://quaddev.com/?p=183</guid>
		<description><![CDATA[Nie inaczej &#8211; jak wcześniej pisałem na KPTeam zaczęliśmy knuć coś nowego. Dziś wielki dzień i odsłona naszego nowego projektu &#8211; Space Pioneers Arena. Będzie to dwuwymiarowa, kosmiczna strzelanka z widokiem z góry. Więcej informacji oraz wersja alfa do pobrania na blogu KPTeam.]]></description>
			<content:encoded><![CDATA[<p>Nie inaczej &#8211; jak wcześniej pisałem na <a href="http://kpteam.eu/?p=67">KPTeam</a> zaczęliśmy knuć coś nowego. Dziś wielki dzień i odsłona naszego nowego projektu &#8211; <strong>Space Pioneers Arena</strong>.<br />
Będzie to dwuwymiarowa, kosmiczna strzelanka z widokiem z góry. Więcej informacji oraz wersja alfa do pobrania na blogu <a href="http://kpteam.eu/?p=69">KPTeam</a>.</p>
<p align="center">
<img src="http://quaddev.com/wp-content/uploads/2010/03/spa_alpha_menu.png" alt="SPA menu" title="SPA menu" width="600" class="alignnone size-full wp-image-191" /><br />
<img src="http://quaddev.com/wp-content/uploads/2010/03/spa_alpha.jpg" alt="Space Pioneers Arena" title="SPA" width="600" class="alignnone size-full wp-image-184" /></p>
]]></content:encoded>
			<wfw:commentRss>http://quaddev.com/2010/03/27/projekt-spa-space-pioneers-arena-wersja-alfa/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ciekawostka z antywzorców projektowych (dla wtajemniczonych:)</title>
		<link>http://quaddev.com/2009/11/12/ciekawostka-z-antywzorcow-projektowych-dla-wtajemniczonych/#utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=ciekawostka-z-antywzorcow-projektowych-dla-wtajemniczonych</link>
		<comments>http://quaddev.com/2009/11/12/ciekawostka-z-antywzorcow-projektowych-dla-wtajemniczonych/#comments</comments>
		<pubDate>Thu, 12 Nov 2009 21:33:51 +0000</pubDate>
		<dc:creator>d.evil</dc:creator>
				<category><![CDATA[ciekawostki]]></category>
		<category><![CDATA[projektowanie]]></category>
		<category><![CDATA[antywzorce projektowe]]></category>
		<category><![CDATA[wzorce projektowe]]></category>

		<guid isPermaLink="false">http://quaddev.com/?p=154</guid>
		<description><![CDATA[Uprawa pieczarek (ang. Mushroom management): Styl zarządzania podobny do uprawy pieczarek. Pieczarki trzymane są w ciemnościach, w oborniku (ang. bullshit), a gdy trochę urosną &#8211; obcina się im głowy. W zarządzaniu przekłada się to na podejmowanie decyzji bez konsultacji z personelem, którego dotyczą te decyzje, lub wręcz nie informowanie personelu aż do czasu, gdy decyzje [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p><strong>Uprawa pieczarek</strong> (ang. <em>Mushroom management</em>): Styl zarządzania podobny do uprawy pieczarek. Pieczarki trzymane są w ciemnościach, w oborniku (ang. <em>bullshit</em>), a gdy trochę urosną &#8211; obcina się im głowy. W zarządzaniu przekłada się to na podejmowanie decyzji bez konsultacji z personelem, którego dotyczą te decyzje, lub wręcz nie informowanie personelu aż do czasu, gdy decyzje zapadną i będą odczuwalne. Zjawisko spotykane jest najczęściej w organizacjach o hierarchicznej strukturze, z barierami komunikacyjnymi pomiędzy poszczególnymi szczeblami. Antywzorzec ten dotyczy także projektów informatycznych, a dokładniej braku komunikacji pomiędzy klientami lub architektami systemu, a programistami, którzy implementują system. Programiści nie mają bezpośredniego kontaktu z klientem i mogą polegać tylko na stworzonej dokumentacji, która z kolei jest często traktowana niezobowiązująco przez klienta (np. klient traktuje ją &#8220;po macoszemu&#8221;, jako zło konieczne).</p></blockquote>
<p></p>
<p>(źródło: <a href="http://pl.wikipedia.org/wiki/Antywzorzec_projektowy">http://pl.wikipedia.org/wiki/Antywzorzec_projektowy</a>)</p>
<p></p>
]]></content:encoded>
			<wfw:commentRss>http://quaddev.com/2009/11/12/ciekawostka-z-antywzorcow-projektowych-dla-wtajemniczonych/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
