Animacje

M9
  • Rejestracja:ponad 14 lat
  • Ostatnio:ponad 12 lat
  • Postów:9
0

Witam!

  1. Jakie są sposoby wyświetlania animacji? Chodzi mi np. o coś w rodzaju pływającego udekorowanego tekstu, niekoniecznie przez podmienianie plików obrazków korzystając z wątków.
  2. Jak wczytywać do aplikacji pliki gif, aby animacja wyświetlana była cały czas, a nie tylko jedna klatka?
Olamagato
  • Rejestracja:ponad 16 lat
  • Ostatnio:11 dni
  • Lokalizacja:Polska, Warszawa
  • Postów:1058
0

Jeżeli tekst ma się nie zmieniać, to renderujesz go całego do jakiegoś bardzo długiego obrazka (najlepiej w formacie kompatybilnym z trybem ekranu) mieszczącego go całego (nazwijmy to "taśmą"). Następnie co określony okres czasu wyrzucasz repaint, a w paint rysujesz na ekranie za pomocą drawImage pobierając odpowiedni fragment taśmy do wyplucia w odpowiednim obszarze. Zmieniając zakres kopiowanego fragmentu uzyskasz efekt przesuwania się napisu w wybranym miejscu panela/ekranu.
Można to zoptymalizować jeżeli, jest aktywne przyspieszenie sprzętowe (dla trybu obrazka zgodnego z trybem ekranu), kopiując (przenosząc) na buforze ekranu/panela ten fragment, który tylko się przesunie i doklejając z prawej lub lewej (zależnie od kierunku przesuwania) brakujący fragment z "taśmy". To chyba najszybsza (najbardziej płynna) metoda generowania przesuwającego się napisu. W przypadku przesuwania o jeden piksel z taśmy będzie kopiowane tylko bitów kolejnych linii ile pikseli ma wysokość "taśmy"

Jeżeli sam napis na taśmie się zmienia, to taśma musi stać się buforem, który też będzie się przesuwał, gdy kolejne fragmenty napisu będą renderowane (trzeba będzie uwzględnić jej przesunięcie w kolejnych zrzutach na ekran/panel). Buforowanie ma tę zaletę, że można w różnych momentach i różnymi procedurami doklejać, modyfikować zawartość taśmy, więc na takim napisie może sobie latać motylek, mogą pojawiać się kleksy i co tylko przyjdzie do głowy. Grunt, żeby przy przerzucaniu na ekran obszar do skopiowania miał już postać finalną.
Można też spróbować renderować taki zmieniający się tekst bezpośrednio na buforze ekranu/panela, ale wtedy może być problem z płynną animacją ponieważ nie będzie można łatwo zrobić przełączania stron, a także trzeba będzie anulować przesuwanie i renderowanie fragmentu obrazu jeżeli zabraknie czasu procesora ponieważ trzeba pamiętać, że paint może być bez żadnej kontroli łączone/olewane przez Swinga z kilku kolejnych zleceń repaint.

To pewnie nie jest zbyt jasne, ale prościej chyba się nie da. Trzeba poczytać dokumentację metod graficznych AWT/Swinga aby załapać o co chodzi.

A co odtwarzania gif-a, to musisz sobie taki playerek sam napisać, albo zaciągnąć gdzieś z sieci gotową klasę, która to robi (tzn. wyrzuca kolejne klatki do jakiegoś bufora).


Jeżeli ktoś komuś coś, ewentualnie nikt nikomu nic, to właściwie po co...?
edytowany 1x, ostatnio: Olamagato
Azarien
to się „scroll” nazywa.
Olamagato
"Polacy nie gęsi...". :)
M9
  • Rejestracja:ponad 14 lat
  • Ostatnio:ponad 12 lat
  • Postów:9
0

Dzięki serdeczne za uwagę.
Mam jeszcze jedno pytanie:
czy mógłby mi ktoś wytłumaczyć pokrótce tzw podwójne buforowanie, ew. podać link do jakiegoś przystępnego tutorialu?

PS. to tak żeby nie zakładać nowego tematu, zapytam:
W pochodnej klasy JFrame mam dwie funkcje: runMenu() i runApp() . Pierwsza jest odpalana w konstruktorze, tworzy JPanel a na nim rysuje menu, dodaje obsługę strzałek itp.
Druga natomiast powinna być odpalana po wybraniu pierwszej opcji z menu. Jak zatem zgrabnie opuścić runMenu() i wywołać runApp() ? Dodam że to żądane "przejście" dzieje się to po wciśnięciu klawisza ENTER, czyli w zasadzie to w metodzie addKeyListener(...);

edytowany 2x, ostatnio: muse_92
Olamagato
  • Rejestracja:ponad 16 lat
  • Ostatnio:11 dni
  • Lokalizacja:Polska, Warszawa
  • Postów:1058
0

Idea jest bardzo prosta. http://pl.wikipedia.org/wiki/Podw%C3%B3jne_buforowanie
W przypadku obiektów Swinga nie trzeba nic robić ponieważ tam takie buforowanie jest już obecne i jest przezroczyste dla programisty (paintComponent dostaje kontekst graficzny do właściwego bufora).
Co do tutoriala, to aż się prosi o google. ;)

Co do drugiego pytania, to nie za bardzo go rozumiem. runMenu zakończy się jak skonstruuje wszystko co miał zrobić, wtedy wróci do kodu kontruktora, który też się zakończy. Okno po utworzeniu zacznie być zarządzane przez kolejkę zdarzeń Swinga. Jeżeli w runMenu zostaną zarejestrowane jakieś listenery, to odpowiednie procedury obsługi zostaną wywołane gdy nadejdą obsługiwane przez nie zdarzenia. Co do runApp, to powinna być ona procedurą obsługi zdarzenia dla wybrania z menu pierwszej pozycji (zaimplementowaną metodą interfejsu). Aby ją zarejestrować należy użyć w np. runMenu jakiegoś listenera, który utworzy obiekt np. klasy anonimowej, implementującego konkretny interfejs listenera (najczęściej jest to tylko jedna metoda do zaimplementowania).

ps. Metoda addKeyListener służy do dodania procedury obsługi wciśnięcia klawisza. Po wciśnięciu Enter wywoływana jest metoda obiektu, który podano jako argument w addKeyListener, a nie "w metodzie addKeyListener".

Listenery tworzy się najczęściej jako anonimowe klasy wewnętrzne w klasie reprezentującej element GUI, który generuje konkretne zdarzenia. Dzięki temu zarówno konstrukcja jak i obsługa działania konkretnego obiektu są w tym samym miejscu.

Pytania i nazwy metod sugerują, że nie załapałeś jeszcze, że to nie ty wywołujesz kod GUI, ale kod GUI (obiektów Swinga) wywołuje Twój kod. Twoim zadaniem jest jedynie podawanie mu obiektów, którymi będzie zarządzał (przez metody takie jak createGUI wywołujące metody add oraz setVisible) oraz obiektów, których metody będą reagowały na zdarzenia z tych obiektów (przez dodawanie/usuwanie listenerów).


Jeżeli ktoś komuś coś, ewentualnie nikt nikomu nic, to właściwie po co...?
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)