Autor Wątek: Juice it or lose it  (Przeczytany 5528 razy)

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Maj 29, 2012, 12:27:24
Cytuj
Link do githuba plz? :D
Nie mam tego na githubie. :) Ale mogę pomyśleć by kiedyś na stronkę wrzucić. :)

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline ajuc

  • Użytkownik
    • strona domowa

# Maj 29, 2012, 12:49:39
A propos szybkiego iterowania - świetnie się pisze takie rzeczy w javascripcie z użyciem jquery. Szczególnie ui.

Piszę sobie teraz zręcznościówkę w html5/canvas, z dość skomplikowanym ui (dialogi, questy, budynki do których można wchodzić). Ui robię w zwykłym html, i nigdy jeszcze mi się tak szybko i przyjemnie nie robiłu ui do gry. Jquery rządzi. Przykład - mam na dole ekranu okienko na komunikaty. Funkcja do zmiany komunikatu:

function setMessage(content) {
    $("#Messages > div").fadeOut("fast", function() {
        $("#Messages > div").empty().append(content);
   $("#Messages > div").fadeIn("slow", function() {});
    });
}

Funkcja najpierw robi fadeOut, podmienia zawartość, potem robi fadeIn. Mogę dodawać i łączyć efekty w kilku linijkach, mogę zmieniać efekty kilku elementom na raz, mogę wybierać elementy po kilku kryteriach (prawie jak sql do robienia dynamicznych ui).

W sumie dopiero się orientuję w możliwościach jquery, wcześniej nie doceniałem, jak bardzo webowe technologie upraszczają takie rzeczy. I rzeczywiście - różnica w nakładzie pracy powoduje, że dużo bardziej się człowiek przykłada do wygody używania, bo dużo łatwiej to stestować.

Offline SiwyEd

  • Użytkownik

  • +1
# Maj 29, 2012, 17:34:03
Najfajniej byłoby mieć coś takiego: http://www.youtube.com/watch?v=PlI-gPu3SPI :) Ktoś widział/zrobił taki framework w C++?

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

  • +1
# Maj 29, 2012, 17:50:05
Cytuj
Najfajniej byłoby mieć coś takiego: http://www.youtube.com/watch?v=PlI-gPu3SPI :)
Ja mam to prawie, z tą różnicą, że resetuje mi przy każdej zmianie cały stan gry. :) Ale i to można by ominąć (o ile tylko się struktura obiektów nie zmienia). :)

Offline SiwyEd

  • Użytkownik

# Maj 29, 2012, 18:10:06
No to nie mogę się doczekać aż to udostępnisz ;). Wszystko da się zrobić, ale strasznie to jest pracochłonne.

Offline rm-f

  • Użytkownik
    • Tu trolluje

# Maj 29, 2012, 19:01:01
Wszystko da się zrobić, ale strasznie to jest pracochłonne.
Czy ja wiem? Ja potrafię sobie wyobrazić jak to zrobić łatwo i przyjemnie :) Ba nawet bez resetowania stanu gry (jeżeli nie zmieniają się struktura obiektów, choć można to ominąć czymś co by zmieniło C++ w poczwarę).

Offline Kos

  • Użytkownik
    • kos.gd

# Maj 29, 2012, 19:02:59
Aaa tam C++. Do robienia dynamicznych rzeczy są dynamiczne języki! :D

Offline rm-f

  • Użytkownik
    • Tu trolluje

# Maj 29, 2012, 19:11:11
Aaa tam C++. Do robienia dynamicznych rzeczy są dynamiczne języki! :D
Ale tam niema nic 'dynamicznego'.  :D dlopen+ redefinicja malloc/free i jedziemy z koksownikami.

Offline Avaj

  • Użytkownik

# Maj 29, 2012, 23:45:57
@Paweł: wszystkie z tych efektów są czasowo równie tanie jak wstrząs ekranem. Jeśli nie są dla Ciebie, to you're doing it wrong :).

Przykładowo: bounsnięcie wieżyczką dla Twojej gry. Tak, żeby podskoczyła przy wstawieniu.
(w AS3, z Tweenerem)
wiezyczka.scaleX = 1.2;
wiezyczka.scaleY = 1.2
Tweener.addTween(wiezyczka, {scaleX: 1, scaleY: 1, time: 0.1, transition: "easeOutElastic"});
Ważne, żeby móc to napisać w jednym miejscu i nie troszczyć się o updatowanie tej interpolacji co klatkę.
ajjj, globalne zmienne/singleton!

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Maj 30, 2012, 00:10:12
Cytuj
No to nie mogę się doczekać aż to udostępnisz ;). Wszystko da się zrobić, ale strasznie to jest pracochłonne.
Tyle że to akurat to nie jest C++, tylko własny język skryptowy (o którym już kiedyś wspominałem). No i całość jest mocno osadzona w dość sporym edytorze do grafiki proceduralnej. ;)


Offline Kos

  • Użytkownik
    • kos.gd

  • +2
# Maj 30, 2012, 11:41:47
ajjj, globalne zmienne/singleton!
Zmień sobie na ServiceLocator.GetInstance<ITweenerProvider>().GetTweener().addTween(...), będzie profesjonalny OOP :)

Offline Avaj

  • Użytkownik

# Maj 30, 2012, 11:45:11
Zmień sobie na ServiceLocator.GetInstance<ITweenerProvider>().GetTweener().addTween(...), będzie profesjonalny OOP :)
ale ServiceLocator.GetInstance<ITweenerProvider>() to już jest singleton! singletons are evil!

Offline Kos

  • Użytkownik
    • kos.gd

# Maj 30, 2012, 11:49:24
Ale należący do superstruktury, a nie infrastruktury, więc leżący poza logiką aplikacji :D ye gods, co za bzdury ja piszę

(Właściwie to skąd to się wzięło, że klasa globalnie dostępna = fajne, a obiekt globalnie dostępny = niefajne? a np. obiekt fabryki, pełniący tę samą rolę co klasa?)

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Maj 30, 2012, 12:08:11
Cytuj
(Właściwie to skąd to się wzięło, że klasa globalnie dostępna = fajne, a obiekt globalnie dostępny = niefajne? a np. obiekt fabryki, pełniący tę samą rolę co klasa?)
Ktoś po pijaku wymyślił, a raverzy polubili na fejsie. Fajne to jest jak się rzutuje this na unsigned char *, a nie jakieś bzdury dla małolatów. :)


Ale wszystkie globale też są fajne, bo skracają czas potrzebny na stworzenie produktu, a o to przecież chodzi. :)

Offline ajuc

  • Użytkownik
    • strona domowa

# Maj 30, 2012, 12:12:59
Ale należący do superstruktury, a nie infrastruktury, więc leżący poza logiką aplikacji :D ye gods, co za bzdury ja piszę

(Właściwie to skąd to się wzięło, że klasa globalnie dostępna = fajne, a obiekt globalnie dostępny = niefajne? a np. obiekt fabryki, pełniący tę samą rolę co klasa?)

Jeśli kiedykolwiek użytkownik będzie potrzebował stworzyć 2 tweenery, to zmiana będzie banalna. A dopóki nie potrzebuje - zasada YAGNI.

Poza tym nie wiem, jak w AS, ale js pozwala "inkludować" te same biblioteki kilka razy do różnych obiektów (przynajmniej jak się korzysta z CommonJS). I wtedy problemu nie ma.

  var Tweener1 = require('./tweener.js');
  var Tweener2 = require('./tweener.js');

  Tweener1.something();
  Tweener2.something();

A w tradycyjnych językach obiektowych nie ma alternatywy dla globalnych klas, więc się utarło, że to nie problem :)