F8 - ukrywanie cantainera

Technologia Flash, czyli animacja na potrzeby stron WWW to świat daleko odbiegły od zwykłego programowania i kodu. Zapytaj o pomoc i podziel się z nami Twoimi problemami z zakresu Flasha.
hdhkff
Nowy
Nowy
Posty: 101
Rejestracja: pt sty 04, 2008 10:52 pm

Re: F8 - ukrywanie cantainera

Post autor: hdhkff »

Przepraszam.

Kod: Zaznacz cały

		if (targetMc._currentframe == targetMc._totalframes) {
			index == pliki.length - 1 ? index = 0 : index++;
Ten kawałek kodu zawiera warunek, mówiący o tym kiedy ma nastąpić przejście z jednego filmu do drugiego. Próbuję zmienić trochę ten warunek, wstawiając w we wszystkie filmiki funkcję iend:

Kod: Zaznacz cały


function iend() {
   trace(1); // nie wiem czy polecenie trace 1 ma znaczenie w momencie gdy ów kod zamieszczony jest wewnątrz filmików nie koniecznie w głównej listwie czaswoej i niekoniecznie w klatce nr 1
} 
Co chcę osiągnąć funkcją iend to przeskok do następnego filmiku ( z poziomu filmiku ładującego ) w momencie gdy wskaźnik dojdzie do klatki, w którym ów kod jest zawarty ( w filmiku ładowanym ).

próbowałem w taki sposób:

Kod: Zaznacz cały

		if (targetMc._currentframe == funkction (iend)) {
			index == pliki.length - 1 ? index = 0 : index++;
ale otrzymuję od flasha informację o błędzie składni.
Jak to zmienić ?
Marek_bf
Administrator
Posty: 4419
Rejestracja: czw lut 24, 2005 2:14 am
Kontakt:

Re: F8 - ukrywanie cantainera

Post autor: Marek_bf »

Skąd w ogóle takie coś wziąłeś:
if (targetMc._currentframe == funkction (iend)) {
? :)

Mały jest sens takiego rozwiązania ale:

Wczytywany 1 klatka:

Kod: Zaznacz cały

var test:Boolean;
function iend() {
	test = true;
}
Klatka która ma być wykryta:

Kod: Zaznacz cały

iend();
We wczytującym:

Kod: Zaznacz cały

var index:Number = 0;
var pliki:Array = new Array("1.swf", "2.swf", "3.swf");
this.createEmptyMovieClip("containerMc", 1);
this.createEmptyMovieClip("oEfMc", 2);
var mclListener:Object = new Object();
mclListener.onLoadInit = function(targetMc:MovieClip) {
	oEfMc.onEnterFrame = function() {
		if (targetMc.test) {
			index == pliki.length - 1 ? index = 0 : index++;
			delete this.onEnterFrame;
			laduj();
		}
	};
};
var imageMcl:MovieClipLoader = new MovieClipLoader();
imageMcl.addListener(mclListener);
laduj();
function laduj():Void {
	imageMcl.loadClip(pliki[index], containerMc);
}
hdhkff
Nowy
Nowy
Posty: 101
Rejestracja: pt sty 04, 2008 10:52 pm

Re: F8 - ukrywanie cantainera

Post autor: hdhkff »

Skąd w ogóle takie coś wziąłeś:
Większość moich kodów as jest konstruowana na wyczucie. Kopiuje i mieszam ze sobą znane mi już funkcję, dla tego też czasem piszę ''dziwne'' kody :).
Mały jest sens takiego rozwiązania ale:
Sens tego rozwiązania, w moim przypadku jest taki:
...moje filmiki się nie kończą. Tzn. składają się z mc które zapętlają się w nieskończoność, gdyż są umieszczone na głównej listwie czasowej w klatkach nr 1. W jednym z paternów zamieszczony jest osobny mc odpowiedzialny za wyświetlanie się i znikanie tekstu, po którego całkowitym zniknięciu chcę by załadował się filmik nr 2 - stąd pomysł na funkcję iend.

Zainstalowałem kod który napisałeś, ale nie przeskoczyło do kolejnego filmiku po osiągnięciu klatki iend(); w pierwszym załadowanym filmiku. Może ma znaczenie, że ów klatka umieszczona jest wewnąrtrz mc, który znajduje się wewnątrz innych dwóch movie clipów ?
Marek_bf
Administrator
Posty: 4419
Rejestracja: czw lut 24, 2005 2:14 am
Kontakt:

Re: F8 - ukrywanie cantainera

Post autor: Marek_bf »

Niepoprawnie adresujesz, jeśli wywołujesz tę funkcję w jakimś MC to wynik jej wywołania powinien być dostępny na scenie głównej, czyli trzeba zastosować odpowiednią ilość _parent.
hdhkff
Nowy
Nowy
Posty: 101
Rejestracja: pt sty 04, 2008 10:52 pm

Re: F8 - ukrywanie cantainera

Post autor: hdhkff »

Działa po korekcji adresowania.
Mam pewien problem z wczytaniem filmiku nr 3 .:
Dla większej przejrzystości - skład problemu: preloader, filmik1, filmik2, filmik3.
filmik2 i filmik3 pierwszą klatkę mają pustą z akcją stop i funkcją e, by w odpowiednim momencie za jej pomocą przeskoczyć do klatek nr 2.

Preloader:
Klatka 1a

Kod: Zaznacz cały

// za pomocą tego podczas odtwarzania filmiku1 ładują się i zatrzymują w pierwszych pustych klatakach filmiki 2 i 3 //
var containerMc3:MovieClip = this.createEmptyMovieClip("containerMc3", this.getNextHighestDepth());
var mclListener:Object = new Object();
var image_mcl:MovieClipLoader = new MovieClipLoader();
image_mcl.addListener(mclListener);
containerMc3._x = 0;
containerMc3._y = 0; 
image_mcl.loadClip("filmik2.swf",containerMc3);

var containerMc4:MovieClip = this.createEmptyMovieClip("containerMc4", this.getNextHighestDepth());
var mclListener:Object = new Object();
var image_mcl:MovieClipLoader = new MovieClipLoader();
image_mcl.addListener(mclListener);
containerMc4._x = 0;
containerMc4._y = 0; 
image_mcl.loadClip("filmik3.swf",containerMc4);
klatka 1b

Kod: Zaznacz cały

//kolejkowanie//
var index:Number = 0;
var pliki:Array = new Array("filmik1.swf", "filmik2.swf", "filmik3.swf");
this.createEmptyMovieClip("containerMc", 1);
this.createEmptyMovieClip("oEfMc", 2);
var mclListener:Object = new Object();

mclListener.onLoadInit = function(targetMc:MovieClip) {
   oEfMc.onEnterFrame = function() {
      if (targetMc.test) {
         index == pliki.length - 1 ? index = 0 : index++;
	 
		 mclListener.onLoadInit = function(e) {
   e.gotoAndPlay(2);
		 };
 
		
         delete this.onEnterFrame;
         laduj();
      }
   };
};
var imageMcl:MovieClipLoader = new MovieClipLoader();
imageMcl.addListener(mclListener);
laduj();
function laduj():Void {
   imageMcl.loadClip(pliki[index], containerMc);
}
filmik1
klatka1 na głównej listwie czasowej

Kod: Zaznacz cały

var test:Boolean;
function iend() {
   test = true;
}
klatka wewnątrz mc umiejscowionego wewnątrz mc ...

Kod: Zaznacz cały

_parent._parent._parent.iend();
filmik2
klatka 1 na głownej listwie czasu

Kod: Zaznacz cały

function e() {
   trace(1);
} 
klatka 2 na głównej listwie czasu

Kod: Zaznacz cały

var test:Boolean;
function iendy() {
   test = true;
}
klatka wewnątrz mc umiejscowionego wewnątrz mc ...

Kod: Zaznacz cały

_parent._parent._parent._parent.iend();
filmik3
klatka 1 na głownej listwie czasu

Kod: Zaznacz cały

function e() {
   trace(1);
} 
--------------------------------------------------------------------------------------------
Działanie:
Odpalam preloader, ładuje się filmik1, który po dojechaniu do pewnej klatki przeskakuje na filmik 2 do drugiej klatki. Filmik 2 dociera do pewnej klatki w której chcę wykonać przeskok do filmiku 3 , niestety filmik3 nie ładuję się, nie odpala, lub nie przeskakuje do klatki 2 ---> nie działa w każdym bądź razie, mimo, że zastosowałem te same funkcję dla filmiku2 co dla filmiku1.
Gdzie leży błąd ?
hdhkff
Nowy
Nowy
Posty: 101
Rejestracja: pt sty 04, 2008 10:52 pm

Re: F8 - ukrywanie cantainera

Post autor: hdhkff »

Marku, rozwiązanie tej sytuacji zamknie już mój problem.
hdhkff
Nowy
Nowy
Posty: 101
Rejestracja: pt sty 04, 2008 10:52 pm

Re: F8 - ukrywanie cantainera

Post autor: hdhkff »

Napisz proszę czy z chwilą wolną mogę liczyć na podpowiedź, czy raczej radzić sobie w inny sposób ?
Marek_bf
Administrator
Posty: 4419
Rejestracja: czw lut 24, 2005 2:14 am
Kontakt:

Re: F8 - ukrywanie cantainera

Post autor: Marek_bf »

Możesz liczyć na odpowiedź, ale ja nie wiem, co Ty chcesz uzyskać a patrząc na ten kod, który podajesz to mam wrażenie, że ciężko Ci będzie uzyskać cokolwiek. Dlaczego nie zaczniesz od podstaw, które kolejno pozwolą Ci poznać zasady pracy we Flashu a przede wszystkim poprawnego adresowania.
hdhkff
Nowy
Nowy
Posty: 101
Rejestracja: pt sty 04, 2008 10:52 pm

Re: F8 - ukrywanie cantainera

Post autor: hdhkff »

Marek_bf
Administrator
Posty: 4419
Rejestracja: czw lut 24, 2005 2:14 am
Kontakt:

Re: F8 - ukrywanie cantainera

Post autor: Marek_bf »

Tak w praktyce jak i w teorii nie wiem, o co Ci chodzi. Dałem Ci gotowy przykład. Dopisałeś do niego jakieś kody nie stąd ni zowąd, jak leci :) Jeszcze raz Ci mówię, zajmij się podstawowymi zagadnieniami i poznawaniem składni, bo teraz to improwizujesz nie znając nut. Zobaczysz, że jak się ogarniesz i zaczniesz poznawać Flasha krok po kroku wszystko pójdzie szybciej.
hdhkff
Nowy
Nowy
Posty: 101
Rejestracja: pt sty 04, 2008 10:52 pm

Re: F8 - ukrywanie cantainera

Post autor: hdhkff »

Szkoda, że nie wiesz o co mi chodzi Marku. Masz rację improwizuję nie znając nut. Wynika to z tego iż nie jestem programistą i w pełni nie interesuje mnie ta dziedzina informatyki. Wszystko do czego chciałem wykorzystać flasha to połączyć moją pasję graficzną, muzyczną i pomysł jaki miałem na to połączenie. Niestety nie osiągnę tego bez kodu. Na początku chciałem rozwikłać to sam, potem złożyłem Ci propozycję, teraz to już biję głową w mur. No cóż, nic już tu po mnie w w tym wątku. Dziękuję za poświęcony mi czas. Pozdrawiam.
Cyryl.
Marek_bf
Administrator
Posty: 4419
Rejestracja: czw lut 24, 2005 2:14 am
Kontakt:

Re: F8 - ukrywanie cantainera

Post autor: Marek_bf »

Ty lepiej wytłumacz, co chcesz uzyskać, bo ja się pogubiłem
hdhkff
Nowy
Nowy
Posty: 101
Rejestracja: pt sty 04, 2008 10:52 pm

Re: F8 - ukrywanie cantainera

Post autor: hdhkff »

Zrobiłem we flashu 3 filmiki o przykładowych tytułach filmik 1 , filmik 2 i filmik 3.
Załóżmy, że filmik 1 zajmuję bardzo nie wiele przestrzeni dyskowej, ale trwa ponad minutę , natomiast filmik 2 i filmik 3 osobno ważą około 1 mb. Jest to sporo czasu jeżeli miały by one dogrywać się dopiero po ukończeniu poprzedniego, czyli gdy filmik 1 się kończy dopiero zaczyna ładować się filmik 2 itd. Chcąc uniknąć takiej sytuacji pomyślałem, że dobrym rozwiązaniem było by zacząć ładowanie filmiku 2 i filmiku 3 podczas odgrywania filmiku 1. W tym celu stworzyłem czwarty filmik zatytułowany preloader, który pokierował by całym procesem ładowania się filmików.
Sytuacja jest o tyle skomplikowana, że warunkiem wyświetlenia się kolejnych filmików, jest osiągnięcie odpowiedniej klatki w filmikach poprzedzających, czyli gdy filmik 1 osiągnie odpowiednią klatkę nastąpi przeskok na filmik 2 i gdy filmik 2 osiągnie odpowiednią klatkę nastąpi przeskok na filmik 3.

Pomysłem na obsłużenie takiej sytuacji jest umieszczenie w pierwszych klatkach filmiku 2 i filmiku 3 (filmików ładowanych podczas odtwarzania filmiku 1) , jedynie akcji stop. Wszystkie widoczne elementy rozpoczynały by swój bieg od klatki nr 2.

W paczce preloader.rar , którą podesłałem wcześniej filmik 2 odpala się bez problemów, gdy filmik 1 osiągnie odpowiednią klatkę, natomiast filmik 3 nie odpala się w momencie gdy filmik 2 osiągnie odpowiednią klatkę. Dla obu filmików (filmik 1 i filmik 2) zastosowałem te same funkcję, którą nazwałem ''iend'', oczywiście z odpowiednim adresowaniem.
Marek_bf
Administrator
Posty: 4419
Rejestracja: czw lut 24, 2005 2:14 am
Kontakt:

Re: F8 - ukrywanie cantainera

Post autor: Marek_bf »

hdhkff
Nowy
Nowy
Posty: 101
Rejestracja: pt sty 04, 2008 10:52 pm

Re: F8 - ukrywanie cantainera

Post autor: hdhkff »

Zainstalowałem Twój kod. Działa. Jedna sprawa tylko mnie zastanawia. Zwróć uwagę proszę na początek pierwszego filmiku . Wczytuje się kryształ by po około 3 sekundach samoistnie przeskoczyć do dalszej części filmiku. Jeśli jednak odświeżysz aplikację, lub odpalisz ją ponownie działanie jest poprawne. Zauważyłem też na drugim komputerze , kiedy aplikacja dochodzi do filmiku 2, w okienkach opowiadających historię, wyświetlana jest dziwna czcionka, za duża i wogólę nie ta którą użyłem w projekcie. Do tej pory myślałem że tak jak wyeksportujesz plik flash, tak jest on wyświetlany , niezależnie od platformy na której się go ogląda.
I ostatnia rzecz, jak kończy się filmik 2 ( '' idź tam gdzie to wszystko się zaczęło '' ) chciałbym by muzyka się wyciszała do zera. Dźwięk ten jest kilkunasto sekundową sekwęcją odpalaną i zapętlaną za pomocą

Kod: Zaznacz cały

var snd = new Sound(this);
      snd.loadSound("http://cyryl.i365.pl/lab/muzyka.mp3", true);
snd.onSoundComplete = function() {
   this.start();
}; 
No i to by było na tyle naszych zmagań z tym projektem. Jeszcze Ci za wszelką pomoc odpowiednio podziękuję, a tym czasem już jestem Twoim dłużnikiem :)
Póki co link do sprawdzenia tego co opisałem wyżej zostawiam Ci na prv Marku. Jak zamieszczę oficjalnie projekt w sieci, uaktualnie ten wątek tak by w razie czegoś, ktoś inny mógł skorzystać z podanych tutaj rozwiązań.
ODPOWIEDZ