Jump to content

Problemy: jakość bitmap we flash + resizing


Recommended Posts

Ok już tutaj ktoś wrzucał kod z resizingiem okna, więc pewnie niektórzy mnie zbluzgają za to. że powielam temat, ale do rzeczy....

Mój problem polega na tym, że chcę zanimować całą stronkę we flashu tak aby wraz ze zmianą wielkości okna pewne elementy stronki zmieniały swoje umiejscowienie. Np background żeby znajdował się zawsze na środku sceny, menu zjeżdżało do np 30% stronki od góry itp.. jednak po wrzuceniu jakichkolwiek grafik, po "skompilowaniu" niektóre tracą na jakości.. staram się większość zapysywać jako png. Czy ktoś mógłby powiedzieć od czego to zależy??

 

Skorzystałem z kodu, który znalazłem nieopodal:

stop();

this.onResize = function()
   {
       //-- Called when browser is resized.
       this.txtDimentions._x = (Stage.width  / 2) -  (this.txtDimentions._width  / 2);
       this.txtDimentions._y = (Stage.height / 2) -  (this.txtDimentions._height / 2);
       this.txtDimentions.text = Stage.width + "x" + Stage.height;
   };

Stage.scaleMode = "noScale";

Stage.align = "TL";
Stage.showMenu = false;
Stage.addListener(this);

this.onResize();

Czy jest lepszy sposób na "full view"??

 

Rozpocząłem również pracę nad music boxem na strony. MovieClip jest stworzony jakby z kilku buttonów jeden w drugim. Rollover myszką ma odtworzyć animację otwierania się musicboxa w którym są umieszczone przyciski stop play itp. I tu pojawia się problem, mianowicie animacja "otwarcia" jest odtwarzana póki kursor jest nieruchomo w obrębie MC. Jednak gdy tylko ruszę nim w celu wybrania jakiejkolwiek opcji to animacja jakby odtwarza się od początku. A wybranie czegokolwiek staje się strasznie uciążliwe.

 

Ostatnie pytanie to raczej sprawa techniczna niezwiązana z flashem. Na swoim monitorze mam ustawioną dosyć dużą rozdzielczość (1680x1050). Czy do projektowania stronek mam zmieniać rozdzielczość mojego monitora, czy wystarczy, że w PS'ie stworzę plik np o rozdzielczości 1024x768?? Gdy zmieniam rozdzielczość w trakcie pracy, to layout wydaje się być lekko "spłaszczony".

 

Wiem, że trochę tego jest i pewnie będzie jeszcze więcej, ale dzięki za odpowiedź (i wyrozumiałość dla nooba). :P

Link to post
Share on other sites

domyslnie sa konwertowane do 32bitowego jpega - shift + f12 masz ogolne ustawienie jakosci na 80%. Mozesz zmieniac globalnie lub w library w danej bitmapie zmienic w properties compression lokalnie ustawic kompresję lub brak (lossless).

 

wystarczy założyć dokument o wybranej wielkosci sceny np. 1000px na szerokosc. pamietaj o miejscu jakie zjada panel przegladarki.

Link to post
Share on other sites

Nie mam dużego doświadczenia we flashu ale z tego co wiem mogę powiedzieć, ze flash ogólnie kiepsko radzi sobie z resizowaniem bitmap.

 

W oknie właściwości obrazka w library, możesz włączyć mu opcję Allow Smoothing, która wygładza ostre krawędzie i krawędzie "bloków" kompresji.

Dobrze jest wcześniej zaprojektować layout w PSie, dobrać wielkość obrazków użytych w layoucie i ich się trzymać. Tzn jeśli docelowo grafika na stronie ma mieć np 340x118 to właśnie taką ją zrób, nie wstawiaj 640x236 i nie pomniejszaj bo wtedy flash zaczyna się kiełbasić.

Link to post
Share on other sites

Dzięki ola-f za odpowiedź. Co mnie zdziwiło, że kiedy zapisałem ten sam plik jako *.jpg flash przestał zmieniać jakość obrazka. Teraz wygląda całkiem ładnie :)

 

jeśli docelowo grafika na stronie ma mieć np 340x118 to właśnie taką ją zrób, nie wstawiaj 640x236 i nie pomniejszaj bo wtedy flash zaczyna się kiełbasić.

 

To akurat wiem :) tylko mi chodziło raczej o to, czy nawet mając dany lay otwarty w PS'ie w rozdzielczości np 1200x1000. Który jest przed pocięciem i można scrolować w dół (żeby widzieć zawartość poszczególnych części laya), oraz widać po bokach pattern (normalnie jako osobna grafika). I po zmianie rozdzielczości mojego monitora, ten sam plik- bez wprowadzania żadnych zmian- wydaje się być spłaszczony w pionie..

 

Nadal pozostaje problem z rolloverem na buttonach..

Szukam też przydatnych rzeczy do animacji "zlatującej kartki papieru" :P

Link to post
Share on other sites

W AS2 nie da się zrobić przycisku w przycisku... W AS3 jest inna architektura i takie rzeczy są już możliwe :)

Mimo wszystko zrobienie tego w AS2 nie jest wielkim problemem, polecić mogę 2 sposoby:

1. Na 2 przyciski - robisz klip zawierający przyciski "menu_mc", i w nim animację wysuwania się ich (pojawiania), pamiętaj aby w pierwszej klatce dać skrypt "stop()". Robisz tylko animację pojawiania się (a NIE animację pojawiania i chowania). OK. Teraz nad tym klipem z animacją wysuwania tworzysz drugi klip ale niewidoczny (_alpha=0), po najechaniu na który menu się wysunie, niech będzie to "showMenu_mc", następnie robisz kolejny niewidoczny klip, po najechaniu na który menu będzie się chować. W tym wypadku możesz obrysować całą scenę, oczywiście oprócz obszaru na którym będzie menu... W instancji nazwijmy ten przycisk "hideMenu_mc"

Teraz w nadrzędnej klatce wpisujesz taki skrypt:

//

hideMenu_mc._visible = false;

showMenu_mc.onRollOver = function(){

menu_mc.show();

_visible = false;

hideMenu_mc._visible = true;

}

hideMenu_mc.onRollOver = function(){

menu_mc.hide();

_visible = false;

showMenu_mc._visible = true;

}

//

 

OK. Natępnie wbijasz się do klipu "menu_mc" i w jego pierwszej klatce wpisujesz skrypt:

//

function show(){

onEnterFrame = function(){

if (_currentframe == _totalframes){

delete onEnterFrame;

}

nextFrame();

}

}

function hide(){

onEnterFrame = function(){

if (_currentframe == 1){

delete onEnterFrame;

}

prevFrame();

}

}

//

 

2. Sposób drugi, użycie "hitTest". W tym wypadku wystarczy sama obecność klipu "menu_mc". Najlepszy sposób, to wbić się do klipu "menu_mc", i nad animacją wysuwania menu (na nowej wartwie) stworzyć nowy klip on nazwie instancji "hitTester_mc", a potem zanimować go tak, aby jego powierzchnia obrysowywała menu... Następnie w pierwszej klatce klipu "menu_mc" wpisujemy skrypt:

//

onEnterFrame = function(){

if (hitTester_mc.hitTest(_root._xmouse, _root._ymouse, false)){

nextFrame();

}else{

prevFrame();

}

}

//

 

Mam nadzieję że to się komuś przyda, i że nie ma błędów, bo z pamięci pisałem...

Link to post
Share on other sites
  • 2 weeks later...

Ok dzięki to się na pewno przyda. Jednak z tego co widzę to trzeba się przerzucić na AS3 i w nim dłubać..

 

 

Anyway mam kolejny problem. Menu restauracji dla której tworzę ten projekt jest dosyć spore. Nie chciałbym zwiększać obszaru na którym będzie ono wyświetlane dlatego chciałbym wiedzieć czy znacie sposób (np w xml'u) na rozwijanie się contentu.. Myślałem nad czym w takim stylu:

 

[+]Zakąski (po kliknięciu rozwijana lista)
      [b]SUVLAKI POLLO[/b]  szaszłyki drobiowe.....................................23 zł
      [b]SALSICIOTTI[/b]  pieczone mięso mielone wieprzowo - wołowe................19 zł

 

dzieki za pomoc :)

Link to post
Share on other sites

A któryś komponent User Interface się nie sprawdzi? Nie wiem, bo prawie tego nie używam...

Można też samemu panel rozwijalny zeskryptować w oparciu o XML. Może jak będę miał chwilkę to coś zgrzebię ;)

Link to post
Share on other sites

ściągnąłem sobie komponent "News reader" z xmlem. Jednak mam tam kilkanaście różnych plików.

Problem w tym, że komponent używa czcionki "Aller" i nie wiem czy to w sumie z tego powodu ale nie wyświetla polskich fontów. W żadnym z plików nie udało mi się znaleźć opcji odpowiadającej za zmianę fonta, są tylko od kolorków. Próbowałem też fizycznie we flashu dynamic text zmienić na Verdane ale też nie dało rady... encoding mam ustawiony na utf-8, ale to nic nie daje...

 

 

Jakby ktoś był chętny udzielić pomocy przy tym, z wytłumaczeniem kilku opcji, które się tam znajdują to byłbym wdzięczny. W zamian oczywiście cały komponent do własnych projektów.. :P

 

jak coś to gg: 3146942

 

Mam też pytanie czy mogę jeden komponent wykorzystać na stronie w dwóch miejscach (z różnym polem startowym). tzn Że w jednym MC ten sam komponent odpala się w kategorii Jedzenie, a w innym np napoje??

Edited by Kim Bo
Link to post
Share on other sites

Z tutoriala zrobiłem sobie tweena, z tym że po wpisaniu pewnej części kodu cała stronka odtwarza się w kółko zamiast przechodzić do odpowiednich labeli. Przestaje zwracać uwagę na jakąkolwiek funkcję stop(); nawet w buttonach. Oto kod w pierwszym frame'ie na oddzielnej warstwie:

 

stop();
import fl.transitions.Tween;
import  fl.transitions.TweenEvent;
import fl.transitions.easing.*;

var  homeTween:Tween = new Tween(glowna, "x", Regular.easeOut,glowna_mc.x, 90, 3,  true);

glowna_btn.addEventListener(MouseEvent.Click,  clickSection);
restauracja_btn.addEventListener(MouseEvent.Click,  clickSection);
bar_btn.addEventListener(MouseEvent.Click,  clickSection);
kontakt_btn.addEventListener(MouseEvent.Click,  clickSection);
function clikSection(evtObj:MouseEvent){  gotoAndStop(evtObj.target.name);
} 

 

 

pokazuje taki błąd :

1120: Access of undefined property "nazwa mc" (np glowna_mc)

1119: Access of possibly undefined property Click through a reference with static type Class.

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

We are using cookies. Read about our Privacy Policy