Autor Zpráva
RomanB
Profil *
Zdravím! :)

Pokouším se vytvořit prezentaci a rád bych udělal na každém slidu animaci, že texty při příchodu na slide "přijedou" a při přesunu na další slide zase "odjedou".

Dokázal jsem udělat, aby texty při příchodu přijely. Ovšem nedaří se mi už, aby texty při přechodu na další slide odjely.

Celé to vypadá takhle: http://romanbartos.cz/soubory/prez.swf (Ovládá se šipkami.)

stop();
stage.addEventListener(KeyboardEvent.KEY_DOWN, zmena_slidu);
function zmena_slidu(evt:KeyboardEvent):void
{
	if(evt.keyCode == 37) // LEFT
	{
		gotoAndStop(this.currentFrame-1);
	}
	else if (evt.keyCode == 39 || evt.keyCode == 32) // RIGHT OR SPACE
	{ 
		gotoAndStop(this.currentFrame+1);
	}
}



V jednotlivých framech Vrstvy 1 je poté tween, který tvoří efekt, že objekt "přijede".

Napadá vás, jak vytvořit, aby jednotlivé objekty nejen přijížděly, ale při přechodu na další frame také vyjížděly zpět nahoru?

Díky moc,
Roman
weroro
Profil
Ja síce AS3 neovládam, ale v AS2 by som to urobil nasledovne.
Ten layer v ktorom mas script natiahni nad všetky tri framey a daj do neho toto:
this.stop();
//
var scenaCislo:String;
//
var sipka:Object = new Object();
sipka.onKeyDown = function():Void  {
	if (Key.getCode() == 37 && _root._currentframe>1) {
		_root.vratenie = true;
		_root[_root.scenaCislo].play();
	} else if (Key.getCode() == 39 || Key.getCode() == 32) {
		if (_root._currentframe<3) {
			_root[_root.scenaCislo].play();
		}
	}
};
Key.addListener(sipka);
//
_root.onEnterFrame = function():Void  {
	if (_root[_root.scenaCislo]._currentframe == 20) {
		_root[_root.scenaCislo].stop();
	}
	if (_root[_root.scenaCislo]._currentframe == _root[_root.scenaCislo]._totalframes) {
		if (_root.vratenie) {
			_root.vratenie = false;
			_root.gotoAndStop(_root._currentframe-1);
		} else {
			_root.nextFrame();
		}
	}
};

Do každej tej animácie potom na prvý frame umiestni toto:
_root.scenaCislo = this._name;


Algoritmus ako taký by si si z toho odvodiť mal.
RomanB
Profil *
Super, díky moc! Je to chytrý :)

Přepsal jsem to do AS3, takže kdyby tě to (nebo někoho jinýho) zajímalo, funkční to vypadá takto:

stop();

var scenaCislo:Object;
var frameCislo:Number;

stage.addEventListener(KeyboardEvent.KEY_DOWN, zmena_slidu);
function zmena_slidu(evt:KeyboardEvent):void
{
	if (evt.keyCode == 37) {
		if (Object(root).currentFrame != 1) {
			Object(root).vratenie = true;
			Object(root).scenaCislo.play();
		}
	} else if (evt.keyCode == 39 || evt.keyCode == 32) {
		if (Object(root).currentFrame != Object(root).totalFrames) {
			Object(root).scenaCislo.play();
		}
	}
}

addEventListener(Event.ENTER_FRAME, prijeti_odjeti);
function prijeti_odjeti(event:Event) {
	if (Object(root).scenaCislo.currentFrame == 15) {
		Object(root).scenaCislo.stop();
	}
	if (Object(root).scenaCislo.currentFrame == Object(root).scenaCislo.totalFrames) {
		if (Object(root).vratenie) {
			Object(root).vratenie = false;
			Object(root).gotoAndStop(Object(root).currentFrame-1);
		} else {
			Object(root).nextFrame();
		}
	}
}


A v každé animaci na prvním framu je:
Object(root).scenaCislo = this;
Object(root).frameCislo = 15;


(Číslo 15 označuje, kde se slide "zastaví".)
weroro
Profil
Vyzerá to super :) Na môj vkus je ale v AS3 dáko priveľa listenerov :D Inak v tom to tvojom scripte si nepoužil tú premenú frameCislo, frame na ktorom to má zastať máš definovaný pevne v tej podmienke.
RomanB
Profil *
Jo, potom sem si toho všimnul, ale to už je jenom o přepsání toho čísla na proměnnou :) Já zase nikdy neuměl AS2 a až teď jsem se začal učit flash, tak jsem šel rovnou na AS3 a přijde mi to fajn. Jen zatím nemám v ruce všechny ty věci s animacema a podobně, ale to je o zkušenostech ;P Každopádně ještě jednou díky, bude to fajn prezentace :)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: