webForumDet fria alternativet

Starta ingång/utång i mc?

Flash

23 svar · 1 009 visningar · startad av krokodilen

Medlem sedan juni 200776 inlägg
Frågan#1

Tjena!

Jag har en meny med 4st knappar. Och 4st movieclips döpta "main_1, "main_2" osv. Dessa mc är mina undersidor och alla har de en ingång (frame 2-5) samt en utgång (frame 6-10). clipen syns alltid i stilla läge (frame 1) då de inte är aktiverade.

Följande knappar startar respektive mc:

knapp 1 -> "main_1"
knapp 2 -> "main_2"
knapp 3 -> "main_3"
knapp 4 -> "main_4"

Men hur gör jag för att vid tryck på tex knapp 1 starta "main_1" från frame 2 för att sedan vid tryck på annan knapp spela utgången i samma clip och sedan starta det valda clipets ingång (tex "main_4")?

Vill att dessa ska vara oberoende av varandra alltså att man ska kunna klicka på dom i vilken ording man vill, och att dess ingång/utgång alltid spelas.

Har en kod till knapparna som iaf startar clipen, kanske kan utgå ifrån det. :)

on (press){
this.main_1.gotoAndPlay(2);
}
on (press){
this.main_1.gotoAndPlay(6);
}

Har tidigare gjort typ samma grej fast med externa swf'er. (jag vill alltså ha allt i samma fla/swf denna gång). Men det kanske går att ta ngt ifrån den med.
Då använde jag mig utav koden:

knappen:

on (press)
{//loadMovieNum("main_1.swf", 2);
	if (_root.pressed_link<>1) {
		_level2.gotoAndPlay(6);
		_root.pressed_link = 1;
	}
}

undersida, sista framen:

load_link = "main_"+_root.pressed_link+".swf";
loadMovieNum(load_link, 2);

Kanske lite luddigt förklarat men hoppas ni förstår på ett ungefär iaf :)

Tack på förhand!

Medlem sedan dec. 2006608 inlägg
#2

Det lättaste är väl att skapa två variabler.
T ex:
current_mc
next_mc

Här kommer scenariot:
Du har precis visat main1, trycker på knapp2, lägger main2 i next_mc-variabeln, startar current_mc, som alltså är main1, från frame 6.
Main1 spelas till frame 10, då startar du next_mc, alltså main2 i det här fallet, från frame 2, och petar in main2 i current_mc-variabeln.
Klart som korvspad. :)

Vill inte ge dig nån kod eftersom man lär sig bäst genom att prova själv.
Hoppas iaf att du förstår vad jag menar.

/Patrik

Medlem sedan dec. 2006608 inlägg
#3

Jag var nog lite trött när jag läste igenom ditt inlägg igår.
För det jag skrev är ju i stort sett precis samma som du gjorde med de externa swf:erna, vilket är helt riktigt.
Du gör ju på precis samma sätt nu. :)

Medlem sedan juni 200776 inlägg
#4

Tack för de snabba svaren!
Haha ok :) Har ganska nyligen börjat med as men det är som du säger att man lär sig bäst genom att prova sig fram och exprimentera. Och jag har prövat en del med den kod jag annars använt mig utav som laddar externa swf'er och testat olika modifikationer men får det inte att fungera.
Du skulle inte kunna ge mig en liten ledtråd där iaf? :)
Det jag testat är bla. att ändra loadMovieNum till loadMovie, vilket jag har för mig ska ladda mc som finns i bibloteket och inte externt (men ändå letar den utanför fla'n?) . Tog också bort +".swf" och ändrade lite levels etc.

Sedan så vill jag ju att clippen visas redan ifrån början då de är stoppade på frame 1. Kan jag lägga till det på ngt sätt?

Ha d gott!

Medlem sedan dec. 2006608 inlägg
#5

Nu är jag nog inte helt med på hur du menar?
Ligger inte mc:na på _root-tidslinjen?
Isåfall behöver du ju inte ladda in dem... hmm. :q

Ifall jag har rätt och de ligger på _root-tidslinjen...
Ok, här kommer lite kod. :)

På frame 1 i _root-tidslinjen skapar du variablerna:

var currentMc_str:String = "";
var nextMc_str:String = "";

I knapparna:

on (release) {
	_root.nextMc_str = "main1";//Denna får du givetvis ändra beroende på vilken knapp det är (knapp1=main1, knapp2=main2 etc)
	if (_root.currentMc_str !== "") {
  		_root[_root.currentMc_str].gotoAndPlay(6);
	} else {
  		_root[_root.nextMc_str].gotoAndPlay(2);
	}
}

I movieclippen:
På frame 1 och 5:

stop();

På frame 10:

_root[_root.nextMc_str].gotoAndPlay(2);
_root[_root.currentMc_str].gotoAndStop(1);
_root.currentMc_str = _root.nextMc_str
Medlem sedan juni 200776 inlägg
#6

Jaha, jag hade för mig att jag läst att loadMovie laddade "interna" mc :OO . Hade tydligen fel där för visst har du rätt, de ligger på _root-tidlinjen :e

Nice! ska ta och laborera lite med din kod under morgondagen. Du är en klippa!

Ha d gott!

Medlem sedan juni 200776 inlägg
#7

Hmm..får inte clippen att spelas ifrån frame 6 vid tryck på annan knapp. Dom stannar på frame 5, men ingen utav dem spelar utgångarna.
Har både knapparna och clippen på _root-tidlinjen så det borde ju fungera. :OO
Har kontrollerat så att "stop();" är på rätt frames i clippen, för jag trodde det var det som muppa först, men det var det inte.

Någon idé om vad det kan vara för fel?

Medlem sedan dec. 2006608 inlägg
#8

Händer det ingenting överhuvudtaget?

Prova att lägga ett par trace i knapparna.
Så här:

on (release) {
	trace("_root.currentMc_str = "+_root.currentMc_str);
	_root.nextMc_str = "main1";//Denna får du givetvis ändra beroende på vilken knapp det är (knapp1=main1, knapp2=main2 etc)
	if (_root.currentMc_str !== "") {
  		trace("_root.currentMc_str innehåller något och borde spelas från frame 6");
  		_root[_root.currentMc_str].gotoAndPlay(6);
	} else {
 		trace("_root.currentMc_str är tom");
  		_root[_root.nextMc_str].gotoAndPlay(2);
	}
}

Om du då får upp texten "_root.currentMc_str är tom" fler ggr än första gången du trycker på en knapp så har jag skrivit fel nånstans. Annars vet jag inte vad det kan tänkas vara.
Du kan inte lägga upp .fla-filen här så man kan titta på den?

Medlem sedan dec. 2006608 inlägg
#9

En tanke, du har väl angivit instance name på movieclippen?
Men det borde du väl ha annars skulle det ju inte ha spelats något alls misstänker jag.

Medlem sedan juni 200776 inlägg
#10

jepp, han gett varje mc ett instance name.
Det stämmer, texten:

_root.currentMc_str =
_root.currentMc_str är tom

kommer upp varje gång du trycker på någon utav knapparna, inte bara först ggn alltså.

Har tyvärr ingen möjlighet att lägga upp fla'n för tillfället. Men jag får väll fortsätta att laborera lite. Men komer du på vad det är får du gärna höra av dig :) tack för hjälpen!

Ha d!

Medlem sedan dec. 2006608 inlägg
#11

Ändra knapparna till det här:

on (release) {
	trace("_root.currentMc_str = "+_root.currentMc_str);
	_root.nextMc_str = "main1";//Denna får du givetvis ändra beroende på vilken knapp det är (knapp1=main1, knapp2=main2 etc)
	if (_root.currentMc_str !== "") {
  		trace("_root.currentMc_str innehåller något och borde spelas från frame 6");
  		_root[_root.currentMc_str].gotoAndPlay(6);
	} else {
 		trace("_root.currentMc_str är tom");
  		_root[_root.nextMc_str].gotoAndPlay(2);
  		_root.currentMc_str = _root.nextMc_str;
	}
}

Och så har jag glömt ett semikolon (;) allra sist i koden på frame 10 i movieclippen.

Medlem sedan juni 200776 inlägg
#12

Jaa, nu fungerar det :) Men dock blir det lite skumt när man trycker på samma knapp 2 ggr i rad, men du kanske vet ngt bra sätt jag kan göra så att knappen som länkar till clippet man spelar, inte går att använda just då?

Grymt mannen! :)

Medlem sedan dec. 2006608 inlägg
#13

Det vet jag. :)
På frame 1 på _root-tidslinjen:

var currentMc_str:String = "";
var nextMc_str:String = "";
var btnPushed_bol:Boolean = false;

På knappen:

on (release) {
	if (!_root.btnPushed_bol) {
		_root.btnPushed_bol = true;
		var theMcToPlayNext_str:String = "main1";//Denna får du givetvis ändra beroende på vilken knapp det är (knapp1=main1, knapp2=main2 etc)
		if (_root.nextMc_str !==theMcToPlayNext_str) {
			trace("_root.currentMc_str = "+_root.currentMc_str);
			_root.nextMc_str = theMcToPlayNext_str;
			if (_root.currentMc_str !== "") {
  				trace("_root.currentMc_str innehåller något och borde spelas från frame 6");
  				_root[_root.currentMc_str].gotoAndPlay(6);
			} else {
 				trace("_root.currentMc_str är tom");
  				_root[_root.nextMc_str].gotoAndPlay(2);
  				_root.currentMc_str = _root.nextMc_str;
			}
		}
	}
}

På frame 5 i mc:na:

stop();
_root.btnPushed_bol = false;

Det där i knappen förhindrar att koden körs när samma knapp trycks två ggr i rad.
Det förhindrar också att knapparna trycks när något håller på att spela. Vill du inte ha den funktionaliteten så tar du bort allt som har med btnPushed_bol att göra. :)

Medlem sedan juni 200776 inlägg
#14

Ok, tack igen :)
Men när man nu trycker 2ggr efter varandra på samma knapp så låser sig allt, går inte att trycka på någon och det senaste clippet är i "öppet läge" på frame 5.
Men nu är det nära. I can smell it! :D

Medlem sedan dec. 2006608 inlägg
#15

Hekt riktigt, det beror på att jag hade lagt en kodsnutt fel.
Så här ska det vara.
På knappen:

on (release) {
	if (!_root.btnPushed_bol) {
		var theMcToPlayNext_str:String = "main1";//Denna får du givetvis ändra beroende på vilken knapp det är (knapp1=main1, knapp2=main2 etc)
		if (_root.nextMc_str !==theMcToPlayNext_str) {
			_root.btnPushed_bol = true;
			trace("_root.currentMc_str = "+_root.currentMc_str);
			_root.nextMc_str = theMcToPlayNext_str;
			if (_root.currentMc_str !== "") {
  				trace("_root.currentMc_str innehåller något och borde spelas från frame 6");
  				_root[_root.currentMc_str].gotoAndPlay(6);
			} else {
 				trace("_root.currentMc_str är tom");
  				_root[_root.nextMc_str].gotoAndPlay(2);
  				_root.currentMc_str = _root.nextMc_str;
			}
		}
	}
}
Medlem sedan juni 200776 inlägg
#16

Helt underbart! :) Fungerar helt utan probs.
Och om jag senare ska lägga clippen i ytterliggare ett clip är det bara att ändra koden i knapparna till typ

= clip.main_1;

då eller?

Tack än en gång! :e

Ha d gott!

Medlem sedan dec. 2006608 inlägg
#17

Ja, det borde funka.
Vassego. :)

Hur markerar jag vilket svar som löste mitt problem? ;)

Medlem sedan juni 200776 inlägg
#18

Tja igen :)

En sista grej bara.
Har nu mina mc i ett annat mc i _root som kallas "swish" och har då lagt till föjande kod i knapparna (ändringen är röd):

var theMcToPlayNext_str:String = [red]this.swish.main_1[/red];

Är det ngt mer jag måste ändra för jag får det ej att fungera. (inst. name för clippet "swish" finns).

Tycker inte att det borde vara några fler ändringar typ som i clippen, för _root är väll alltid _root?

Medlem sedan dec. 2006608 inlägg
#19

Hej hej, har du provat att ta bort this?

var theMcToPlayNext_str:String = swish.main_1;

möjligen lägger du också till citationstecken:

var theMcToPlayNext_str:String = "swish.main_1";
Medlem sedan juni 200776 inlägg
#20

A, jag provade både att ta bort this och lägga till citationtecken. Men det ville inte fungera.
Men jag gjorde en liten annan variant, jag flyttade mina variablar till clippet "swish" och ändrade alla "_root" i knapparna till "this.swish" istället, och till "_parent" i clippen. På så sätt slapp jag röra sökvägen till "main_" clippen.
Vill inte gå runt problem egentligen men det funkar :) Tack igen.

296 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
147 ms — deklarationer (db)
0 ms — hämta statistik (cache)
146 ms — hämta tråd, inlägg och bilagor (db)
146 ms — ändringar (db)