{lang: 'de'}
Flashhilfe.de - Flash Community

Actionscriptcommando für verschiedene Scenes gültig, wie? [Flash 10]

 


AntwortenRegistrieren Seite1  

flashmon1#1
Benutzerbild von flashmon1
Beiträge: 4
Registriert: Dec 2015

10.12.2015, 17:58

Wie kann man bei Flash in einer Scene Actionscript so formulieren, dass es in anderen Scenen wirkt und Scenen beim abspielen nicht nur von vorne starten?


Ich mache ein Room Escape Game mit Flash, also so ne Art Monkey Island-Style Adventure.
Es gibt den Raum Küche, der in einer "Scene" läuft und den Raum Wohnzimmer, der in einer anderen Szene läuft.

In der Scene Küche gibt es den Backgroundlayer mit dem Foto der Küche, dann einen Objectlayer mit einem Messer,
das man beim draufklicken ins Inventory aufnimmt. Das funktioniert so:

Das Messer in der Küche ist messer1_mc, im Inventory
gibt es Messer2_btn.

Dann im Actionscript von Scene Küche am Anfang:

messer2_mc._visible = false;
messer1_mc._visible = true;

und später
messer1_mc.onPress = function(){
messer2_mc._visible = true;
messer1_mc._visible = false;
messerlocated = "messergefunden!"
}

Es ergibt den Eindruck, als ob man Messer ins Inventory aufnimmt.
So weit so gut.

Problem: Es gibt einen Pfeil-Button in der Küche zum WohnzimmerScene und umgekehrt. Wenn ich einmal ins Wohnzimmer gehe und und zurückkomme,
ist Messer1 wieder sichtbar und Messeer2 nicht, da die Scene von Anfang an abgespielt wird. Ich möchte aber, dass meine Aktionen in den Scenen "gemerkt" werden!

!.Frage: Versteht ihr, worauf ich hinaus will :-)?
2.Frage: Wie kann ich Aktionen ausführen, die dann auch in anderen Scenen gelten? Bisher ist alles, was ich mache, immer nur in der einen Szene gültig, aber wenn rausgeht und sie dann sie wieder betritt, geht es bei Null los.
Ich habe uebrigens in der Scene "Kueche" ein Layer Background, ein Layer objects, ein Layer Actionscript. Bei "Wohnzimmer" dasGleiche in gruen.
Vielleicht kann ich am Ende eines Actionscripts einen Befehl eingeben sinngemaess "Merke alle Aktionen, die beim Abspielen dieser Scene ausgefuehrt wurden (z.B. Messer1 wurde gedrueckt und damit unsichtbar, dafuer Messer zwei sichtbar) , was alles fuer die Zukunft gemerkt wird. Egal, wie oft ich danach wechsel zwischen den Scenen.
3.Frage: Später möchte ich vielleicht auch mal in der Küche einen Schalter drücken, der im Wohnzimmer den Fernseher anmacht. Das heißt, im Wohnzimmer-Actionscript müsste glaube ich stehen, "if in Scene Küche schalter2_mc.visible = true, then in this scene televisiononpicture_mc = visible. Oder andersrum, im AS von Küche müsste stehen, if schalter2_mc visible = true, then all other layers schalter2_mc visible = true.

Das Problem hier ist ein vereinfachtes Beispiel, später möchte ich dann mal 10 Räume machen.
Schlagwörter: Actionscript 3, Adventure, Scene
Tetenja#2
Benutzerbild von Tetenja
Beiträge: 69
Registriert: Apr 2013

12.12.2015, 04:26

Hallo das liegt daran das dein Script in der  Küche eingebaut ist.
Du musst dein Script übergeordnet anlegen, also aufrufen bevor du in der Küche bist.
Du kannst das Messer auch an eine Variable übergeben  die überall  wirksam ist.
Also wenn das Messer angeklickt ist, wird der Wert einer Variablen auf 1 gesetzt  und das Spiel setzt das Messer dann auf true.
flashmon1#3
Benutzerbild von flashmon1
Beiträge: 4
Registriert: Dec 2015

Themenautor/in

12.12.2015, 14:34

Genau diese "übergeordnete Timeline" verstehe ich nicht! Ich habe doch in jeder Scene eine eigene Timeline? Oder ist es die Timeline der Scene, die ganz oben ist, also am Anfang abgespielt wird?
Tetenja#4
Benutzerbild von Tetenja
Beiträge: 69
Registriert: Apr 2013

13.12.2015, 06:36

Man muss da ein wenig umdenken!
Wenn das Script am Anfang eingelesen wird, arbeitet er das von oben nach unten ab und merkt sich alles. Also wenn ich sage das meine Variable a= 0 ist bleibt das so bis ich das ändere.
Wenn ich den Schlüssel dann wegnehme, sage ich, a = 1 und mit einer Funktion   ENTER_FRAME überprüfe ich mit if(a == 1){Schlüssel = true}.
Und weil das Script ja außerhalb der Küche aufgerufen wurde bleibt a immer a und der Schlüssel = true.
Also wenn du in Scene 1 bist legst du ganz oben nur dein Script an und machst einfach deine Küche auf Bild 2 und so weiter. Dann kannst du mit Goto immer auf Bild 2 gehen um in deine Küche zu kommen und das Script geht nicht wieder von vorne los.
Mit der Timeline ist das so:
Wenn du ein MC (Movieclip) von einem Auto hast kannst du das mit Auto.X und Auto.Y auf der Bühne bewegen. Wenn sich auch die Räder drehen sollen, kann man im MC Auto ein neues MC machen das Rad nennen und es mit Rotation drehen. Oder man kann von außen sagen Auto,Rad.rotation.
Die zweite Methode ist besser weil ich bestimmen kann wenn das Auto eine bestimmte Position erreicht hat, das auch die Rotation der Räder stoppt.
flashmon1#5
Benutzerbild von flashmon1
Beiträge: 4
Registriert: Dec 2015

Themenautor/in

13.12.2015, 09:51

Hallo Tetenja,

so sinngemäß kann ich dir glaube ich folgen, danke!

Wo ich noch Hilfe brauche: Im Augenblick verstehe ich die Flashstruktur so:

Es gibt Scenen,  das sind sozusagen die obersten "Ordner". Die kann ich in der Reihenfolge mit der Maus verschieben, mein "Film" startet immer mit dem obersten Ordner und dann der Reihenfolge nach. Jede Scene hat ihren Content, der auf einem oder mehreren Layern ist. Dazu eine Timeline, die aber in meinem Spiel keine Rolle spielt.

Verstehe ich das so richtig? Oder habe ich da noch einen fundamentalen Denkfehler?

Meinst du, ich soll eine contentleere Scene bei der Scenenbox kreiieren und diese ganz nach oben ziehen? Und dort nur einen  Actionscriptlayer anlegen? Der ist dann automatisch übergeordnet, weil er ganz oben ist?
Aber trotzdem müssen doch die einzelnen Scenen ihr eigenes Actionscript haben oder sollte ich alles Actionscript KOMPLETT nur in ein einzelnes, und zwar das in der leeren Scene, tun?
Tetenja#6
Benutzerbild von Tetenja
Beiträge: 69
Registriert: Apr 2013

14.12.2015, 06:04

Flash ist sehr komplex und eigentlich gibt es kein genaues Vorgehen mit einer bestimmten Reihenfolge. Man braucht eigentlich nicht mal was auf der Bühne zu legen, weil man auch das Programmieren kann und der Code könnte auch noch extern vorliegen.
Was aber wichtig ist wenn man etwas benutzen möchte, ist das man einen Movieclip  oder eine Schaltfläche angelegt hat und diese ein Namen gibt.
Ich hab dir mal ein kleines Beispiel geschickt wo ich das besser erklären kann.
Der Quellcode  befindet sich ganz oben und ist mit einem kleinem (a ) gekennzeichnet.
Unten hab ich ein MC angelegt und ihm den Name (Zeiger_mc) gegeben und darüber wegen der Optik eine runde Form gezeichnet. Wenn Du auf den Zeiger doppelklickst ist in dem( Zeiger_mc )ein weiteres MC mit dem Namen (Zeiger2_mc).
Nur so ist es möglich dass sich der kleine Zeiger dreht und gleichzeitig an der Spitze des Großen Zeigers bleibt, obwohl sich der Große Zeiger ja auch dreht.
Am Anfang hab ich auch immer den Fehler gemacht und für beide Zeiger ein eigenen Code benutzt.
Also den gesamten Code mit der abfrage der Uhrzeit war in jedem Zeiger. Das kostet richtig Speicher und man sieht am Ende nicht mehr  wo man welche Codeschnipsel eingetippt hat.
Wenn Du jetzt an Stelle des  (Zeiger_mc) die Küche hast und (Zeiger2_mc) währe dein Schlüssel, könntest Du das ganze schon von außen steuern. Dazu müsste nur die beiden Schlüsselbilder: Knopf und Zeiger auf der Zeitleiste an Position 2, weil sonst auch hier der Code wieder neu eingelesen wird wenn Du mit Goto zur Position 1 gehst. Und bei Position 2 fügst du oben als Code einfach stop() ein, damit er nicht immer hin und her springt.
Besser wäre es noch wenn man alles auf einer Ebne macht.
Also 1 MC mit dem Menü für den Spieler und darin die Räume und in den Räumen die Gegenstände.
Ich schau mal, wenn ich Zeit hab mach ich mal einen kleinen Test, so einfach wie es geht.

Angehängte Dateien:
Adobe Flash Quelldatei Zeiger.fla8.34 KB
Geändert von Tetenja am 14.12.15 um 06:12 Uhr
flashmon1#7
Benutzerbild von flashmon1
Beiträge: 4
Registriert: Dec 2015

Themenautor/in

30.12.2015, 16:03

Hallo! Weihnachten gut überstanden? Ich war sehr beschäftigt und musste alles auf die lange Bank schieben!

Vielen Dank für die Mühe mit der Datei!

Ich habe eine kleine Bitte: Im Link ist mein AdventureGame. Inzwischen klappt das wichtigste, man kann zwischen den 4 Räumen hin- und herlaufen!

Jeder Raum hat ein eigenes Layer und ein zweites Layer für Buttons (inklusive Objects).

Wie du siehst, habe ich ein Frame ein Raum gemacht. Ich würde es auch alles auf einen Frame machen, aber weiss nicht, wie man dann jeweils einen Raum und sein Buttonlayer sichtbar macht und alle anderen unsichtbar...Stelle mir das sehr komplex vor.

Im Bedroom ist rechts ein KeyInBedroom Movieclip. Wenn man drauf klickt, wird der unsichtbar und KeyInInventory sichtbar. Leider ist das auf diesen Frame beschränkt. Beim rausgehen und wiederreinkommen ist der Frame reseted. Alle anderen Räume haben leider immer KeyInInventory  sichtbar. Kannst du mir dabei helfen? Nur wenn das nicht zu viel Arbeit ist natürlich, aber ich habe das Gefühl, dass es eigentlich nicht zu viel ist, wenn man weiss, wie!

http://www.file-upload.net/download-11165902/BasicAdventureGame.rar.html

AntwortenRegistrieren Seite1  

Schnellantwort

Du musst registriert sein, um diese Funktion nutzen zu können.

 
Ähnliche Beiträge zum Thema
Partner Webseiten: art-and-law.de  Mediengestalter.info   phpwelt.de   Scubacube.de  
Haftungsausschluss   Datenschutzerklärung   Impressum
© 1999-2024 Sebastian Wichmann - Flashhilfe.de