Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 19-01-2006, 08:53   #1 (permalink)
Neuer User
 
Registriert seit: Jul 2003
Beiträge: 321
mc in drei zuständen?

Hallo,
ich hab grad probleme eine idee umzusetzen. Und zwar gehts darum, dass ich eine Navigation mit 5 MC´s als Schaltflächen habe.

Da das eine art spiel fungieren soll, soll nicht jeder mc klickbar sein sondern wenn man die swf startet durch zufall ein mc ausgewählt wird welcher freigegeben ist. Dann sollen die anderen mc´s natürlich gesperrt sein, so dass bei, draufklicken nix passiert. Wenn ein button angewählt wurde, soll er aber nicht mehr anwählbar sein sondern für den rest der zeit gesperrt, ers sieht dann auch anders aus.

In meinem Beispiel wäre das zum Beispiel eine Vase. Wenn diese ziufällig frei zu klicken ist, kommt man zu einem bestimmten Spiel. Wenn man wieder zurück kommt ist die VAse also gesperrt und kaputt.

Also hat man im Prinzip 3 Zustände:

1.Gesperrt
2.aktiv
3.schon gedrückt/ gesperrt

Per SCript müsste ich dann ja sagen:


Wähle durch ZUfall (Mathrandom?) einen MC aus und aktiviere Ihn.
Warscheinlich hätte man dann auf den schalltflächen eine if schleife, in der abgefragt wird ob ein anderer mc aktiv ist. Wenn ja, dann Sperr mich wenn nein, dann geb mich frei.Und mit dem dritten Zustand könnte ich ja einfach ein weiteres Schlüsselbild mit denm schon geklickten Zustand machen, welches dann sowieso nicht mehr klickbar ist, und sagen wenn man drauf kilckt (vorrausgesetzt er ist aktiv) lade den externen Clip in dn container und springe zu SB 2, so dass wenn man wieder kommt man den dritten Zustand hat.


Mein Frage ist jetzt ist das so richtig gedacht?

Das Problem ist, dass ich mit Actionscript nur sehr schlecht umgehen kann.
Hab mich schonmal durchgesucht, aber das einzige Script was ich fand war das:
Code:
1. var aktiver_mc;
2. 	for(var i=0;i<anzahl;i++){
3.	this["mein"+i+"_mc"].onRelease=function(){
4.	// : deaktivieren des aktuell geklickten BTN
5.	this.enabled=false;
6.	// : reaktivieren des (falls) aktiven BTN
7.	aktiver_mc.enabled=true;
8.	// : neu speichern
9.	aktiver_mc=this;
10.	}
11.	}
könnt Ihr mir weiterhelfen, das wäre super!

Vielen Dank
benzrecordings ist offline   Mit Zitat antworten
Alt 19-01-2006, 13:26   #2 (permalink)
agedoubleju
Gast
 
Beiträge: n/a
Das Script zeigt doch aber schon mal die wichtigsten Ansätze: du kannst MCs über die enabled-Eigenschaft sperren oder freigeben. Einziges Problem ist bei MCs, die Events in einer for-Schleife bekommen, dass der Schleifenzähler - hier im Script ist das "i" - beim Durchlaufen der Schleife ständig überschrieben wird und nach Ablauf der Schleife höchstens noch der letzte Variableninhalt von "i" bekannt ist.

Das bedeutet also, dass bei der Verwendung mehrerer Events die Ziel-MCs sich den Schleifenzähler "i" merken müssen, bspw. als ID. Allerdings wird das in deinem Script nicht unbedingt notwendig sein. Mal ein kleiner Ansatz:
PHP-Code:
//auf der Hauptzeitleiste
var anzahl 5;

//MCs sollten einen fortlaufenden Instanznamen bekommen, bspw. meinMC1 bis meinMC5

for(var i=1);<= anzahl;i++){
   
_level0["meinMC"+i].enabled false;//alle MCs sperren
}


//eine Zufallszahl zwischen 1 und 5 ermitteln:
var zufall =  Math.floor(Math.random() * 5)+1;
trace("zufall="+zufall);//diesen Werten zum Überprüfen im Testmodus (STRG-ENTER) ausgeben lassen

//und nur den MC freischalten, der über die Zufallszahl ermittelt wurde:
_level0["meinMC"+zufall].enabled true;

//sicherheitshalber die Variable "zufall" im MC merken:
_level0["meinMC"+zufall].ID zufall;

//und diesem MC dann einen Klickevent geben:
_level0["meinMC"+zufall].onRelease = function(){
   
//nach Loslassen der Maustaste diesen Event wieder sperren
   
this.enabled false;
   
trace("this.ID="+this.ID);//mit this.ID kann dann der MC eindeutig spezifiziert werden
   //hier geht es dann weiter bspw. mit dem Aufruf weiterer Funktionen

  Mit Zitat antworten
Alt 19-01-2006, 14:02   #3 (permalink)
Neuer User
 
Registriert seit: Jul 2003
Beiträge: 321
Danke Holger für deine Hilfe!

also hab das mal ausprobiert und 5 mc´s erstellt.
Dann hab icgh das Script auf die HZ gelegt und bekamm diese Fehlermeldung:

Code:
**Fehler** Szene=Szene 1, Ebene=Ebene 2, Bild=1:Zeile 6: ';' erwartet
     for(var i=1);i <= anzahl;i++){ 

Anzahl der ActionScript-Fehler: 1 	 Gemeldete Fehler: 1
Ich glaube soweit hab ich das Verstanden allerdings wird jetzt noch nicht berücksichtigt, dass der einmal geklickte MC nie mehr aktiv sein darf oder?

Gruß
benzrecordings ist offline   Mit Zitat antworten
Alt 19-01-2006, 16:27   #4 (permalink)
agedoubleju
Gast
 
Beiträge: n/a
Eine Klammer falsch gesetzt...
PHP-Code:
 for(var i=1;<= anzahl;i++){ 
Zitat:
dass der einmal geklickte MC nie mehr aktiv sein darf oder?
Doch, schau dir noch mal den onRelease-Event an! Da wird enabled auf false gesetzt...

BTW: Schaltflächen zu zeigen, die keine Events auslösen können (oder mal gesperrt sind - mal nicht), ist eine schlechte Usability. Du solltest dir da grundsätzlich etwas anderes ausdenken...

Geändert von agedoubleju (19-01-2006 um 16:30 Uhr)
  Mit Zitat antworten
Alt 21-01-2006, 14:16   #5 (permalink)
Neuer User
 
Registriert seit: Jun 2005
Beiträge: 67
Danke, werds direkt nächste woche ausprobieren wenn ich an den rechner komme ;-

meld mich dann nochmal...

schönes WE gruß
dasend ist offline   Mit Zitat antworten
Alt 23-01-2006, 09:40   #6 (permalink)
Neuer User
 
Registriert seit: Jul 2003
Beiträge: 321
Hallo Holger,
danke für deine Hilfe. Die Zufallsvergabe scheint einwandfrei zu funktionieren. Leider steh ich schon wieder auf dem Schlauch.

also, beim Click auf den freigegebenen MC, soll ein Externer SWF in den "container.swf" geladen werden und der Film soll in das SB 2 des gekickten MC´s springen wo er dann anders aussieht, eine andere position hat und man ihn nicht mehr klicken kann.

Hab folgendes Sript draufgelegt:
Code:
on (release) {
	container_mc.loadMovie("spiel1.swf")
	gotoAndStop(2);
}
nur leider kann ich den MC immer anwählen, auch wenn er eigentlich gesperrt ist. Liegt es daran, dass das Script auf dem MC selbst liegt?
Wär schon ganz gut wenn ich das so machen würde, weil ch die mc´s anschließend individuell behandeln kann.

Weißt Du was ich falsch mach?
benzrecordings ist offline   Mit Zitat antworten
Alt 23-01-2006, 12:42   #7 (permalink)
agedoubleju
Gast
 
Beiträge: n/a
Zitat:
Weißt Du was ich falsch mach?
Vermutlich ein falscher Objektpfad. Trace dir deine Objektpfade aus und lass sie dann im Testmodus anzeigen...
  Mit Zitat antworten
Alt 23-01-2006, 13:52   #8 (permalink)
Neuer User
 
Registriert seit: Jul 2003
Beiträge: 321
tatsächlich das wars!

Hatte die MC´s falsch benannt!

Jetzt ist es im Moment ja noch so, das nur einmal per zufall einer freigegeben wird. Eigentlich soll danach dann ein anderer freigegeben werden, solange bis man alle ienmal angeklickt hat.

Ich möchte, ein Spiel in den container laden und nachdem es fertig gespielt ist wird es wieder entladen und man landet auf der Hauptnavigation.

Es soll also nach dem klicken auf den MC die Prozedur von vorne starten, mit Ausnahme von den schon geklickten. EIgentlich müsste man das Script dann ja nochmal starten allerdings dann die Clips ausnehmen die schon geklickt wurden, ich hab aber null Ahnung wie ich das komplizierte so umsetzen soll?

Ach ja ist es eigentlich möglich, dass man trotzdem bei allen noch nicht geklickten MC´s die Maushand sieht, auch wenn Sie gesperrt sind. So weiß der User, dass dahinter auch irgendwas steckt...

Ich hoffe es ist in Ordnung wenn ich soviel frage..
benzrecordings ist offline   Mit Zitat antworten
Alt 24-01-2006, 09:09   #9 (permalink)
Neuer User
 
Registriert seit: Jul 2003
Beiträge: 321
hatte grad ne Idee:

Ich könnte ja nachdem ich das 1.Spiel in den container geladen hab und fertig bin zum nächsten SB auf der HZ springen wo ich dann nur noch 4 von den 5 MC habe und den Code dann erneut aufrufe mit der entsprechend kleineren Variable.

Allerdings ist das ziemlich umständlich oder? Dann müsste ich für jeden Fall ein eigenes SB mit Code anlegen.

Man müsste das Script irgednwie in einer Schleife durchlaufen lassen, bis kein MC mehr aktiv sein kann, weil alle schonmal geklickt wurden. Die gecklickten kann man ja mit der ID im Script berücksichtigen so, dass diese gemerkt werden...
benzrecordings ist offline   Mit Zitat antworten
Alt 24-01-2006, 16:05   #10 (permalink)
Neuer User
 
Registriert seit: Jul 2003
Beiträge: 321
verdammt ich komm net daruf!

Wenn jemand ne idee hat wär ich sehr dankbar

bitteee
benzrecordings ist offline   Mit Zitat antworten
Alt 24-01-2006, 16:20   #11 (permalink)
°.oO°O.o°.oO.o°O
 
Benutzerbild von bamboocha
 
Registriert seit: Jun 2005
Ort: CH
Beiträge: 1.490
Ein bisschen Code als Denkgrundlage würde helfen!
Was hast du bis jetzt?
__________________
There is no way to happiness, happiness is the way! - Buddha
bamboocha ist offline   Mit Zitat antworten
Alt 24-01-2006, 16:45   #12 (permalink)
Neuer User
 
Registriert seit: Jul 2003
Beiträge: 321
hab die Fla. angehängt. Im Prinzip hab ich dank der Hilfe von "agedoubleju" fünf mc´s von denen per zufall einer freigegeben wird. bei klick auf diesen wird ein spiel in einen container geladen. wenn das beendet ist, soll wieder durch zufall der nächste mc freigeschaltet werden, natürlich nicht der schonmal aktivierte. Das soll dann solange passieren bis alle inmal aktiv waren.

Code:
//auf der Hauptzeitleiste 
var anzahl = 5; 

//MCs sollten einen fortlaufenden Instanznamen bekommen, bspw. meinMC1 bis meinMC5 

for(var i=1);i <= anzahl;i++){ 
   _level0["meinMC"+i].enabled = false;//alle MCs sperren 
} 


//eine Zufallszahl zwischen 1 und 5 ermitteln: 
var zufall =  Math.floor(Math.random() * 5)+1; 
trace("zufall="+zufall);//diesen Werten zum Überprüfen im Testmodus (STRG-ENTER) ausgeben lassen 

//und nur den MC freischalten, der über die Zufallszahl ermittelt wurde: 
_level0["meinMC"+zufall].enabled = true; 

//sicherheitshalber die Variable "zufall" im MC merken: 
_level0["meinMC"+zufall].ID = zufall; 

//und diesem MC dann einen Klickevent geben: 
_level0["meinMC"+zufall].onRelease = function(){ 
   //nach Loslassen der Maustaste diesen Event wieder sperren 
   this.enabled = false; 
   trace("this.ID="+this.ID);//mit this.ID kann dann der MC eindeutig spezifiziert werden 
   //hier geht es dann weiter bspw. mit dem Aufruf weiterer Funktionen 
}
nur leider hab ich keinen Plan wie ich diesen Code jetzt so erweiter dass er nach dem klicken auf den aktiven diesen bis zum ende sperrt und die zufallsfreigabe von neuem startet wie oben beschrieben...
Angehängte Dateien
Dateityp: zip zufallmc.fla.zip (6,6 KB, 6x aufgerufen)
benzrecordings ist offline   Mit Zitat antworten
Alt 24-01-2006, 19:45   #13 (permalink)
°.oO°O.o°.oO.o°O
 
Benutzerbild von bamboocha
 
Registriert seit: Jun 2005
Ort: CH
Beiträge: 1.490
Pack die MC's in ein Array und schreib dir ne Funktion, die jeweils die Array-Länge abfragt und dir dann entsprechend ne Zahl ausgibt, die du dann aus dem Array mit splice() entfernst!
__________________
There is no way to happiness, happiness is the way! - Buddha
bamboocha ist offline   Mit Zitat antworten
Alt 24-01-2006, 19:56   #14 (permalink)
Neuer User
 
Registriert seit: Jul 2003
Beiträge: 321
oh, das hört sich kompliziert an!

Kannst Du mir ein kleines beispiel geben, ich bin auch willig zu lernen, nur das scheint mir ne spur zu hoch....
benzrecordings ist offline   Mit Zitat antworten
Alt 24-01-2006, 20:15   #15 (permalink)
°.oO°O.o°.oO.o°O
 
Benutzerbild von bamboocha
 
Registriert seit: Jun 2005
Ort: CH
Beiträge: 1.490
PHP-Code:
var anzahl 6;
var 
mcsArr = new Array();
var 
mcsUsed = new Array();
for(var 
1anzahli++) {
     
mcsArr.push("meinMC"+i);
   
_level0["meinMC"+i].enabled false;//alle MCs sperren 

function 
aNewOne() {
     var 
zufall =  Math.round(Math.random() * (mcsArr.length-1))+1;
     var 
mc mcsArr[zufall];     
     
_level0[mc].enabled true;
     
_level0[mc].onRelease = function(){ 
         
this.enabled false
     }
     
mcsArr.splice(zufall);

__________________
There is no way to happiness, happiness is the way! - Buddha
bamboocha ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 20:19 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele