PDA

Volledige versie bekijken : Gebruik van Movieclip methods (gotoAndStop)


Zoop1984
%Europe/Berlin %892 %2007, 21:25
Hallo mensjes,

Ik ben sinds kort eens aan de slag gegaan met Adobe Flex Builder 2, maar dat AS3 valt nog best tegen ... Ik kom wel een aardig eind, maar paar kleine dingetjes krijg ik niet helemaal voor elkaar, zoals deze

Ik heb een ActionScript project genaamt BallGame.as, met een losse actionScript voor SoccerBall.as,

In SoccerBall.as embed ik soccerBall.swf, deze swf bevat 32 frames-tellende animatie.

Wat ik nou wil, is, soccerBall.swf aan kunnen sturen, om naar een bepaalde frame te gaan, alleen lukt dit niet echt.

Ik embed de file met
[Embed(source="soccerBall.swf")]

Maak er een class van met

private var SoccerBallSWF:Class;
public var SoccerBallMC:MovieClip = new SoccerBallSWF();


Maar nu nog simpelweg tegen de soccerBall kunnen zeggen welke frame deze moet zijn dus, in een


public function onEnterFrame(e:Event):void {
SoccerBallMC.gotoAndStop(20);
}


bijvoorbeeld, (die 20 wordt later natuurlijk een variabele), maar er gebeurd gewoon niks, heb van alles geprobeerd ...

Iemand suggesties?

TheDutch
%Europe/Berlin %640 %2007, 15:22
Zoop,

Het is niet mogelijk om met ActionScript in Flex 2 een embedded SWF gemaakt voor Flash Player 8 of eerder aan te sturen. Om dit te realiseren dien je gebruik te maken van LocalConnection :).

Erwin

Zoop1984
%Europe/Berlin %642 %2007, 15:24
Ok dan! zat me al rot te proberen, haha snapt er niks van. Ok, klinkt logisch, kga er mee aan de slag, many thanks!

Ik zal later wel een updatje poste waar ik mee bezig ben

PS: Heb ook Adobe Flash 9 Public Alpha, zou het uitmaken om daar mijn SWF's mee te builden? Kan ik ze dan wel aansturen? het liefste zou ik gewoon direct tegen de ge-embedde files kunnen zeggen welke frame ze moeten spelen, anders moet ik hier nog best moelijk voor doen, voor iets simpels ...

TheDutch
%Europe/Berlin %642 %2007, 15:25
Top! :D

Zoop1984
%Europe/Berlin %648 %2007, 15:33
Hmm, de flash files gebuild voor flash player 9 en as3, geloof niet dat het echt uitmaakt ... Naja, LocalConnection maar probere dan

TheDutch
%Europe/Berlin %654 %2007, 15:42
Laat hij uberhaupt de SWF wel zien?

TheDutch
%Europe/Berlin %659 %2007, 15:50
Ik denk dat je moet kijken naar de SWFLoader class om SWF's op de stage te zetten. Het embedden van SWF's hoe je dat nu doet is meer bedoeld voor assets in SWF bestanden :).

http://livedocs.macromedia.com/flex/2/langref/mx/controls/SWFLoader.html

Zoop1984
%Europe/Berlin %662 %2007, 15:54
ja dat wel, werkt prima ...

Zou ik em wel aan moeten kunnen sturen met Flash9 AS3 swf's?
Zoja, dan doe ik daar nog iets fout, maar veel moelijker dan


[Embed(source="cursor.swf")]
public var cursorSWF:Class;
public var cursorMC:MovieClip = new cursorSWF();

cursorMC.gotoAndStop(20);


kan het toch niet zijn lijkt mij?


Ok zal naar die loader kijken

TheDutch
%Europe/Berlin %665 %2007, 15:58
Persoonlijk heb ik er nog weinig ervaring mee, nog niet eerder nodig gehad om echt een SWF aan te sturen vanuit Flex 2.

Volgens de LiveDocs zouden Flash9 / AS 3 SWF's gewoon aanstuurbaar moeten zijn :).

TheDutch
%Europe/Berlin %676 %2007, 16:14
Hier een goed artikel over het embedden van SWFs in Flex 2 en het aansturen dmv. LocalConnection: http://studio.brightcove.com/library/howto/embed-in-flex/

Loekasjenko
%Europe/Berlin %726 %2007, 17:26
Hallo Flashfocussers....

Ik ben sinds kort ook aan de Flexbuilder/as3 en zit met precies hetzelfde probleem. Ik wil swf's die een animatie bevatten aanspreken en een commando kunnen geven als MijnSWF.gotoAndPlay("someFrame");

Het lukt me wel om een movieclip uit een externe swf op de stage te krijgen met Flex, maar de MovieClip-methods als gotoAndPlay zijn dan niet beschikbaar. Ook niet als je die externe swf compiled met 'Flash 9 Public Alpha' en as3 geselecteerd in de publishsettings.

Is er echt geen andere oplossing te vinden dan die LocalConnection workaround? Dat vind ik maar niks...

Groeten,
Lukas

TheDutch
%Europe/Berlin %882 %2007, 21:10
Wanneer je de SWFLoader (http://livedocs.macromedia.com/flex/2/langref/mx/controls/SWFLoader.html) gebruikt kan je de external SWF - mits gepublished voor versie 9 van de Flash Player - gewoon met de "content" property benaderen en daar acties binnen uitvoeren zoals gotoAndPlay().

Wanneer de external SWF geplubished is voor versie 8 of lager van de Flash Player, dan ben je genoodzaakt gebruik te maken van LocalConnection ivm. de twee verschillende Virtual Machines die er in de Flash Player draaien :).

Loekasjenko
%Europe/Berlin %252 %2007, 06:04
Bedankt voor de snelle reactie...
Okee, de SWFLoader dus. Hoe roep ik zoiets aan?
Ik zou eigenlijk verwachten dat je bovenaan je Klasse de volgende onderdelen moet importeren:

mx.controls.Image
mx.controls.SWFLoader

Maar als ik dat doe gaat Flexbuilder over z'n nek... :(

Loekasjenko
%Europe/Berlin %259 %2007, 06:14
Die SWFLoader, is dat een standaard class die je kan importeren?
Ik kan hem wel aanmaken maar zodra ik load() doe gaat het mis, en in de documentatie zie ik toch echt een method genaamd "load". Strange...

Ik gebruikte eerst telkens:

[Embed(source='mijnSwf.swf#someclip')] public var myclip:Class;

Eerst deed hij het dus niet. Ik kon de instantie van de Swf waarnemen op het scherm maar de gotoAndPlay functies deden het niet. Nu doetie het ineens wel, weet niet precies waar nou de fout zat. Maar ja, die SWFLoader is wat anders neem ik aan?
Ik merkte ook op net dat code die in de movieclip staan van de externe swf niet word uitgevoerd. Weet iemand daar nog een oplossing voor?

Dank...
Lukas

TheDutch
%Europe/Berlin %280 %2007, 06:43
Die SWFLoader, is dat een standaard class die je kan importeren?

Alles wat je met MXML kan kan ook met ActionScript gerealiseerd worden (http://flashfocus.nl/forum/showthread.php?t=25824)


Ik kan hem wel aanmaken maar zodra ik load() doe gaat het mis, en in de documentatie zie ik toch echt een method genaamd "load". Strange...

Wat gaat er mis, wees duidelijk! Laat ook code zien...


Maar ja, die SWFLoader is wat anders neem ik aan?
Ik merkte ook op net dat code die in de movieclip staan van de externe swf niet word uitgevoerd. Weet iemand daar nog een oplossing voor?

De SWFLoader is een Flex Component/Class die bedoeld is om SWFs mee in Flex 2 applicaties te laden. De SWFLoader is onderdeel van het Flex 2 Framework en gemaakt voor het eenvoudig inladen van SWF's en biedt daarnaast de grootste compatibiliteit met de rest van het Flex 2 Framework en dus ook de Flex 2 applicatie die je nu aan het bouwen bent. Het is dan ook zeer aan te raden de SWFLoader te gebruiken binnen Flex 2 i.p.v. [Embed(source="")].

Waarom de code niet wordt uitgevoerd heeft waarschijnlijk te maken met hoe je de code hebt opgebouwd in je SWF. Misschien kan je hier wat meer van laten zien en wat meer uitleg geven over wat je precies doet en wat dan precies niet werkt?

Loekasjenko
%Europe/Berlin %791 %2007, 18:59
Okee...

// In de constructor maak ik een nieuwe swfloader aan
MySWFLoader = new SWFLoader();
// Dan laad ik de swf genaamd 'extra.swf' in
MySWFLoader.load("extra.swf");

Bij beide regels code krijg ik een error melding:
1046: Type was not found or was not a compile-time constant: SWFLoader
1120: Access of undefined property

De swf die 'extra.swf' heet, bevat een movieclip met een linkage identifier genaamd "myclip"
Ik maak hier echt ergens een hele suffe fout, maar zou toch niet weten waar hij dan in zit... doe ik niet iets fout bij het importen van classes? Ik laad in mijn klasse namelijk niks met import dat betrekking heeft op de SWFLoader.


alvast bedankt,
Lukas

TheDutch
%Europe/Berlin %800 %2007, 19:12
Je moet wel de class SWFLoader importeren :).

import mx.controls.SWFLoader;

Loekasjenko
%Europe/Berlin %851 %2007, 20:26
Juist! En daar ligt ergens een probleempje...
Als ik namelijk die import doe die jij nu voorstelt krijg ik de volgende errormelding:

1172: Definition mx.controls:SWFLoader could not be found. Game.as

Die hele directory mx.controls word niet herkend!
:(:(:(

TheDutch
%Europe/Berlin %866 %2007, 20:47
Laat al je code eens zien :).
Je gebruikt toch wel FlexBuilder hé? Zoals je aangaf in je eerste bericht.

Loekasjenko
%Europe/Berlin %893 %2007, 21:26
Dit is mijn Game Class. Staat een hoop troep in die ik er nog uit moet gooien, maar het gaat nu dus even om die import mx.controls.SWFLoader

package {
import flash.display.Sprite;
import flash.display.StageScaleMode;
import flash.display.StageAlign;
import flash.display.MovieClip;
import flash.display.BitmapData;
import flash.display.Bitmap;
import mx.controls.*;



public class Game extends Sprite
{
public static var TILESIZE:Number = 32;
public static var STAGEWIDTH:Number = 544;
public static var STAGEHEIGHT:Number = 416;
public static var MAPWIDTH:Number = STAGEWIDTH / TILESIZE;
public static var MAPHEIGHT:Number = STAGEHEIGHT / TILESIZE;
public static var STAGE:Object;
public static var STATUS:String;

public static var archive:Object;
public static var player:Object;
public static var enemies:Object;
public static var map:Object;
public static var leveleditor:Object;
//public static var s:SWFLoader;

//[Embed(source='extra.swf#myclip')] public var somestupidclip:Class;

public function Game() {


this.stage.scaleMode = StageScaleMode.NO_SCALE;
this.stage.align = StageAlign.TOP;
this.stage.frameRate = 2;
Game.STAGE = this.stage;
Game.STATUS = "leveleditor";

init();
}


public function init():void {
/*if(Game.STATUS=="leveleditor") {
archive = new Archive();
archive.init();

leveleditor = new Leveleditor();
}else if(Game.STATUS=="game") {

}*/

//archive = new Archive();
//archive.init();

//map = new Map();
//map.init();

//var o:Object = new somestupidclip();
//o.gotoAndStop("blue");

//var MySWFLoader:SWFLoader = new SWFLoader();
//MySWFLoader.load("extra.swf");






//swfloader = new SWFLoader(); //var sprite:Sprite = new Sprite();
//swfloader.load("extra.swf");
//swfloader.loader("extra.swf");
//swfloader.content
//Game.STAGE.addChild(o);

//player = new Player();
//player.init();
}
}
}



Ja, ik gebruik Adobe Flexbuilder 2...

Loekasjenko
%Europe/Berlin %902 %2007, 21:38
en zelfs nu, terwijl alles uit gecommentariseerd is, geeft hij bij mij bovenin bij de import's een foutmelding...

TheDutch
%Europe/Berlin %990 %2007, 23:45
Welke foutmelding en post je code eens tussen [ as][/ as] tags :).

// EDIT: "mx.controls: SWFLoader" moet "mx.controls.SWFLoader" zijn. Loop je code dus goed na om te zien of je alles zonder typfouten hebt neergezet.

Loekasjenko
%Europe/Berlin %078 %2007, 01:52
Het feit dat je me er op wijst om alle code eens goed op spellingsfouten te controleren kan ik goed begrijpen. Toch weet ik 99,9% zeker dat de onderstaande code correct zou moeten zijn. Ik heb een nieuw project aangemaakt in Flexbuilder. Het enige wat ik in deze klasse doe is die import: import mx.controls.SWFLoader;

Ook in deze totaal lege klasse geeft hij een fout aan bij die betreffende import. De map mx.controls bestaat helemaal niet in mijn Flexbuilder... :S :S


package {
import flash.display.Sprite;
import mx.controls.SWFLoader; // <---- DEZE KENT FLEXBUILDER BIJ MIJ DUS NIET!!!


public class test extends Sprite
{
public function test()
{


}
}
}



Is het probleem niet toevallig gerelateerd aan het ontbreken van een Classpath naar bepaalde standaard Classes van Flex?? (ruwe gok)

TheDutch
%Europe/Berlin %267 %2007, 06:24
Hier werkt het gewoon prima! :).
Heb je toevallig Flex Builder als plugin geinstalleerd bovenop Eclipse?

Loekasjenko
%Europe/Berlin %764 %2007, 18:20
Nee, ik heb de standalone versie: FLXB_2.0_Win_WWE.exe

Wat is de exacte bestandsnaam van jouw versie?

TheDutch
%Europe/Berlin %773 %2007, 18:34
Ik zie al wat je probleem is. Je hebt er voor gekozen een ActionScript Project aan te maken in plaats van een Flex Project. Je moet een Flex Project aanmaken om ook van de Flex functionaliteiten gebruik te maken. Een ActionScript Project is niets meer dan een ActionScript 3 project zonder Flex 2 componenten of classes.

Maak dus een Flex Project aan en ga daar je classes in maken via New >> ActionScript Class :).

Loekasjenko
%Europe/Berlin %213 %2007, 05:07
Aaaaaaaaah 8D Dat is het...

Bedankt, respect++;

Lukas

rackdoll
%Europe/Berlin %524 %2007, 12:34
dat zou moeten kloppen.
Die import fout geeft hij vaak aan bij externe builders.
Je zou kunnen proberen een reinstall van de flex builder sdk.
Dat zou het moeten oplossen denk ik ;)
Wel even wat werk maar dan heb je ook wat.

TheDutch
%Europe/Berlin %774 %2007, 18:35
Heeft er helemaal niets mee te maken Rackdoll. Het verschil zat hem gewoon in welk project er aangemaakt werd en welke libraries er dan beschikbaar zijn.

Dit onderwerp is ook al een geruime tijd opgelost :).